From d54fc074734ea7467a0861c861b145c8ef740bf4 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Sun, 10 Feb 2013 06:02:38 +0000 Subject: compiler, libgo: Permit testing package when test imports it circularly. From-SVN: r195931 --- gcc/go/gofrontend/gogo.cc | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'gcc') 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; } } -- cgit v1.1