https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85248
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Self-contained testcase for testsuite: --- gcc/testsuite/gcc.dg/lto/pr85248_0.c.jj 2018-04-06 14:40:13.483893916 +0200 +++ gcc/testsuite/gcc.dg/lto/pr85248_0.c 2018-04-06 14:38:35.190883488 +0200 @@ -0,0 +1,45 @@ +/* PR lto/85248 */ +/* { dg-lto-do run } */ +/* { dg-lto-options { { -flto -O2 } } } */ + +extern void test_alias (int s, int e) __asm__ (__USER_LABEL_PREFIX__ "test"); +extern void test_noreturn (int s, int e) __asm__ (__USER_LABEL_PREFIX__ "test") + __attribute__ ((__noreturn__)); + +extern inline __attribute__ ((__always_inline__, __gnu_inline__)) void +test (int s, int e) +{ + if (__builtin_constant_p (s) && s != 0) + test_noreturn (s, e); + else + test_alias (s, e); +} + +int +foo (void) +{ + static volatile int a; + return a; +} + +static void +bar (void) +{ + test (0, 1); + __builtin_exit (0); +} + +static void +baz () +{ + test (1, 0); +} + +int +main () +{ + if (foo ()) + baz (); + bar (); + __builtin_abort (); +} --- gcc/testsuite/gcc.dg/lto/pr85248_1.c.jj 2018-04-06 14:40:16.611894244 +0200 +++ gcc/testsuite/gcc.dg/lto/pr85248_1.c 2018-04-06 14:39:24.452888715 +0200 @@ -0,0 +1,9 @@ +/* { dg-options "-fno-lto" } */ + +__attribute__((__noipa__)) void +test (int s, int e) +{ + asm volatile ("" : "+g" (s), "+g" (e) : : "memory"); + if (s) + __builtin_abort (); +}