summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2013-10-15 18:38:02 +0000
committerReid Kleckner <reid@kleckner.net>2013-10-15 18:38:02 +0000
commit916ac4d23323f2d08006bb58e7f61d0feade998a (patch)
tree86df7c1a97d06cd6f3888f370329fc4f8a20eb57 /clang/lib/AST
parent7dc67a16a4b2f782ae1541f711663f17d6e92c05 (diff)
downloadbcm5719-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')
-rw-r--r--clang/lib/AST/ExprCXX.cpp1
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());
OpenPOWER on IntegriCloud