Commit 87582521 by Jakub Jelinek Committed by Jakub Jelinek

re PR sanitizer/66343 ("Error: .Lubsan_type3 already defined" with UBSan and precompiled headers)

	PR sanitizer/66343
	* ubsan.c (ubsan_ids): New GTY(()) array.
	(ubsan_type_descriptor, ubsan_create_data): Use ubsan_ids
	instead of static local counters.

	* gcc.dg/pch/pr66343-1.c: New test.
	* gcc.dg/pch/pr66343-1.hs: New file.
	* gcc.dg/pch/pr66343-2.c: New test.
	* gcc.dg/pch/pr66343-2.hs: New file.

From-SVN: r240803
parent 8b7033e0
2016-10-05 Jakub Jelinek <jakub@redhat.com>
PR sanitizer/66343
* ubsan.c (ubsan_ids): New GTY(()) array.
(ubsan_type_descriptor, ubsan_create_data): Use ubsan_ids
instead of static local counters.
2016-10-05 Martin Sebor <msebor@redhat.com>
PR bootstrap/77819
......
2016-10-05 Jakub Jelinek <jakub@redhat.com>
PR sanitizer/66343
* gcc.dg/pch/pr66343-1.c: New test.
* gcc.dg/pch/pr66343-1.hs: New file.
* gcc.dg/pch/pr66343-2.c: New test.
* gcc.dg/pch/pr66343-2.hs: New file.
2016-10-05 Bernd Edlinger <bernd.edlinger@hotmail.de>
* c-c++-common/Wint-in-bool-context.c: Update test.
......
/* PR sanitizer/66343 */
/* { dg-do assemble } */
/* { dg-options "-fsanitize=undefined" } */
#include "pr66343-1.h"
void
bar (int a, int b)
{
a / b;
}
/* Hack to turn off PCH assembly comparison, as it is incompatible
with dg-do assemble. The target condition will be always false. */
/* { dg-error "" "" { target { lp64 && { ! lp64 } } } } */
/* PR sanitizer/66343 */
/* { dg-options "-fsanitize=undefined" } */
void
foo (int a, int b)
{
a / b;
}
/* PR sanitizer/66343 */
/* { dg-options "-fsanitize=undefined" } */
#include "pr66343-2.h"
void
bar (int a, int b)
{
a / b;
}
/* PR sanitizer/66343 */
/* { dg-options "-fsanitize=undefined" } */
void
foo (int a, int b)
{
a / b;
}
......@@ -314,6 +314,10 @@ get_ubsan_type_info_for_type (tree type)
return 0;
}
/* Counters for internal labels. ubsan_ids[0] for Lubsan_type,
ubsan_ids[1] for Lubsan_data labels. */
static GTY(()) unsigned int ubsan_ids[2];
/* Helper routine that returns ADDR_EXPR of a VAR_DECL of a type
descriptor. It first looks into the hash table; if not found,
create the VAR_DECL, put it into the hash table and return the
......@@ -461,10 +465,9 @@ ubsan_type_descriptor (tree type, enum ubsan_print_style pstyle)
TREE_STATIC (str) = 1;
char tmp_name[32];
static unsigned int type_var_id_num;
ASM_GENERATE_INTERNAL_LABEL (tmp_name, "Lubsan_type", type_var_id_num++);
ASM_GENERATE_INTERNAL_LABEL (tmp_name, "Lubsan_type", ubsan_ids[0]++);
decl = build_decl (UNKNOWN_LOCATION, VAR_DECL, get_identifier (tmp_name),
dtype);
dtype);
TREE_STATIC (decl) = 1;
TREE_PUBLIC (decl) = 0;
DECL_ARTIFICIAL (decl) = 1;
......@@ -564,8 +567,7 @@ ubsan_create_data (const char *name, int loccnt, const location_t *ploc, ...)
/* Now, fill in the type. */
char tmp_name[32];
static unsigned int ubsan_var_id_num;
ASM_GENERATE_INTERNAL_LABEL (tmp_name, "Lubsan_data", ubsan_var_id_num++);
ASM_GENERATE_INTERNAL_LABEL (tmp_name, "Lubsan_data", ubsan_ids[1]++);
tree var = build_decl (UNKNOWN_LOCATION, VAR_DECL, get_identifier (tmp_name),
ret);
TREE_STATIC (var) = 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment