From 222e2a7620e6520ffaf4fc4e69d79c18da31542e Mon Sep 17 00:00:00 2001 From: "Zancanaro; Carlo" Date: Mon, 24 Sep 2012 09:58:17 +1000 Subject: Add the clang library to the repo (with some of my changes, too). --- clang/test/SemaTemplate/extern-templates.cpp | 64 ++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 clang/test/SemaTemplate/extern-templates.cpp (limited to 'clang/test/SemaTemplate/extern-templates.cpp') diff --git a/clang/test/SemaTemplate/extern-templates.cpp b/clang/test/SemaTemplate/extern-templates.cpp new file mode 100644 index 0000000..eca64ed --- /dev/null +++ b/clang/test/SemaTemplate/extern-templates.cpp @@ -0,0 +1,64 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +template +class X0 { +public: + void f(T t); + + struct Inner { + void g(T t); + }; +}; + +template +void X0::f(T t) { + t = 17; // expected-error{{incompatible}} +} + +extern template class X0; + +extern template class X0; + +template +void X0::Inner::g(T t) { + t = 17; // expected-error{{incompatible}} +} + +void test_intptr(X0 xi, X0::Inner xii) { + xi.f(0); + xii.g(0); +} + +extern template class X0; + +void test_longptr(X0 xl, X0::Inner xli) { + xl.f(0); + xli.g(0); +} + +template class X0; // expected-note 2{{instantiation}} + +template +class X1 { +public: + void f(T t) { t += 2; } + + void g(T t); +}; + +template +void X1::g(T t) { + t += 2; +} + +extern template class X1; + +void g_X1(X1 x1, void *ptr) { + x1.g(ptr); +} + +extern template void X1::g(const void*); + +void g_X1_2(X1 x1, const void *ptr) { + x1.g(ptr); +} -- cgit v1.2.3