diff mbox

Fix -fsanitize=undefined -flto (PR sanitizer/60535)

Message ID 20140317185009.GP22862@tucnak.redhat.com
State New
Headers show

Commit Message

Jakub Jelinek March 17, 2014, 6:50 p.m. UTC
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  <jakub@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.


	Jakub

Comments

Richard Biener March 18, 2014, 9 a.m. UTC | #1
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  <jakub@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
> 
>
diff mbox

Patch

--- 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);
 
   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
 #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));