Skip to content

Commit 281c486

Browse files
committed
Robustify callers that rebuild typename type nodes again NULL return
types. Fixes PR6463. llvm-svn: 97924
1 parent c934bc8 commit 281c486

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

clang/lib/Sema/SemaDeclCXX.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,6 +1083,9 @@ Sema::ActOnMemInitializer(DeclPtrTy ConstructorD,
10831083
// specialization, we take it as a type name.
10841084
BaseType = CheckTypenameType((NestedNameSpecifier *)SS.getScopeRep(),
10851085
*MemberOrBase, SS.getRange());
1086+
if (BaseType.isNull())
1087+
return true;
1088+
10861089
R.clear();
10871090
}
10881091
}

clang/lib/Sema/SemaTemplate.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4992,6 +4992,9 @@ CurrentInstantiationRebuilder::TransformTypenameType(TypeLocBuilder &TLB,
49924992
Result = getDerived().RebuildTypenameType(NNS, T->getIdentifier(),
49934993
SourceRange(TL.getNameLoc()));
49944994

4995+
if (Result.isNull())
4996+
return QualType();
4997+
49954998
TypenameTypeLoc NewTL = TLB.push<TypenameTypeLoc>(Result);
49964999
NewTL.setNameLoc(TL.getNameLoc());
49975000
return Result;

clang/test/SemaTemplate/typename-specifier-4.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,20 @@ namespace PR6268 {
9999
return Inner<U>();
100100
}
101101
}
102+
103+
namespace PR6463 {
104+
struct B { typedef int type; }; // expected-note 2{{member found by ambiguous name lookup}}
105+
struct C { typedef int type; }; // expected-note 2{{member found by ambiguous name lookup}}
106+
107+
template<typename T>
108+
struct A : B, C {
109+
type& a(); // expected-error{{found in multiple base classes}}
110+
int x;
111+
};
112+
113+
// FIXME: Improve source ___location info here.
114+
template<typename T>
115+
typename A<T>::type& A<T>::a() { // expected-error{{found in multiple base classes}}
116+
return x; // expected-error{{undeclared identifier}}
117+
}
118+
}

0 commit comments

Comments
 (0)