summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/change-namespace/ChangeNamespace.cpp
diff options
context:
space:
mode:
authorEric Liu <ioeric@google.com>2016-12-15 13:02:41 +0000
committerEric Liu <ioeric@google.com>2016-12-15 13:02:41 +0000
commit0c0aea0c0aa323ef20c27fabf1b7bd425307e402 (patch)
tree0ed5e510ab95104cd0d13c97d221e7066608ff6c /clang-tools-extra/change-namespace/ChangeNamespace.cpp
parent2606c48a1d1018e0af7ee03635bedcba09bc79d1 (diff)
downloadbcm5719-llvm-0c0aea0c0aa323ef20c27fabf1b7bd425307e402.tar.gz
bcm5719-llvm-0c0aea0c0aa323ef20c27fabf1b7bd425307e402.zip
[change-namespace] fix a case references to templated using alias are qualified types.
llvm-svn: 289816
Diffstat (limited to 'clang-tools-extra/change-namespace/ChangeNamespace.cpp')
-rw-r--r--clang-tools-extra/change-namespace/ChangeNamespace.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/clang-tools-extra/change-namespace/ChangeNamespace.cpp b/clang-tools-extra/change-namespace/ChangeNamespace.cpp
index b620b42e21f..6c04a40880f 100644
--- a/clang-tools-extra/change-namespace/ChangeNamespace.cpp
+++ b/clang-tools-extra/change-namespace/ChangeNamespace.cpp
@@ -457,16 +457,18 @@ void ChangeNamespaceTool::run(
// This avoids fixing types with record types as qualifier, which is not
// filtered by matchers in some cases, e.g. the type is templated. We should
// handle the record type qualifier instead.
- if (TLoc->getTypeLocClass() == TypeLoc::Elaborated) {
+ TypeLoc Loc = *TLoc;
+ while (Loc.getTypeLocClass() == TypeLoc::Qualified)
+ Loc = Loc.getNextTypeLoc();
+ if (Loc.getTypeLocClass() == TypeLoc::Elaborated) {
NestedNameSpecifierLoc NestedNameSpecifier =
- TLoc->castAs<ElaboratedTypeLoc>().getQualifierLoc();
+ Loc.castAs<ElaboratedTypeLoc>().getQualifierLoc();
const Type *SpecifierType =
NestedNameSpecifier.getNestedNameSpecifier()->getAsType();
if (SpecifierType && SpecifierType->isRecordType())
return;
}
- fixTypeLoc(Result, startLocationForType(*TLoc), endLocationForType(*TLoc),
- *TLoc);
+ fixTypeLoc(Result, startLocationForType(Loc), endLocationForType(Loc), Loc);
} else if (const auto *VarRef =
Result.Nodes.getNodeAs<DeclRefExpr>("var_ref")) {
const auto *Var = Result.Nodes.getNodeAs<VarDecl>("var_decl");
OpenPOWER on IntegriCloud