Traverse expressions when looking for types.
authorIan Lance Taylor <ian@gcc.gnu.org>
Tue, 4 Jan 2011 18:52:50 +0000 (18:52 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 4 Jan 2011 18:52:50 +0000 (18:52 +0000)
From-SVN: r168478

gcc/go/gofrontend/gogo.cc
gcc/go/gofrontend/statements.cc

index c27442461f9afdf884f8a61be5390027cd32ce73..6685156edc02c8d7ddce888c54cb4a4abd7cb894 100644 (file)
@@ -4159,9 +4159,6 @@ Bindings::traverse(Traverse* traverse, bool is_global)
              if (t != NULL
                  && Type::traverse(t, traverse) == TRAVERSE_EXIT)
                return TRAVERSE_EXIT;
-           }
-         if ((traverse_mask & Traverse::traverse_expressions) != 0)
-           {
              if (p->const_value()->traverse_expression(traverse)
                  == TRAVERSE_EXIT)
                return TRAVERSE_EXIT;
@@ -4188,7 +4185,8 @@ Bindings::traverse(Traverse* traverse, bool is_global)
                return TRAVERSE_EXIT;
            }
          if (p->is_variable()
-             && (traverse_mask & Traverse::traverse_expressions) != 0)
+             && ((traverse_mask & Traverse::traverse_types) != 0
+                 || (traverse_mask & Traverse::traverse_expressions) != 0))
            {
              if (p->var_value()->traverse_expression(traverse)
                  == TRAVERSE_EXIT)
index 3498598754a3b4cabcf6ab8a2c5603b5f6d5beea..ef34bba174bd48cc1480a512c9619a70edf164f4 100644 (file)
@@ -108,7 +108,8 @@ Statement::traverse_expression_list(Traverse* traverse,
 {
   if (expr_list == NULL)
     return TRAVERSE_CONTINUE;
-  if ((traverse->traverse_mask() & Traverse::traverse_expressions) == 0)
+  if ((traverse->traverse_mask()
+       & (Traverse::traverse_types | Traverse::traverse_expressions)) == 0)
     return TRAVERSE_CONTINUE;
   return expr_list->traverse(traverse);
 }
@@ -3010,7 +3011,8 @@ int
 Case_clauses::Case_clause::traverse(Traverse* traverse)
 {
   if (this->cases_ != NULL
-      && (traverse->traverse_mask() & Traverse::traverse_expressions) != 0)
+      && (traverse->traverse_mask()
+         & (Traverse::traverse_types | Traverse::traverse_expressions)) != 0)
     {
       if (this->cases_->traverse(traverse) == TRAVERSE_EXIT)
        return TRAVERSE_EXIT;
@@ -3941,7 +3943,8 @@ int
 Select_clauses::Select_clause::traverse(Traverse* traverse)
 {
   if (!this->is_lowered_
-      && (traverse->traverse_mask() & Traverse::traverse_expressions) != 0)
+      && (traverse->traverse_mask()
+         & (Traverse::traverse_types | Traverse::traverse_expressions)) != 0)
     {
       if (this->channel_ != NULL)
        {