diff options
author | Reid Kleckner <reid@kleckner.net> | 2013-10-15 18:38:02 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2013-10-15 18:38:02 +0000 |
commit | 916ac4d23323f2d08006bb58e7f61d0feade998a (patch) | |
tree | 86df7c1a97d06cd6f3888f370329fc4f8a20eb57 /clang/lib/AST/ExprCXX.cpp | |
parent | 7dc67a16a4b2f782ae1541f711663f17d6e92c05 (diff) | |
download | bcm5719-llvm-916ac4d23323f2d08006bb58e7f61d0feade998a.tar.gz bcm5719-llvm-916ac4d23323f2d08006bb58e7f61d0feade998a.zip |
ms-compat: Fix taking the address of a member of a dependent base
If unqualified id lookup fails while parsing a class template with a
dependent base, clang with -fms-compatibility will pretend the user
prefixed the name with 'this->' in order to delay the lookup. However,
if there was a unary ampersand, Sema::ActOnDependentIdExpression() will
create a DependentDeclRefExpr, which is not what we wanted at all. Fix
this by building the CXXDependentScopeMemberExpr directly instead.
In order to be fully MSVC compatible, we would have to defer all
attempts at name lookup to instantiation time. However, until we have
real problems with system headers that can't be parsed, we'll put off
implementing that.
Fixes PR16014.
Reviewers: rsmith
Differential Revision: http://llvm-reviews.chandlerc.com/D1892
llvm-svn: 192727
Diffstat (limited to 'clang/lib/AST/ExprCXX.cpp')
-rw-r--r-- | clang/lib/AST/ExprCXX.cpp | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp index 069404aa7cb..3738c0e4f2c 100644 --- a/clang/lib/AST/ExprCXX.cpp +++ b/clang/lib/AST/ExprCXX.cpp @@ -456,6 +456,7 @@ DependentScopeDeclRefExpr::Create(const ASTContext &C, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *Args) { + assert(QualifierLoc && "should be created for dependent qualifiers"); std::size_t size = sizeof(DependentScopeDeclRefExpr); if (Args) size += ASTTemplateKWAndArgsInfo::sizeFor(Args->size()); |