https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78529
Bug ID: 78529 Summary: gcc.c-torture/execute/builtins/strcat-chk.c failed with lto/O2 Product: gcc Version: 7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: lto Assignee: unassigned at gcc dot gnu.org Reporter: amker at gcc dot gnu.org Target Milestone: --- Hi, With below commit: commit c618308c1b2a474bd56ede831f681a49f4327d4c Author: prathamesh3492 <prathamesh3492@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Wed Nov 23 10:52:25 2016 +0000 2016-11-23 Richard Biener <rguent...@suse.de> Prathamesh Kulkarni <prathamesh.kulka...@linaro.rog> PR tree-optimization/78154 * tree-vrp.c (gimple_stmt_nonzero_warnv_p): Return true if function returns it's argument and the argument is nonnull. * builtin-attrs.def: Define ATTR_RETURNS_NONNULL, ATT_RETNONNULL_NOTHROW_LEAF. * builtins.def (BUILT_IN_MEMPCPY): Change attribute to ATTR_RETNONNULL_NOTHROW_LEAF. (BUILT_IN_STPCPY): Likewise. (BUILT_IN_STPNCPY): Likewise. (BUILT_IN_MEMPCPY_CHK): Likewise. (BUILT_IN_STPCPY_CHK): Likewise. (BUILT_IN_STPNCPY_CHK): Likewise. (BUILT_IN_STRCAT): Change attribute to ATTR_RET1_NOTHROW_NONNULL_LEAF. (BUILT_IN_STRNCAT): Likewise. (BUILT_IN_STRNCPY): Likewise. (BUILT_IN_MEMSET_CHK): Likewise. (BUILT_IN_STRCAT_CHK): Likewise. (BUILT_IN_STRCPY_CHK): Likewise. (BUILT_IN_STRNCAT_CHK): Likewise. (BUILT_IN_STRNCPY_CHK): Likewise. testsuite/ * gcc.dg/tree-ssa/pr78154.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@242745 138bc75d-0d04-0410-961f-82ee72b054a4 We have new failure: FAIL: gcc.c-torture/execute/builtins/strcat-chk.c execution, -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects With/without the revision, there is difference in assembly like: *** 1368,1387 **** 4023e4: b9401261 ldr w1, [x19, #16] 4023e8: 6b00003f cmp w1, w0 4023ec: 54ffff01 b.ne 4023cc <test1+0x14c> // b.any ! 4023f0: 91001664 add x4, x19, #0x5 ! 4023f4: d2800802 mov x2, #0x40 // #64 ! 4023f8: 52800b01 mov w1, #0x58 // #88 4023fc: aa1303e0 mov x0, x19 402400: 94000950 bl 404940 <memset> 402404: b9400a96 ldr w22, [x20, #8] 402408: f9400297 ldr x23, [x20] 40240c: d2800762 mov x2, #0x3b // #59 402410: 10071c81 adr x1, 4107a0 <s1+0x90> ! 402414: aa0403e0 mov x0, x4 402418: f90023b7 str x23, [x29, #64] 40241c: b9004bb6 str w22, [x29, #72] 402420: 97fffc0c bl 401450 <__strcat_chk> ! 402424: eb00001f cmp x0, x0 402428: 54fffd21 b.ne 4023cc <test1+0x14c> // b.any 40242c: 10071820 adr x0, 410730 <s1+0x20> 402430: f94023a2 ldr x2, [x29, #64] --- 1368,1387 ---- 4023e4: b9401261 ldr w1, [x19, #16] 4023e8: 6b00003f cmp w1, w0 4023ec: 54ffff01 b.ne 4023cc <test1+0x14c> // b.any ! 4023f0: d2800802 mov x2, #0x40 // #64 ! 4023f4: 52800b01 mov w1, #0x58 // #88 ! 4023f8: 91001678 add x24, x19, #0x5 4023fc: aa1303e0 mov x0, x19 402400: 94000950 bl 404940 <memset> 402404: b9400a96 ldr w22, [x20, #8] 402408: f9400297 ldr x23, [x20] 40240c: d2800762 mov x2, #0x3b // #59 402410: 10071c81 adr x1, 4107a0 <s1+0x90> ! 402414: aa1803e0 mov x0, x24 402418: f90023b7 str x23, [x29, #64] 40241c: b9004bb6 str w22, [x29, #72] 402420: 97fffc0c bl 401450 <__strcat_chk> ! 402424: eb00031f cmp x24, x0 402428: 54fffd21 b.ne 4023cc <test1+0x14c> // b.any 40242c: 10071820 adr x0, 410730 <s1+0x20> 402430: f94023a2 ldr x2, [x29, #64] Looks like the "cmp x0, x0" instruction is wrongly optimized? GCC is configured as: configure --target=aarch64-none-elf --prefix=... --with-gmp=... --with-mpfr=... --with-mpc=... --with-isl=... --with-pkgversion=unknown --disable-shared --disable-nls --disable-threads --disable-tls --enable-checking=yes --enable-languages=c,c++,fortran --with-newlib