This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Go patch committed: Don't crash checking for unexported field
- From: Ian Lance Taylor <iant at google dot com>
- To: gcc-patches at gcc dot gnu dot org, gofrontend-dev at googlegroups dot com
- Date: Thu, 10 Feb 2011 10:22:02 -0800
- Subject: Go patch committed: Don't crash checking for unexported field
This patch to the Go frontend avoids crashing when checking whether a
self-referential pointer field in a struct is exported. Bootstrapped
and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to
mainline.
Ian
diff -r bed9e76f0d4e go/types.cc
--- a/go/types.cc Wed Feb 09 14:25:41 2011 -0800
+++ b/go/types.cc Thu Feb 10 10:17:20 2011 -0800
@@ -8052,9 +8052,9 @@
const std::string& name,
std::vector<const Named_type*>* seen)
{
- type = type->deref();
-
const Named_type* nt = type->named_type();
+ if (nt == NULL)
+ nt = type->deref()->named_type();
if (nt != NULL)
{
if (nt->is_unexported_local_method(gogo, name))
@@ -8072,6 +8072,8 @@
}
}
+ type = type->deref();
+
const Interface_type* it = type->interface_type();
if (it != NULL && it->is_unexported_method(gogo, name))
return true;
@@ -8095,11 +8097,17 @@
++pf)
{
if (pf->is_anonymous()
- && (!pf->type()->deref()->is_error_type()
- && !pf->type()->deref()->is_undefined()))
- {
- Named_type* subtype = pf->type()->deref()->named_type();
- gcc_assert(subtype != NULL);
+ && !pf->type()->deref()->is_error_type()
+ && !pf->type()->deref()->is_undefined())
+ {
+ Named_type* subtype = pf->type()->named_type();
+ if (subtype == NULL)
+ subtype = pf->type()->deref()->named_type();
+ if (subtype == NULL)
+ {
+ // This is an error, but it will be diagnosed elsewhere.
+ continue;
+ }
if (Type::is_unexported_field_or_method(gogo, subtype, name, seen))
{
if (nt != NULL)