diff options
author | Ian Lance Taylor <iant@google.com> | 2013-02-10 06:02:38 +0000 |
---|---|---|
committer | Ian Lance Taylor <iant@google.com> | 2013-02-10 06:02:38 +0000 |
commit | 3be44bd5fa65da94ec9e6a571f91bcc1bf9147e2 (patch) | |
tree | fe1dad02b57206be8eeb4f61819b2f677ea99ee4 /gcc/go | |
parent | 9a334e142e045b8d54071f68fd52a3799eda7648 (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.cc | 25 |
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; } } |