Skip to content

Clang miscompiles crtend. #4081

@EdSchouten

Description

@EdSchouten
Bugzilla Link 3709
Resolution INVALID
Resolved on Mar 04, 2009 14:38
Version unspecified
OS FreeBSD
Blocks #4068
Attachments Reduced testcase
CC @asl,@efriedma-quic,@pwo

Extended Description

When compiling the attached code without any optimization on x86_64, Clang generates the following:

0000000000000000 <__do_global_ctors_aux>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 48 83 ec 10 sub $0x10,%rsp
8: 48 8d 04 25 00 00 00 lea 0x0,%rax
f: 00
10: 48 b9 f8 ff ff ff ff mov $0xfffffffffffffff8,%rcx
17: ff ff ff
1a: 48 01 c8 add %rcx,%rax
1d: 48 89 45 f8 mov %rax,0xfffffffffffffff8(%rbp)
21: 48 8b 45 f8 mov 0xfffffffffffffff8(%rbp),%rax
25: 48 8b 00 mov (%rax),%rax
28: b9 ff ff ff ff mov $0xffffffff,%ecx
2d: 89 c9 mov %ecx,%ecx
2f: 48 39 c8 cmp %rcx,%rax
32: 74 20 je 54 <__do_global_ctors_aux+0x54>
34: 48 8b 45 f8 mov 0xfffffffffffffff8(%rbp),%rax
38: 48 8b 00 mov (%rax),%rax
3b: ff d0 callq *%eax
3d: 48 8b 45 f8 mov 0xfffffffffffffff8(%rbp),%rax
41: 48 b9 f8 ff ff ff ff mov $0xfffffffffffffff8,%rcx
48: ff ff ff
4b: 48 01 c8 add %rcx,%rax
4e: 48 89 45 f8 mov %rax,0xfffffffffffffff8(%rbp)
52: eb cd jmp 21 <__do_global_ctors_aux+0x21>
54: 48 83 c4 10 add $0x10,%rsp
58: 5d pop %rbp
59: c3 retq

If we turn on the optimizer, we get:

0000000000000000 <__do_global_ctors_aux>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 30 c0 xor %al,%al
6: 66 data16
7: 66 data16
8: 66 data16
9: 90 nop
a: 66 data16
b: 66 data16
c: 90 nop
d: 66 data16
e: 66 data16
f: 90 nop
10: f6 d0 not %al
12: a8 01 test $0x1,%al
14: b0 00 mov $0x0,%al
16: 75 f8 jne 10 <__do_global_ctors_aux+0x10>
18: 5d pop %rbp
19: c3 retq

GCC generates the following code when using -O:

0000000000000000 <__do_global_ctors_aux>:
0: 53 push %rbx
1: 48 8b 05 00 00 00 00 mov 0(%rip),%rax # 8 <__do_global_ctors_aux+0x8>
8: 48 83 f8 ff cmp $0xffffffffffffffff,%rax
c: 74 18 je 26 <__do_global_ctors_aux+0x26>
e: bb 00 00 00 00 mov $0x0,%ebx
13: ff d0 callq *%eax
15: 48 8b 83 00 00 00 00 mov 0x0(%rbx),%rax
1c: 48 83 eb 08 sub $0x8,%rbx
20: 48 83 f8 ff cmp $0xffffffffffffffff,%rax
24: 75 ed jne 13 <__do_global_ctors_aux+0x13>
26: 5b pop %rbx
27: c3 retq

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugzillaIssues migrated from bugzillaclang:codegenIR generation bugs: mangling, exceptions, etc.invalidResolved as invalid, i.e. not a bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions