diff mbox

Fix PR50260

Message ID Pine.LNX.4.64.1109021816550.25354@wotan.suse.de
State New
Headers show

Commit Message

Michael Matz Sept. 2, 2011, 4:34 p.m. UTC
Hi,

On Fri, 2 Sep 2011, Richard Guenther wrote:

> > Currently regstrapping on x86_64-linux (without Ada).  Okay for trunk?
> 
> Ok.  Time to make get_var_ann private?

Yes.  Should the regstrap succeed on x86_64-linux I'll commit this 
variant of the patch (hunks in tree-flow.h, tree-flow-inline.h and 
tree-dfa.c are new, otherwise the same patch).


Ciao,
Michael.

Comments

Michael Matz Sept. 2, 2011, 6:40 p.m. UTC | #1
Hi,

On Fri, 2 Sep 2011, Michael Matz wrote:

> Hi,
> 
> On Fri, 2 Sep 2011, Richard Guenther wrote:
> 
> > > Currently regstrapping on x86_64-linux (without Ada).  Okay for trunk?
> > 
> > Ok.  Time to make get_var_ann private?
> 
> Yes.  Should the regstrap succeed on x86_64-linux I'll commit this 
> variant of the patch (hunks in tree-flow.h, tree-flow-inline.h and 
> tree-dfa.c are new, otherwise the same patch).

As I feared the call to get_var_ann in set_is_used right now really is 
still needed, privatizing it hence isn't that straight forward.  For now 
I've committed the PR50260 fix without that cleanup as r178489 to fix 
bootstrap for some platforms.


Ciao,
Michael.
Richard Biener Sept. 3, 2011, 8:40 a.m. UTC | #2
On Fri, Sep 2, 2011 at 8:40 PM, Michael Matz <matz@suse.de> wrote:
> Hi,
>
> On Fri, 2 Sep 2011, Michael Matz wrote:
>
>> Hi,
>>
>> On Fri, 2 Sep 2011, Richard Guenther wrote:
>>
>> > > Currently regstrapping on x86_64-linux (without Ada).  Okay for trunk?
>> >
>> > Ok.  Time to make get_var_ann private?
>>
>> Yes.  Should the regstrap succeed on x86_64-linux I'll commit this
>> variant of the patch (hunks in tree-flow.h, tree-flow-inline.h and
>> tree-dfa.c are new, otherwise the same patch).
>
> As I feared the call to get_var_ann in set_is_used right now really is
> still needed, privatizing it hence isn't that straight forward.  For now
> I've committed the PR50260 fix without that cleanup as r178489 to fix
> bootstrap for some platforms.

That's odd though - looking at the single caller it should only ever
be called for referenced vars - which means we miss a referenced var
somewhere.

Richard.

>
> Ciao,
> Michael.
diff mbox

Patch

