summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-05-04 23:05:40 +0000
committerDouglas Gregor <dgregor@apple.com>2011-05-04 23:05:40 +0000
commitdfd4b741319ab6261d83ae3b6a3c4b0fb2d4b827 (patch)
tree934b2a0714dd4c73edcec283a9b4771d8ef7a547 /clang/lib
parent2a40131f6bc93c40c62c93f0c38bdcf18d6f1aa4 (diff)
downloadbcm5719-llvm-dfd4b741319ab6261d83ae3b6a3c4b0fb2d4b827.tar.gz
bcm5719-llvm-dfd4b741319ab6261d83ae3b6a3c4b0fb2d4b827.zip
Clean up Sema::BuildCXXNestedNameSpecifier()'s creation of TypeLoc
information. Rather than looking at the declaration kind to figure out what TypeLoc to build, look at the type; it makes so much more sense. Fixes <rdar://problem/9086649>. llvm-svn: 130882
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaCXXScopeSpec.cpp22
1 files changed, 15 insertions, 7 deletions
diff --git a/clang/lib/Sema/SemaCXXScopeSpec.cpp b/clang/lib/Sema/SemaCXXScopeSpec.cpp
index 7049f6b01d2..5ee256ab216 100644
--- a/clang/lib/Sema/SemaCXXScopeSpec.cpp
+++ b/clang/lib/Sema/SemaCXXScopeSpec.cpp
@@ -546,25 +546,33 @@ bool Sema::BuildCXXNestedNameSpecifier(Scope *S,
InjectedClassNameTypeLoc InjectedTL
= TLB.push<InjectedClassNameTypeLoc>(T);
InjectedTL.setNameLoc(IdentifierLoc);
- } else if (isa<RecordDecl>(SD)) {
+ } else if (isa<RecordType>(T)) {
RecordTypeLoc RecordTL = TLB.push<RecordTypeLoc>(T);
RecordTL.setNameLoc(IdentifierLoc);
- } else if (isa<TypedefNameDecl>(SD)) {
+ } else if (isa<TypedefType>(T)) {
TypedefTypeLoc TypedefTL = TLB.push<TypedefTypeLoc>(T);
TypedefTL.setNameLoc(IdentifierLoc);
- } else if (isa<EnumDecl>(SD)) {
+ } else if (isa<EnumType>(T)) {
EnumTypeLoc EnumTL = TLB.push<EnumTypeLoc>(T);
EnumTL.setNameLoc(IdentifierLoc);
- } else if (isa<TemplateTypeParmDecl>(SD)) {
+ } else if (isa<TemplateTypeParmType>(T)) {
TemplateTypeParmTypeLoc TemplateTypeTL
= TLB.push<TemplateTypeParmTypeLoc>(T);
TemplateTypeTL.setNameLoc(IdentifierLoc);
- } else {
- assert(isa<UnresolvedUsingTypenameDecl>(SD) &&
- "Unhandled TypeDecl node in nested-name-specifier");
+ } else if (isa<UnresolvedUsingType>(T)) {
UnresolvedUsingTypeLoc UnresolvedTL
= TLB.push<UnresolvedUsingTypeLoc>(T);
UnresolvedTL.setNameLoc(IdentifierLoc);
+ } else if (isa<SubstTemplateTypeParmType>(T)) {
+ SubstTemplateTypeParmTypeLoc TL
+ = TLB.push<SubstTemplateTypeParmTypeLoc>(T);
+ TL.setNameLoc(IdentifierLoc);
+ } else if (isa<SubstTemplateTypeParmPackType>(T)) {
+ SubstTemplateTypeParmPackTypeLoc TL
+ = TLB.push<SubstTemplateTypeParmPackTypeLoc>(T);
+ TL.setNameLoc(IdentifierLoc);
+ } else {
+ llvm_unreachable("Unhandled TypeDecl node in nested-name-specifier");
}
SS.Extend(Context, SourceLocation(), TLB.getTypeLocInContext(Context, T),
OpenPOWER on IntegriCloud