]> granicus.if.org Git - clang/commitdiff
PR7736: Make sure to mark &Class::Member correctly as being type-dependent
authorEli Friedman <eli.friedman@gmail.com>
Wed, 28 Jul 2010 23:26:18 +0000 (23:26 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Wed, 28 Jul 2010 23:26:18 +0000 (23:26 +0000)
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
test/CodeGenCXX/dependent-type-member-pointer.cpp [new file with mode: 0644]

index d4f953c632e7b6f51b2dca947a7b537ca3400058..ae3452bef840fc9772bd58022e4c7f5a321151ee 100644 (file)
@@ -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 (file)
index 0000000..41bb5e2
--- /dev/null
@@ -0,0 +1,18 @@
+// RUN: %clang_cc1 -emit-llvm-only -verify %s
+// PR7736
+
+template <class scriptmemberptr> int InitMember(scriptmemberptr);
+
+template <class> 
+struct contentmap
+{
+  static void InitDataMap()
+  { InitMember(&contentmap::SizeHolder); }
+  int SizeHolder;
+};
+
+void ReadFrom( )
+{
+  contentmap<int>::InitDataMap();
+}
+