diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-07-22 05:21:47 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-07-22 05:21:47 +0000 |
commit | cc4ad95c303daf27ba3a1815eb81b2c832383ba2 (patch) | |
tree | c740130471721ea30c00d8b05108a5685c3ff619 /clang/lib/Sema/TreeTransform.h | |
parent | b8b21d2fcac48ef26d3af325cc4d6cf4bddb78f7 (diff) | |
download | bcm5719-llvm-cc4ad95c303daf27ba3a1815eb81b2c832383ba2.tar.gz bcm5719-llvm-cc4ad95c303daf27ba3a1815eb81b2c832383ba2.zip |
PR38257: don't perform ADL when instantiating a unary & operator that turns out
to be forming a pointer-to-member.
llvm-svn: 337653
Diffstat (limited to 'clang/lib/Sema/TreeTransform.h')
-rw-r--r-- | clang/lib/Sema/TreeTransform.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 5ed92aea32c..19567397112 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -12658,9 +12658,11 @@ TreeTransform<Derived>::RebuildCXXOperatorCallExpr(OverloadedOperatorKind Op, // -> is never a builtin operation. return SemaRef.BuildOverloadedArrowExpr(nullptr, First, OpLoc); } else if (Second == nullptr || isPostIncDec) { - if (!First->getType()->isOverloadableType()) { - // The argument is not of overloadable type, so try to create a - // built-in unary operation. + if (!First->getType()->isOverloadableType() || + (Op == OO_Amp && getSema().isQualifiedMemberAccess(First))) { + // The argument is not of overloadable type, or this is an expression + // of the form &Class::member, so try to create a built-in unary + // operation. UnaryOperatorKind Opc = UnaryOperator::getOverloadedOpcode(Op, isPostIncDec); |