Index: ipa-split.c
===================================================================
--- ipa-split.c	(revision 178408)
+++ ipa-split.c	(working copy)
@@ -988,6 +988,9 @@  split_function (struct split_point *spli
 	arg = gimple_default_def (cfun, parm);
 	if (!arg)
 	  {
+	    /* This parm wasn't used up to now, but is going to be used,
+	       hence register it.  */
+	    add_referenced_var (parm);
 	    arg = make_ssa_name (parm, gimple_build_nop ());
 	    set_default_def (parm, arg);
 	  }
Index: tree-ssa-phiopt.c
===================================================================
--- tree-ssa-phiopt.c	(revision 178408)
+++ tree-ssa-phiopt.c	(working copy)
@@ -1269,10 +1269,7 @@  cond_store_replacement (basic_block midd
   /* 2) Create a temporary where we can store the old content
         of the memory touched by the store, if we need to.  */
   if (!condstoretemp || TREE_TYPE (lhs) != TREE_TYPE (condstoretemp))
-    {
-      condstoretemp = create_tmp_reg (TREE_TYPE (lhs), "cstore");
-      get_var_ann (condstoretemp);
-    }
+    condstoretemp = create_tmp_reg (TREE_TYPE (lhs), "cstore");
   add_referenced_var (condstoretemp);
 
   /* 3) Insert a load from the memory of the store to the temporary
@@ -1355,10 +1352,7 @@  cond_if_else_store_replacement_1 (basic_
   /* 2) Create a temporary where we can store the old content
 	of the memory touched by the store, if we need to.  */
   if (!condstoretemp || TREE_TYPE (lhs) != TREE_TYPE (condstoretemp))
-    {
-      condstoretemp = create_tmp_reg (TREE_TYPE (lhs), "cstore");
-      get_var_ann (condstoretemp);
-    }
+    condstoretemp = create_tmp_reg (TREE_TYPE (lhs), "cstore");
   add_referenced_var (condstoretemp);
 
   /* 3) Create a PHI node at the join block, with one argument
Index: tree-ssa-pre.c
===================================================================
--- tree-ssa-pre.c	(revision 178408)
+++ tree-ssa-pre.c	(working copy)
@@ -1399,7 +1399,7 @@  get_representative_for (const pre_expr e
   if (!pretemp || exprtype != TREE_TYPE (pretemp))
     {
       pretemp = create_tmp_reg (exprtype, "pretmp");
-      get_var_ann (pretemp);
+      add_referenced_var (pretemp);
     }
 
   name = make_ssa_name (pretemp, gimple_build_nop ());
@@ -3178,10 +3178,7 @@  create_expression_by_pieces (basic_block
   /* Build and insert the assignment of the end result to the temporary
      that we will return.  */
   if (!pretemp || exprtype != TREE_TYPE (pretemp))
-    {
-      pretemp = create_tmp_reg (exprtype, "pretmp");
-      get_var_ann (pretemp);
-    }
+    pretemp = create_tmp_reg (exprtype, "pretmp");
 
   temp = pretemp;
   add_referenced_var (temp);
@@ -3441,10 +3438,7 @@  insert_into_preds_of_block (basic_block
 
   /* Now build a phi for the new variable.  */
   if (!prephitemp || TREE_TYPE (prephitemp) != type)
-    {
-      prephitemp = create_tmp_var (type, "prephitmp");
-      get_var_ann (prephitemp);
-    }
+    prephitemp = create_tmp_var (type, "prephitmp");
 
   temp = prephitemp;
   add_referenced_var (temp);
Index: tree-sra.c
===================================================================
--- tree-sra.c	(revision 178408)
+++ tree-sra.c	(working copy)
@@ -1825,7 +1825,6 @@  create_access_replacement (struct access
   tree repl;
 
   repl = create_tmp_var (access->type, "SR");
-  get_var_ann (repl);
   add_referenced_var (repl);
   if (rename)
     mark_sym_for_renaming (repl);
@@ -4106,7 +4105,6 @@  get_replaced_param_substitute (struct ip
       DECL_NAME (repl) = get_identifier (pretty_name);
       obstack_free (&name_obstack, pretty_name);
 
-      get_var_ann (repl);
       add_referenced_var (repl);
       adj->new_ssa_base = repl;
     }
Index: testsuite/gfortran.fortran-torture/compile/pr50260.f90
===================================================================
--- testsuite/gfortran.fortran-torture/compile/pr50260.f90	(revision 0)
+++ testsuite/gfortran.fortran-torture/compile/pr50260.f90	(revision 0)
@@ -0,0 +1,48 @@ 
+MODULE cp_parser_methods
+  INTEGER, PARAMETER :: default_string_length=80
+  INTEGER, PARAMETER :: default_path_length=250
+  TYPE ilist_type
+     LOGICAL                              :: in_use
+  END TYPE ilist_type
+  TYPE cp_parser_type
+     CHARACTER(LEN=default_path_length)             :: ifn
+     INTEGER                                        :: icol,icol1,icol2
+     TYPE(ilist_type), POINTER                      :: ilist
+  END TYPE cp_parser_type
+  TYPE cp_error_type
+  END TYPE cp_error_type
+CONTAINS
+  FUNCTION cts(i) RESULT(res)
+    CHARACTER(len=6)                         :: res
+  END FUNCTION cts
+  FUNCTION parser_location(parser,error) RESULT(res)
+    TYPE(cp_parser_type), POINTER            :: parser
+    TYPE(cp_error_type), INTENT(inout)       :: error
+    CHARACTER(len=default_path_length+default_string_length)       :: res
+    LOGICAL                                  :: failure
+    IF (.NOT. failure) THEN
+       res="file:'"//TRIM(parser%ifn)//"' line:"//cts(parser%icol)
+    END IF
+  END FUNCTION parser_location
+  SUBROUTINE parser_get_integer(parser,at_end, error)
+    TYPE(cp_parser_type), POINTER            :: parser
+    TYPE(cp_error_type), INTENT(inout)       :: error
+    LOGICAL                                  :: failure, my_at_end
+    IF (.NOT.failure) THEN
+       IF (.NOT.parser%ilist%in_use) THEN
+          CALL cp_assert("A"// TRIM(parser_location(parser,error)))
+       END IF
+    END IF
+  END SUBROUTINE parser_get_integer
+  SUBROUTINE parser_get_string(parser,at_end,error)
+    TYPE(cp_parser_type), POINTER            :: parser
+    LOGICAL, INTENT(out), OPTIONAL           :: at_end
+    TYPE(cp_error_type), INTENT(inout)       :: error
+    LOGICAL                                  :: failure, my_at_end
+    IF (.NOT.failure) THEN
+       IF (PRESENT(at_end)) THEN
+          CALL cp_assert("s"//TRIM(parser_location(parser,error)))
+       END IF
+    END IF
+  END SUBROUTINE parser_get_string
+END MODULE cp_parser_methods
Index: tree-flow.h
===================================================================
--- tree-flow.h	(revision 178408)
+++ tree-flow.h	(working copy)
@@ -278,7 +278,6 @@  typedef struct immediate_use_iterator_d
 typedef struct var_ann_d *var_ann_t;
 
 static inline var_ann_t var_ann (const_tree);
-static inline var_ann_t get_var_ann (tree);
 static inline void update_stmt (gimple);
 static inline int get_lineno (const_gimple);
 
Index: tree-flow-inline.h
===================================================================
--- tree-flow-inline.h	(revision 178408)
+++ tree-flow-inline.h	(working copy)
@@ -145,16 +145,6 @@  var_ann (const_tree t)
   return p ? *p : NULL;
 }
 
-/* Return the variable annotation for T, which must be a _DECL node.
-   Create the variable annotation if it doesn't exist.  */
-static inline var_ann_t
-get_var_ann (tree var)
-{
-  var_ann_t *p = DECL_VAR_ANN_PTR (var);
-  gcc_checking_assert (p);
-  return *p ? *p : create_var_ann (var);
-}
-
 /* Get the number of the next statement uid to be allocated.  */
 static inline unsigned int
 gimple_stmt_max_uid (struct function *fn)
@@ -568,7 +558,7 @@  phi_arg_index_from_use (use_operand_p us
 static inline void
 set_is_used (tree var)
 {
-  var_ann_t ann = get_var_ann (var);
+  var_ann_t ann = var_ann (var);
   ann->used = true;
 }
 
Index: tree-dfa.c
===================================================================
--- tree-dfa.c	(revision 178408)
+++ tree-dfa.c	(working copy)
@@ -580,8 +580,9 @@  set_default_def (tree var, tree def)
 bool
 add_referenced_var (tree var)
 {
-  get_var_ann (var);
   gcc_assert (DECL_P (var));
+  if (!*DECL_VAR_ANN_PTR (var))
+    create_var_ann (var);
 
   /* Insert VAR into the referenced_vars hash table if it isn't present.  */
   if (referenced_var_check_and_insert (var))