summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaTemplate/instantiate-member-expr.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-12-22 05:24:09 +0000
committerAnders Carlsson <andersca@mac.com>2009-12-22 05:24:09 +0000
commit9c45ad7a1b8f28390a114ccec5d475b25258f324 (patch)
treea2967cf8501bb2f66bcefb09c300a14264ccff6b /clang/test/SemaTemplate/instantiate-member-expr.cpp
parentf3ef2cada74bfc315150c1c3dbf6b8cafce2eeb0 (diff)
downloadbcm5719-llvm-9c45ad7a1b8f28390a114ccec5d475b25258f324.tar.gz
bcm5719-llvm-9c45ad7a1b8f28390a114ccec5d475b25258f324.zip
When we simply return a retained member expression when instantiating, we must also mark the member decl as referenced.
llvm-svn: 91887
Diffstat (limited to 'clang/test/SemaTemplate/instantiate-member-expr.cpp')
-rw-r--r--clang/test/SemaTemplate/instantiate-member-expr.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/clang/test/SemaTemplate/instantiate-member-expr.cpp b/clang/test/SemaTemplate/instantiate-member-expr.cpp
new file mode 100644
index 00000000000..db13624d442
--- /dev/null
+++ b/clang/test/SemaTemplate/instantiate-member-expr.cpp
@@ -0,0 +1,27 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+template<typename T>
+struct S {
+ S() { }
+};
+
+template<typename T>
+struct vector {
+ void push_back(const T&) { int a[sizeof(T) ? -1: -1]; } // expected-error {{array size is negative}}
+};
+
+class GRExprEngine {
+public:
+ typedef vector<S<void *> >CheckersOrdered;
+ CheckersOrdered Checkers;
+
+ template <typename CHECKER>
+ void registerCheck(CHECKER *check) {
+ Checkers.push_back(S<void *>()); // expected-note {{in instantiation of member function 'vector<struct S<void *> >::push_back' requested here}}
+ }
+};
+
+class RetainReleaseChecker { };
+
+void f(GRExprEngine& Eng) {
+ Eng.registerCheck(new RetainReleaseChecker); // expected-note {{in instantiation of function template specialization 'GRExprEngine::registerCheck<class RetainReleaseChecker>' requested here}}
+}
OpenPOWER on IntegriCloud