On Mon, 17 Mar 2014, Jakub Jelinek wrote: > Hi! > > Apparently rest_of_decl_compilation only calls varpool_finalize_decl > if not in_lto_p, so this patch calls it explicitly after that call to > make sure with -flto we register the newly created vars with varpool as > well. > > Additionally, the patch gives name to a few further builtin types, so that > the null-4.c and overflow-int128.c tests don't fail with -flto (without the > lto-lang.c change they printed <unknown> as type name). > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? > > 2014-03-17 Jakub Jelinek <ja...@redhat.com> > > PR sanitizer/60535 > * ubsan.c (ubsan_type_descriptor, ubsan_create_data): Call > varpool_finalize_decl after rest_of_decl_compilation. > lto/ > * lto-lang.c (lto_init): Add NAME_TYPE for int128_integer_type_node > and complex_{float,{,long_}double}_type_node. > testsuite/ > * c-c++-common/ubsan/null-1.c: Don't skip if -flto. > * c-c++-common/ubsan/null-2.c: Likewise. > * c-c++-common/ubsan/null-3.c: Likewise. > * c-c++-common/ubsan/null-4.c: Likewise. > * c-c++-common/ubsan/null-5.c: Likewise. > * c-c++-common/ubsan/null-6.c: Likewise. > * c-c++-common/ubsan/null-7.c: Likewise. > * c-c++-common/ubsan/null-8.c: Likewise. > * c-c++-common/ubsan/null-9.c: Likewise. > * c-c++-common/ubsan/null-10.c: Likewise. > * c-c++-common/ubsan/null-11.c: Likewise. > * c-c++-common/ubsan/overflow-1.c: Likewise. > * c-c++-common/ubsan/overflow-2.c: Likewise. > * c-c++-common/ubsan/overflow-add-1.c: Likewise. > * c-c++-common/ubsan/overflow-add-2.c: Likewise. > * c-c++-common/ubsan/overflow-int128.c: Likewise. > * c-c++-common/ubsan/overflow-mul-1.c: Likewise. > * c-c++-common/ubsan/overflow-mul-2.c: Likewise. > * c-c++-common/ubsan/overflow-mul-3.c: Likewise. > * c-c++-common/ubsan/overflow-mul-4.c: Likewise. > * c-c++-common/ubsan/overflow-negate-1.c: Likewise. > * c-c++-common/ubsan/overflow-negate-2.c: Likewise. > * c-c++-common/ubsan/overflow-sub-1.c: Likewise. > * c-c++-common/ubsan/overflow-sub-2.c: Likewise. > * c-c++-common/ubsan/pr59333.c: Likewise. > * c-c++-common/ubsan/pr59503.c: Likewise. > * c-c++-common/ubsan/pr59667.c: Likewise. > * c-c++-common/ubsan/undefined-1.c: Likewise. > * g++.dg/ubsan/pr59250.C: Likewise. > * g++.dg/ubsan/pr59306.C: Likewise. > > --- gcc/ubsan.c.jj 2014-01-08 17:45:06.000000000 +0100 > +++ gcc/ubsan.c 2014-03-17 14:09:40.280376415 +0100 > @@ -391,6 +391,7 @@ ubsan_type_descriptor (tree type, bool w > TREE_STATIC (ctor) = 1; > DECL_INITIAL (decl) = ctor; > rest_of_decl_compilation (decl, 1, 0); > + varpool_finalize_decl (decl); > > /* Save the VAR_DECL into the hash table. */ > decl_for_type_insert (type, decl); > @@ -502,6 +503,7 @@ ubsan_create_data (const char *name, loc > TREE_STATIC (ctor) = 1; > DECL_INITIAL (var) = ctor; > rest_of_decl_compilation (var, 1, 0); > + varpool_finalize_decl (var);
Isn't varpool_finalize_decl the canonical interface anyway? Thus, you don't need to call rest_of_decl_compilation AFAIK - the varpool machinery will do that. > return var; > } > --- gcc/lto/lto-lang.c.jj 2014-03-10 10:50:15.000000000 +0100 > +++ gcc/lto/lto-lang.c 2014-03-17 15:49:10.592371589 +0100 > @@ -1222,6 +1222,13 @@ lto_init (void) > NAME_TYPE (long_double_type_node, "long double"); > NAME_TYPE (void_type_node, "void"); > NAME_TYPE (boolean_type_node, "bool"); > + NAME_TYPE (complex_float_type_node, "complex float"); > + NAME_TYPE (complex_double_type_node, "complex double"); > + NAME_TYPE (complex_long_double_type_node, "complex long double"); > +#if HOST_BITS_PER_WIDE_INT >= 64 > + if (targetm.scalar_mode_supported_p (TImode)) > + NAME_TYPE (int128_integer_type_node, "__int128"); > +#endif Should be enough to check if int128_integer_type_node is not NULL. Otherwise looks ok. Thanks, Richard. > #undef NAME_TYPE > > /* Initialize LTO-specific data structures. */ > --- gcc/testsuite/c-c++-common/ubsan/null-1.c.jj 2013-11-19 > 21:56:24.566416519 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/null-1.c 2014-03-17 13:23:46.057000209 > +0100 > @@ -1,7 +1,6 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=null -w" } */ > /* { dg-shouldfail "ubsan" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > int > main (void) > --- gcc/testsuite/c-c++-common/ubsan/null-2.c.jj 2013-11-19 > 21:56:24.566416519 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/null-2.c 2014-03-17 13:23:46.060000592 > +0100 > @@ -1,7 +1,6 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=null -w" } */ > /* { dg-shouldfail "ubsan" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > int > main (void) > --- gcc/testsuite/c-c++-common/ubsan/null-3.c.jj 2013-11-19 > 21:56:24.567416516 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/null-3.c 2014-03-17 13:23:46.063000958 > +0100 > @@ -1,7 +1,6 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=null -w" } */ > /* { dg-shouldfail "ubsan" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > int > foo (int *p) > --- gcc/testsuite/c-c++-common/ubsan/null-4.c.jj 2013-11-19 > 21:56:24.567416516 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/null-4.c 2014-03-17 15:37:15.977422737 > +0100 > @@ -1,7 +1,6 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=null -w" } */ > /* { dg-shouldfail "ubsan" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > int > main (void) > --- gcc/testsuite/c-c++-common/ubsan/null-5.c.jj 2013-11-19 > 21:56:24.568416515 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/null-5.c 2014-03-17 13:23:46.070001743 > +0100 > @@ -1,7 +1,6 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=null -w" } */ > /* { dg-shouldfail "ubsan" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > typedef volatile const _Complex float *T; > > --- gcc/testsuite/c-c++-common/ubsan/null-6.c.jj 2013-11-19 > 21:56:24.568416515 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/null-6.c 2014-03-17 13:23:46.073002053 > +0100 > @@ -1,7 +1,6 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=null -w" } */ > /* { dg-shouldfail "ubsan" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > int > main (void) > --- gcc/testsuite/c-c++-common/ubsan/null-7.c.jj 2013-11-19 > 21:56:24.568416515 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/null-7.c 2014-03-17 13:23:46.076002349 > +0100 > @@ -1,7 +1,6 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=null -w" } */ > /* { dg-shouldfail "ubsan" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > int * > gao (void) > --- gcc/testsuite/c-c++-common/ubsan/null-8.c.jj 2013-11-19 > 21:56:24.569416512 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/null-8.c 2014-03-17 13:23:46.079002629 > +0100 > @@ -1,7 +1,6 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=null -w" } */ > /* { dg-shouldfail "ubsan" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > struct S { > int i; > --- gcc/testsuite/c-c++-common/ubsan/null-9.c.jj 2013-11-19 > 21:56:24.569416512 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/null-9.c 2014-03-17 13:23:46.082002896 > +0100 > @@ -1,7 +1,6 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=null -w" } */ > /* { dg-shouldfail "ubsan" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > union U { > int i; > --- gcc/testsuite/c-c++-common/ubsan/null-10.c.jj 2013-11-19 > 21:56:24.570416506 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/null-10.c 2014-03-17 > 13:23:46.037997317 +0100 > @@ -1,7 +1,6 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=null -w" } */ > /* { dg-shouldfail "ubsan" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > int > main (void) > --- gcc/testsuite/c-c++-common/ubsan/null-11.c.jj 2013-11-19 > 21:56:24.570416506 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/null-11.c 2014-03-17 > 13:23:46.040997808 +0100 > @@ -1,7 +1,6 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=null -w" } */ > /* { dg-shouldfail "ubsan" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > struct S { > int i; > --- gcc/testsuite/c-c++-common/ubsan/overflow-1.c.jj 2013-12-16 > 09:01:19.528694075 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/overflow-1.c 2014-03-17 > 13:23:46.115005224 +0100 > @@ -1,6 +1,5 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=signed-integer-overflow" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > #ifndef ASM1 > # define ASM1(a) /* Nothing */ > --- gcc/testsuite/c-c++-common/ubsan/overflow-2.c.jj 2013-12-16 > 09:01:19.529694084 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/overflow-2.c 2014-03-17 > 13:23:46.117005412 +0100 > @@ -1,6 +1,5 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=signed-integer-overflow" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > #define ASM1(a) asm volatile ("" : "+g" (a)) > #define ASM2(a, b) asm volatile ("" : "+g" (a), "+g" (b)) > --- gcc/testsuite/c-c++-common/ubsan/overflow-add-1.c.jj 2013-12-05 > 09:39:37.025471293 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/overflow-add-1.c 2014-03-17 > 13:23:46.129006333 +0100 > @@ -1,6 +1,5 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable" } > */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > #define SCHAR_MAX __SCHAR_MAX__ > #define SHRT_MAX __SHRT_MAX__ > --- gcc/testsuite/c-c++-common/ubsan/overflow-add-2.c.jj 2013-12-27 > 19:24:31.892788744 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/overflow-add-2.c 2014-03-17 > 13:23:46.135006670 +0100 > @@ -1,6 +1,5 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable" } > */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > #define INT_MAX __INT_MAX__ > #define INT_MIN (-__INT_MAX__ - 1) > --- gcc/testsuite/c-c++-common/ubsan/overflow-int128.c.jj 2013-12-17 > 20:04:24.664056891 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/overflow-int128.c 2014-03-17 > 15:37:24.128376597 +0100 > @@ -1,7 +1,6 @@ > /* { dg-do run } */ > /* { dg-require-effective-target int128 } */ > /* { dg-options "-fsanitize=signed-integer-overflow" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > /* 2^127 - 1 */ > #define INT128_MAX (__int128) (((unsigned __int128) 1 << ((__SIZEOF_INT128__ > * __CHAR_BIT__) - 1)) - 1) > --- gcc/testsuite/c-c++-common/ubsan/overflow-mul-1.c.jj 2013-12-05 > 09:39:37.027471281 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/overflow-mul-1.c 2014-03-17 > 13:23:46.140006896 +0100 > @@ -1,6 +1,5 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable" } > */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > #define SCHAR_MAX __SCHAR_MAX__ > #define SHRT_MAX __SHRT_MAX__ > --- gcc/testsuite/c-c++-common/ubsan/overflow-mul-2.c.jj 2013-12-27 > 19:24:31.907788669 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/overflow-mul-2.c 2014-03-17 > 13:23:46.143007014 +0100 > @@ -1,6 +1,5 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable" } > */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > #define INT_MAX __INT_MAX__ > #define LONG_MAX __LONG_MAX__ > --- gcc/testsuite/c-c++-common/ubsan/overflow-mul-3.c.jj 2013-12-16 > 19:45:37.820560165 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/overflow-mul-3.c 2014-03-17 > 13:23:46.180008229 +0100 > @@ -1,6 +1,5 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=signed-integer-overflow" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > __attribute__((noinline, noclone)) long long > mul (long long x, long long y) > --- gcc/testsuite/c-c++-common/ubsan/overflow-mul-4.c.jj 2013-12-27 > 19:24:31.907788669 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/overflow-mul-4.c 2014-03-17 > 14:16:29.242042830 +0100 > @@ -1,6 +1,6 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=signed-integer-overflow" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > + > > int > main () > --- gcc/testsuite/c-c++-common/ubsan/overflow-negate-1.c.jj 2013-12-27 > 19:24:31.908788664 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/overflow-negate-1.c 2014-03-17 > 13:23:46.187008132 +0100 > @@ -1,6 +1,5 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable" } > */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > #define INT_MIN (-__INT_MAX__ - 1) > #define LONG_MIN (-__LONG_MAX__ - 1L) > --- gcc/testsuite/c-c++-common/ubsan/overflow-negate-2.c.jj 2014-02-17 > 10:05:30.397163210 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/overflow-negate-2.c 2014-03-17 > 13:23:46.190008087 +0100 > @@ -1,6 +1,5 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable" } > */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > #define SCHAR_MIN (-__SCHAR_MAX__ - 1) > #define SHRT_MIN (-__SHRT_MAX__ - 1) > --- gcc/testsuite/c-c++-common/ubsan/overflow-sub-1.c.jj 2013-12-05 > 09:39:37.026471287 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/overflow-sub-1.c 2014-03-17 > 13:23:46.193008058 +0100 > @@ -1,6 +1,5 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable" } > */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > #define SCHAR_MAX __SCHAR_MAX__ > #define SCHAR_MIN (-__SCHAR_MAX__ - 1) > --- gcc/testsuite/c-c++-common/ubsan/overflow-sub-2.c.jj 2013-12-27 > 19:24:31.906788674 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/overflow-sub-2.c 2014-03-17 > 13:23:46.196008044 +0100 > @@ -1,6 +1,5 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable" } > */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > #define INT_MAX __INT_MAX__ > #define INT_MIN (-__INT_MAX__ - 1) > --- gcc/testsuite/c-c++-common/ubsan/pr59333.c.jj 2013-12-27 > 19:24:31.924788585 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/pr59333.c 2014-03-17 > 13:23:46.199008026 +0100 > @@ -1,6 +1,5 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=undefined" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > long long int __attribute__ ((noinline, noclone)) > foo (long long int i, long long int j) > --- gcc/testsuite/c-c++-common/ubsan/pr59503.c.jj 2013-12-16 > 09:01:19.528694075 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/pr59503.c 2014-03-17 > 13:23:46.202008009 +0100 > @@ -1,6 +1,5 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=signed-integer-overflow" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > int > main (void) > --- gcc/testsuite/c-c++-common/ubsan/pr59667.c.jj 2014-01-08 > 17:45:05.985539847 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/pr59667.c 2014-03-17 > 13:23:46.205007992 +0100 > @@ -1,7 +1,6 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=undefined" } */ > /* { dg-shouldfail "ubsan" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > int > main (void) > --- gcc/testsuite/c-c++-common/ubsan/undefined-1.c.jj 2013-11-27 > 12:10:46.208899823 +0100 > +++ gcc/testsuite/c-c++-common/ubsan/undefined-1.c 2014-03-17 > 13:23:46.208007974 +0100 > @@ -1,6 +1,5 @@ > /* { dg-do run } */ > /* { dg-options "-fsanitize=undefined" } */ > -/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ > > int > foo (int x, int y) > --- gcc/testsuite/g++.dg/ubsan/pr59250.C.jj 2013-11-25 18:30:19.000000000 > +0100 > +++ gcc/testsuite/g++.dg/ubsan/pr59250.C 2014-03-17 13:24:55.456612415 > +0100 > @@ -1,7 +1,6 @@ > // PR sanitizer/59250 > // { dg-do compile } > // { dg-options "-fsanitize=undefined" } > -// { dg-skip-if "" { *-*-* } { "-flto" } { "" } } > > struct E { > int i; > --- gcc/testsuite/g++.dg/ubsan/pr59306.C.jj 2013-11-27 18:02:44.000000000 > +0100 > +++ gcc/testsuite/g++.dg/ubsan/pr59306.C 2014-03-17 13:24:52.950626701 > +0100 > @@ -1,6 +1,5 @@ > // { dg-do compile } > // { dg-options "-fsanitize=undefined" } > -// { dg-skip-if "" { *-*-* } { "-flto" } { "" } } > > class A { > void bar (void (A::*) (int)); > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE / SUSE Labs SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 GF: Jeff Hawn, Jennifer Guild, Felix Imend"orffer