re PR bootstrap/63995 (Bootstrap error with -mmpx -fcheck-pointer-bounds)

gcc/

	PR bootstrap/63995
	* tree-chkp.c (chkp_make_static_bounds): Share bounds var
	between nodes sharing assembler name.

gcc/testsuite/

	PR bootstrap/63995
	* g++.dg/dg.exp: Add mpx-dg.exp.
	* g++.dg/pr63995-1.C: New.

From-SVN: r218506
This commit is contained in:
Ilya Enkovich 2014-12-09 07:53:17 +00:00 committed by Ilya Enkovich
parent f9ea9950e0
commit 227eabce47
5 changed files with 53 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2014-12-09 Ilya Enkovich <ilya.enkovich@intel.com>
PR bootstrap/63995
* tree-chkp.c (chkp_make_static_bounds): Share bounds var
between nodes sharing assembler name.
2014-12-08 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/64204

View File

@ -1,3 +1,9 @@
2014-12-09 Ilya Enkovich <ilya.enkovich@intel.com>
PR bootstrap/63995
* g++.dg/dg.exp: Add mpx-dg.exp.
* g++.dg/pr63995-1.C: New.
2014-12-08 Sandra Loosemore <sandra@codesourcery.com>
* gcc.target/aarch64/bics_4.c: New.

View File

@ -18,6 +18,7 @@
# Load support procs.
load_lib g++-dg.exp
load_lib mpx-dg.exp
# If a testcase doesn't have special options, use these.
global DEFAULT_CXXFLAGS

View File

@ -0,0 +1,16 @@
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
/* { dg-require-effective-target mpx } */
/* { dg-options "-O2 -g -fcheck-pointer-bounds -mmpx" } */
int test1 (int i)
{
extern const int arr[10];
return arr[i];
}
extern const int arr[10];
int test2 (int i)
{
return arr[i];
}

View File

@ -2760,9 +2760,23 @@ chkp_make_static_bounds (tree obj)
/* First check if we already have required var. */
if (chkp_static_var_bounds)
{
slot = chkp_static_var_bounds->get (obj);
if (slot)
return *slot;
/* For vars we use assembler name as a key in
chkp_static_var_bounds map. It allows to
avoid duplicating bound vars for decls
sharing assembler name. */
if (TREE_CODE (obj) == VAR_DECL)
{
tree name = DECL_ASSEMBLER_NAME (obj);
slot = chkp_static_var_bounds->get (name);
if (slot)
return *slot;
}
else
{
slot = chkp_static_var_bounds->get (obj);
if (slot)
return *slot;
}
}
/* Build decl for bounds var. */
@ -2826,7 +2840,13 @@ chkp_make_static_bounds (tree obj)
if (!chkp_static_var_bounds)
chkp_static_var_bounds = new hash_map<tree, tree>;
chkp_static_var_bounds->put (obj, bnd_var);
if (TREE_CODE (obj) == VAR_DECL)
{
tree name = DECL_ASSEMBLER_NAME (obj);
chkp_static_var_bounds->put (name, bnd_var);
}
else
chkp_static_var_bounds->put (obj, bnd_var);
return bnd_var;
}