Skip to content

Clobber between alloca and stack arg #63430

Closed
@nikic

Description

@nikic
define i1 @test(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5, i128 %x) {
  %alloca = alloca i128
  store i128 %x, ptr %alloca
  store i128 0, ptr %alloca
  %cmp = icmp eq i128 %x, -1
  ret i1 %cmp
}

Results in:

	movq	8(%rsp), %rax
	xorps	%xmm0, %xmm0
	movaps	%xmm0, 8(%rsp)
	andq	16(%rsp), %rax
	cmpq	$-1, %rax
	sete	%al
	retq

The final argument is passed in 8(%rsp) and 16(%rsp). The zero store writes 128 bits to 8(%rsp), clobbering the argument before it is read.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions