===================================================================
@@ -1,4 +1,4 @@
-441f3f1f350b532707c48273d7f454cf1c4e959f
+ddfb845fad1f2e8b84383f262ed5ea5be7b3e35a
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
===================================================================
@@ -249,6 +249,14 @@ Collect_export_references::expression(Ex
return TRAVERSE_CONTINUE;
}
+ const Named_object* nco = expr->named_constant();
+ if (nco != 0 && nco->package() == NULL)
+ {
+ const Named_constant *nc = nco->const_value();
+ Type::traverse(nc->type(), this);
+ return TRAVERSE_CONTINUE;
+ }
+
return TRAVERSE_CONTINUE;
}
@@ -322,6 +330,10 @@ Collect_export_references::type(Type* ty
if (type->is_void_type())
return TRAVERSE_SKIP_COMPONENTS;
+ // Skip the nil type, turns up in function bodies.
+ if (type->is_nil_type())
+ return TRAVERSE_SKIP_COMPONENTS;
+
// Skip abstract types. We should never see these in real code,
// only in things like const declarations.
if (type->is_abstract())
===================================================================
@@ -3234,6 +3234,10 @@ class Const_expression : public Expressi
named_object()
{ return this->constant_; }
+ const Named_object*
+ named_object() const
+ { return this->constant_; }
+
// Check that the initializer does not refer to the constant itself.
void
check_for_init_loop();
@@ -16782,6 +16786,15 @@ Expression::is_local_variable() const
|| (no->is_variable() && !no->var_value()->is_global()));
}
+const Named_object*
+Expression::named_constant() const
+{
+ if (this->classification() != EXPRESSION_CONST_REFERENCE)
+ return NULL;
+ const Const_expression* ce = static_cast<const Const_expression*>(this);
+ return ce->named_object();
+}
+
// Class Type_guard_expression.
// Traversal.
===================================================================
@@ -587,6 +587,11 @@ class Expression
boolean_constant_value(bool* val) const
{ return this->do_boolean_constant_value(val); }
+ // If this is a const reference expression, return the named
+ // object to which the expression refers, otherwise return NULL.
+ const Named_object*
+ named_constant() const;
+
// This is called if the value of this expression is being
// discarded. This issues warnings about computed values being
// unused. This returns true if all is well, false if it issued an