gcc/
authorienkovich <ienkovich@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 Nov 2014 08:15:21 +0000 (08:15 +0000)
committerienkovich <ienkovich@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 Nov 2014 08:15:21 +0000 (08:15 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@217825 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cfgexpand.c
gcc/function.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/asan/pr63845.c [new file with mode: 0644]

index be20db1..69521d3 100644 (file)
@@ -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
index 45c13b4..f61140e 100644 (file)
@@ -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++)
     {
index ef98091..97e0b79 100644 (file)
@@ -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);
index 52d2919..772fbd9 100644 (file)
@@ -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 (file)
index 0000000..a3fbe06
--- /dev/null
@@ -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;
+}
+