From e8a126ba9a8a2f53098d388d04ec555b758f0c67 Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Wed, 28 Jul 2010 23:26:18 +0000 Subject: [PATCH] PR7736: Make sure to mark &Class::Member correctly as being type-dependent inside a template class. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109697 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/Expr.h | 3 ++- .../dependent-type-member-pointer.cpp | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 test/CodeGenCXX/dependent-type-member-pointer.cpp diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h index d4f953c632..ae3452bef8 100644 --- a/include/clang/AST/Expr.h +++ b/include/clang/AST/Expr.h @@ -1030,7 +1030,8 @@ public: UnaryOperator(Expr *input, Opcode opc, QualType type, SourceLocation l) : Expr(UnaryOperatorClass, type, - input->isTypeDependent() && opc != OffsetOf, + opc != OffsetOf && (input->isTypeDependent() || + type->isDependentType()), input->isValueDependent()), Val(input), Opc(opc), Loc(l) {} diff --git a/test/CodeGenCXX/dependent-type-member-pointer.cpp b/test/CodeGenCXX/dependent-type-member-pointer.cpp new file mode 100644 index 0000000000..41bb5e29d5 --- /dev/null +++ b/test/CodeGenCXX/dependent-type-member-pointer.cpp @@ -0,0 +1,18 @@ +// RUN: %clang_cc1 -emit-llvm-only -verify %s +// PR7736 + +template int InitMember(scriptmemberptr); + +template +struct contentmap +{ + static void InitDataMap() + { InitMember(&contentmap::SizeHolder); } + int SizeHolder; +}; + +void ReadFrom( ) +{ + contentmap::InitDataMap(); +} + -- 2.40.0