aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Zamyatin <igor.zamyatin@intel.com>2014-11-20 08:15:21 +0000
committerIlya Enkovich <ienkovich@gcc.gnu.org>2014-11-20 08:15:21 +0000
commit8f51aa6b267606e25e9b46e9e67ae9c08616ed28 (patch)
treecba2845509200d5b5845092a0e0cc9a17a90cab6
parent1be0e58d3003aa8a780d229bf38b0e4a61928b9e (diff)
downloadgcc-8f51aa6b267606e25e9b46e9e67ae9c08616ed28.zip
gcc-8f51aa6b267606e25e9b46e9e67ae9c08616ed28.tar.gz
gcc-8f51aa6b267606e25e9b46e9e67ae9c08616ed28.tar.bz2
re PR sanitizer/63845 (c-c++-common/asan/bitfield-[12345].c fails on i?86 -with -fpic)
gcc/ PR sanitizer/63845 * function.c (assign_parms): Move init of pic_offset_table_rtx from here to... * cfgexpand.c (expand_used_vars): ...here. gcc/testsuite/ PR sanitizer/63845 * gcc.dg/asan/pr63845.c: New test. From-SVN: r217825
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cfgexpand.c3
-rw-r--r--gcc/function.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/asan/pr63845.c17
5 files changed, 32 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index be20db1..69521d3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2014-11-20 Igor Zamyatin <igor.zamyatin@intel.com>
+
+ PR sanitizer/63845
+ * function.c (assign_parms): Move init of pic_offset_table_rtx
+ from here to...
+ * cfgexpand.c (expand_used_vars): ...here.
+
2014-11-19 Jan Hubicka <hubicka@ucw.cz>
* tree.c (free_lang_data_in_type): If BINFO has no important
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 45c13b4..f61140e 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -1722,6 +1722,9 @@ expand_used_vars (void)
init_vars_expansion ();
+ if (targetm.use_pseudo_pic_reg ())
+ pic_offset_table_rtx = gen_reg_rtx (Pmode);
+
hash_map<tree, tree> ssa_name_decls;
for (i = 0; i < SA.map->num_partitions; i++)
{
diff --git a/gcc/function.c b/gcc/function.c
index ef98091..97e0b79 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -3679,11 +3679,6 @@ assign_parms (tree fndecl)
fnargs.release ();
- /* Initialize pic_offset_table_rtx with a pseudo register
- if required. */
- if (targetm.use_pseudo_pic_reg ())
- pic_offset_table_rtx = gen_reg_rtx (Pmode);
-
/* Output all parameter conversion instructions (possibly including calls)
now that all parameters have been copied out of hard registers. */
emit_insn (all.first_conversion_insn);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 52d2919..772fbd9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-11-20 Igor Zamyatin <igor.zamyatin@intel.com>
+
+ PR sanitizer/63845
+ * gcc.dg/asan/pr63845.c: New test.
+
2014-11-19 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR sanitizer/63939
diff --git a/gcc/testsuite/gcc.dg/asan/pr63845.c b/gcc/testsuite/gcc.dg/asan/pr63845.c
new file mode 100644
index 0000000..a3fbe06
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/asan/pr63845.c
@@ -0,0 +1,17 @@
+/* PR sanitizer/63845 */
+/* { dg-do compile } */
+/* { dg-options "-fPIC" { target fpic } } */
+
+int __attribute__ ((noinline, noclone))
+foo (void *p)
+{
+ return *(int*)p;
+}
+
+int main ()
+{
+ char a = 0;
+ foo (&a);
+ return 0;
+}
+