From 99bee7f4a174a2f7a7394b70cc6877be6017a21c Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Tue, 27 Jun 2017 10:35:30 +0000 Subject: Recommit r306103: PR26195: Set correct NestedNameSpecifierLoc for the dependent initializer This commit fixes incorrect source positions of dependent c'tor initializers like in the following code: template struct Derived: MyBase::InnerIterator { Derived() : MyBase::InnerIterator() {} /// This line is problematic: all positions point to InnerIterator and nothing points to MyBase }; Patch by Serge Preis! Differential Revision: https://reviews.llvm.org/D32439 llvm-svn: 306392 --- clang/lib/Sema/SemaDeclCXX.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'clang/lib') diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 453ece9d9c4..e9070881afe 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -3778,6 +3778,15 @@ Sema::BuildMemInitializer(Decl *ConstructorD, if (BaseType.isNull()) return true; + TInfo = Context.CreateTypeSourceInfo(BaseType); + DependentNameTypeLoc TL = + TInfo->getTypeLoc().castAs(); + if (!TL.isNull()) { + TL.setNameLoc(IdLoc); + TL.setElaboratedKeywordLoc(SourceLocation()); + TL.setQualifierLoc(SS.getWithLocInContext(Context)); + } + R.clear(); R.setLookupName(MemberOrBase); } -- cgit v1.2.3