diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2013-02-10 06:02:38 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2013-02-10 06:02:38 +0000 |
commit | d54fc074734ea7467a0861c861b145c8ef740bf4 (patch) | |
tree | fe1dad02b57206be8eeb4f61819b2f677ea99ee4 /gcc | |
parent | 8e29a61c2dc3d591cba39c4f4e8933a76493b22f (diff) | |
download | gcc-d54fc074734ea7467a0861c861b145c8ef740bf4.zip gcc-d54fc074734ea7467a0861c861b145c8ef740bf4.tar.gz gcc-d54fc074734ea7467a0861c861b145c8ef740bf4.tar.bz2 |
compiler, libgo: Permit testing package when test imports it circularly.
From-SVN: r195931
Diffstat (limited to 'gcc')
-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 735b4c8..80ae8d4 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; } } |