diff options
author | Alex Lorenz <arphaman@gmail.com> | 2017-06-23 14:10:07 +0000 |
---|---|---|
committer | Alex Lorenz <arphaman@gmail.com> | 2017-06-23 14:10:07 +0000 |
commit | 787d30fe18fd0a44692977fc617f8ca7febf6d3e (patch) | |
tree | 90d594f8e342390c76f39c25c6f2e9255ac0e124 /clang/lib/Sema/SemaDeclCXX.cpp | |
parent | 4c5192f3754a3f355217519e8c7b37dc329e7d44 (diff) | |
download | bcm5719-llvm-787d30fe18fd0a44692977fc617f8ca7febf6d3e.tar.gz bcm5719-llvm-787d30fe18fd0a44692977fc617f8ca7febf6d3e.zip |
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<typename MyBase>
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: 306103
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 0b46e15bb0a..27b5221fb9f 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<DependentNameTypeLoc>(); + if (!TL.isNull()) { + TL.setNameLoc(IdLoc); + TL.setElaboratedKeywordLoc(SourceLocation()); + TL.setQualifierLoc(SS.getWithLocInContext(Context)); + } + R.clear(); R.setLookupName(MemberOrBase); } |