]> granicus.if.org Git - clang/commit
ms-compat: Fix taking the address of a member of a dependent base
authorReid Kleckner <reid@kleckner.net>
Tue, 15 Oct 2013 18:38:02 +0000 (18:38 +0000)
committerReid Kleckner <reid@kleckner.net>
Tue, 15 Oct 2013 18:38:02 +0000 (18:38 +0000)
commit8690cee218a59d3f6eaca17b9c25d03a52ebacaa
tree095cec0890ba59abdf92c1781f5b1b9884f4ef22
parente96a7b4d99e8737b1dc8a3bd07038f885bc4263b
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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192727 91177308-0d34-0410-b5e6-96231b3b80d8
lib/AST/ExprCXX.cpp
lib/Sema/SemaExpr.cpp
lib/Sema/TreeTransform.h
test/SemaTemplate/ms-lookup-template-base-classes.cpp