]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/39360 (ICE in referenced_var_lookup, at tree-dfa.c:563)
authorJakub Jelinek <jakub@redhat.com>
Fri, 6 Mar 2009 22:51:28 +0000 (23:51 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 6 Mar 2009 22:51:28 +0000 (23:51 +0100)
PR middle-end/39360
* tree-flow.h (add_referenced_var): Return bool instead of void.
* tree-dfa.c (add_referenced_var): Return result of
referenced_var_check_and_insert call.
* tree-inline.c (expand_call_inline): Call add_referenced_var instead
of referenced_var_check_and_insert.

* gcc.c-torture/compile/pr39360.c: New test.

From-SVN: r144683

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr39360.c [new file with mode: 0644]
gcc/tree-dfa.c
gcc/tree-flow.h
gcc/tree-inline.c

index f6204bf557e5c92d4a74345e4c2ea692fb381e1b..68bd222fb79683e48faf859c6644d1506c42125b 100644 (file)
@@ -1,5 +1,12 @@
 2009-03-06  Jakub Jelinek  <jakub@redhat.com>
 
+       PR middle-end/39360
+       * tree-flow.h (add_referenced_var): Return bool instead of void.
+       * tree-dfa.c (add_referenced_var): Return result of
+       referenced_var_check_and_insert call.
+       * tree-inline.c (expand_call_inline): Call add_referenced_var instead
+       of referenced_var_check_and_insert.
+
        PR debug/39372
        * dwarf2out.c (add_abstract_origin_attribute): Return
        origin_die.
index cbc8ae27aaae6468e76c7c866765af741d428a1c..c349894213c9ce12a4e6d65643a6456185259098 100644 (file)
@@ -1,5 +1,8 @@
 2009-03-06  Jakub Jelinek  <jakub@redhat.com>
 
+       PR middle-end/39360
+       * gcc.c-torture/compile/pr39360.c: New test.
+
        PR debug/39372
        * g++.dg/debug/dwarf2/static-local-var-in-ctor.C: New test.
 
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr39360.c b/gcc/testsuite/gcc.c-torture/compile/pr39360.c
new file mode 100644 (file)
index 0000000..0bd6311
--- /dev/null
@@ -0,0 +1,16 @@
+/* PR middle-end/39360 */
+
+static int a[] = { 1 };
+
+static inline void
+bar (int **x)
+{
+  static int *c[2] = { 0, a };
+  *x = c[1];
+}
+
+int
+foo (int **x)
+{
+  bar (x);
+}
index df0be2df134a54b11af9672de482a5be1f485ca8..5241e64c9292e26f5960172621687ec8d4aa106e 100644 (file)
@@ -1,6 +1,6 @@
 /* Data flow functions for trees.
-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008 Free Software
-   Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
+   Free Software Foundation, Inc.
    Contributed by Diego Novillo <dnovillo@redhat.com>
 
 This file is part of GCC.
@@ -639,7 +639,7 @@ set_default_def (tree var, tree def)
 
 /* Add VAR to the list of referenced variables if it isn't already there.  */
 
-void
+bool
 add_referenced_var (tree var)
 {
   var_ann_t v_ann;
@@ -655,7 +655,7 @@ add_referenced_var (tree var)
       
       /* Tag's don't have DECL_INITIAL.  */
       if (MTAG_P (var))
-       return;
+       return true;
 
       /* Scan DECL_INITIAL for pointer variables as they may contain
         address arithmetic referencing the address of other
@@ -667,7 +667,11 @@ add_referenced_var (tree var)
             optimizers.  */
           && !DECL_EXTERNAL (var))
        walk_tree (&DECL_INITIAL (var), find_vars_r, NULL, 0);
+
+      return true;
     }
+
+  return false;
 }
 
 /* Remove VAR from the list.  */
index 01953b593324c91b3e35168a65cc1e98a1dd9702..40829675b84cb6079ff65d4cb5ac51f8bd192735 100644 (file)
@@ -768,7 +768,7 @@ extern void dump_referenced_vars (FILE *);
 extern void dump_variable (FILE *, tree);
 extern void debug_variable (tree);
 extern tree get_virtual_var (tree);
-extern void add_referenced_var (tree);
+extern bool add_referenced_var (tree);
 extern void remove_referenced_var (tree);
 extern void mark_symbols_for_renaming (gimple);
 extern void find_new_referenced_vars (gimple);
index 63392e21c4bf2cb8ba83de65c29f8172637ecfb7..917b5267434fcc16a8f44853e38868038690cd5a 100644 (file)
@@ -1,5 +1,5 @@
 /* Tree inlining.
-   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
    Free Software Foundation, Inc.
    Contributed by Alexandre Oliva <aoliva@redhat.com>
 
@@ -3383,7 +3383,7 @@ expand_call_inline (basic_block bb, gimple stmt, copy_body_data *id)
       var = TREE_VALUE (t_step);
       if (TREE_STATIC (var) && !TREE_ASM_WRITTEN (var))
        {
-         if (var_ann (var) && referenced_var_check_and_insert (var))
+         if (var_ann (var) && add_referenced_var (var))
            cfun->local_decls = tree_cons (NULL_TREE, var,
                                           cfun->local_decls);
        }