int x = 1; int main (void) { int t = 1/x; if (t == 1) ; else __builtin_abort(); return 0; } /* +------------------------------------------------------------+--------------------------------------------------------+ | gcc.s (gcc A.c -O3 -S) | clang.s (clang A.c -O3 -S) | +------------------------------------------------------------+--------------------------------------------------------+ |main: | * |.LFB11: |main: # @main * | .cfi_startproc | .cfi_startproc | | movl $1, %eax |# BB#0: # %entry * | cltd | | | idivl x1638(%rip) | | | cmpl $1, %eax | | | jne .L5 | | | xorl %eax, %eax | | | ret | | |.L5: | | | pushq %rax | pushq %rax | | |.Ltmp0: * | .cfi_def_cfa_offset 16 | .cfi_def_cfa_offset 16 | | call abort | movl x1638(%rip), %eax * | | cmpl $1, %eax * | | jne .LBB0_3 * | |# BB#1: # %entry * | | incl %eax # <--HERE * | | cmpl $3, %eax # <--HERE * | | jae .LBB0_3 # <--HERE * | |# BB#2: # %if.end * | | xorl %eax, %eax * | | popq %rdx * | | retq * | |.LBB0_3: # %if.else * | | callq abort * | |.Ltmp1: * | | .size main, .Ltmp1-main * | .cfi_endproc | .cfi_endproc | |.LFE11: | * | .size main, .-main | .type x1638,@object # @x1638 * | .section .text.unlikely | | |.LCOLDE0: | | | .section .text.startup | | |.LHOTE0: | | | .globl x1638 | | | .data | .data | | .align 4 | .globl x1638 * | .type x1638, @object | .align 4 * | .size x1638, 4 | | |x1638: |x1638: | | .long 1 | .long 1 # 0x1 * | | .size x1638, 4 * | | * +------------------------------------------------------------+--------------------------------------------------------+ clang version 3.7.0 (trunk 237801) Target: x86_64-unknown-linux-gnu Thread model: posix gcc (GCC) 6.0.0 20150416 (experimental) Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. bug番号 : 23672 報告日 : 2015/05/27 /*