Fix a regression in the two-phase lookup diagnostics that switching the

namespace set algorithm (re-)introduced. We may not have seen the 'std'
namespace, but we should still suggested associated namespaces. Easy
fix, but a bit annoying to test.

llvm-svn: 132744
This commit is contained in:
Chandler Carruth 2011-06-08 10:13:17 +00:00
parent 0169ec0988
commit d54186ac33
2 changed files with 24 additions and 0 deletions

View File

@ -7881,6 +7881,9 @@ DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc,
if (!Std->Encloses(*it))
SuggestedNamespaces.insert(*it);
}
} else {
// Lacking the 'std::' namespace, use all of the associated namespaces.
SuggestedNamespaces = AssociatedNamespaces;
}
SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup)

View File

@ -0,0 +1,21 @@
// RUN: %clang_cc1 -fsyntax-only -verify %s
//
// The whole point of this test is to verify certain diagnostics work in the
// absence of namespace 'std'.
namespace PR10053 {
namespace ns {
struct Data {};
}
template<typename T> struct A {
T t;
A() {
f(t); // expected-error {{call to function 'f' that is neither visible in the template definition nor found by argument dependent lookup}}
}
};
void f(ns::Data); // expected-note {{in namespace 'PR10053::ns'}}
A<ns::Data> a; // expected-note {{in instantiation of member function}}
}