зеркало из https://github.com/microsoft/clang-1.git
When we perform name lookup for a template, we may end up finding an
ambiguous name where none of the declarations found are actually templates. In this case, make sure we clear out the ambiguous-path data when recomputing the lookup result kind. Fixes PR8439. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117112 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
8523d81f3e
Коммит
dd8c10fbd8
|
@ -365,6 +365,11 @@ public:
|
|||
if (Decls.empty()) {
|
||||
if (ResultKind != NotFoundInCurrentInstantiation)
|
||||
ResultKind = NotFound;
|
||||
|
||||
if (Paths) {
|
||||
deletePaths(Paths);
|
||||
Paths = 0;
|
||||
}
|
||||
} else {
|
||||
AmbiguityKind SavedAK = Ambiguity;
|
||||
ResultKind = Found;
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
||||
|
||||
// PR8439
|
||||
class A
|
||||
{
|
||||
};
|
||||
|
||||
class B
|
||||
{
|
||||
public:
|
||||
A & m;
|
||||
};
|
||||
|
||||
class Base
|
||||
{
|
||||
public:
|
||||
B &f();
|
||||
};
|
||||
|
||||
class Derived1 : public Base { };
|
||||
|
||||
class Derived2 : public Base { };
|
||||
|
||||
class X : public B, public Derived2, public Derived1
|
||||
{
|
||||
public:
|
||||
virtual void g();
|
||||
};
|
||||
|
||||
void X::g()
|
||||
{
|
||||
m.f<int>(); // expected-error{{no member named 'f' in 'A'}} \
|
||||
// expected-error{{expected '(' for function-style cast}} \
|
||||
// expected-error{{expected expression}}
|
||||
}
|
Загрузка…
Ссылка в новой задаче