diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 6440ee1393e39ffa50fcea8277d4f0fa77994126..264dd579b6f4fe2184247c864206068e5813e0ef 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -2357,6 +2357,9 @@ class Const_expression : public Expression check_for_init_loop(); protected: + int + do_traverse(Traverse*); + Expression* do_lower(Gogo*, Named_object*, int); @@ -2412,6 +2415,16 @@ class Const_expression : public Expression mutable bool seen_; }; +// Traversal. + +int +Const_expression::do_traverse(Traverse* traverse) +{ + if (this->type_ != NULL) + return Type::traverse(this->type_, traverse); + return TRAVERSE_CONTINUE; +} + // Lower a constant expression. This is where we convert the // predeclared constant iota into an integer value. diff --git a/gcc/go/gofrontend/statements.cc b/gcc/go/gofrontend/statements.cc index 99ed6653914efd39b5d07bf9226929c3768fd67a..45e45a381b7e3ffeb8c4e5f1262eb8ce87aff54f 100644 --- a/gcc/go/gofrontend/statements.cc +++ b/gcc/go/gofrontend/statements.cc @@ -318,6 +318,9 @@ Temporary_statement::get_decl() const int Temporary_statement::do_traverse(Traverse* traverse) { + if (this->type_ != NULL + && this->traverse_type(traverse, this->type_) == TRAVERSE_EXIT) + return TRAVERSE_EXIT; if (this->init_ == NULL) return TRAVERSE_CONTINUE; else