aboutsummaryrefslogtreecommitdiff
path: root/gcc/go
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@google.com>2013-02-10 06:02:38 +0000
committerIan Lance Taylor <iant@google.com>2013-02-10 06:02:38 +0000
commit3be44bd5fa65da94ec9e6a571f91bcc1bf9147e2 (patch)
treefe1dad02b57206be8eeb4f61819b2f677ea99ee4 /gcc/go
parent9a334e142e045b8d54071f68fd52a3799eda7648 (diff)
compiler, libgo: Permit testing package when test imports it circularly.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@195931 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/go')
-rw-r--r--gcc/go/gofrontend/gogo.cc25
1 files changed, 16 insertions, 9 deletions
diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc
index 735b4c81204..80ae8d46494 100644
--- a/gcc/go/gofrontend/gogo.cc
+++ b/gcc/go/gofrontend/gogo.cc
@@ -515,16 +515,23 @@ Gogo::add_import_init_fn(const std::string& package_name,
p != this->imported_init_fns_.end();
++p)
{
- if (p->init_name() == init_name
- && (p->package_name() != package_name || p->priority() != prio))
+ if (p->init_name() == init_name)
{
- error("duplicate package initialization name %qs",
- Gogo::message_name(init_name).c_str());
- inform(UNKNOWN_LOCATION, "used by package %qs at priority %d",
- Gogo::message_name(p->package_name()).c_str(),
- p->priority());
- inform(UNKNOWN_LOCATION, " and by package %qs at priority %d",
- Gogo::message_name(package_name).c_str(), prio);
+ // If a test of package P1, built as part of package P1,
+ // imports package P2, and P2 imports P1 (perhaps
+ // indirectly), then we will see the same import name with
+ // different import priorities. That is OK, so don't give
+ // an error about it.
+ if (p->package_name() != package_name)
+ {
+ error("duplicate package initialization name %qs",
+ Gogo::message_name(init_name).c_str());
+ inform(UNKNOWN_LOCATION, "used by package %qs at priority %d",
+ Gogo::message_name(p->package_name()).c_str(),
+ p->priority());
+ inform(UNKNOWN_LOCATION, " and by package %qs at priority %d",
+ Gogo::message_name(package_name).c_str(), prio);
+ }
return;
}
}