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). --- .../test/SemaTemplate/virtual-member-functions.cpp | 86 ++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 clang/test/SemaTemplate/virtual-member-functions.cpp (limited to 'clang/test/SemaTemplate/virtual-member-functions.cpp') diff --git a/clang/test/SemaTemplate/virtual-member-functions.cpp b/clang/test/SemaTemplate/virtual-member-functions.cpp new file mode 100644 index 0000000..974f664 --- /dev/null +++ b/clang/test/SemaTemplate/virtual-member-functions.cpp @@ -0,0 +1,86 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +namespace PR5557 { +template struct A { + A(); + virtual void anchor(); + virtual int a(T x); +}; +template A::A() {} +template void A::anchor() { } + +template int A::a(T x) { + return *x; // expected-error{{requires pointer operand}} +} + +void f(A x) { + x.anchor(); // expected-note{{instantiation}} +} + +template +struct X { + virtual void f(); +}; + +template<> +void X::f() { } +} + +template +struct Base { + virtual ~Base() { + int *ptr = 0; + T t = ptr; // expected-error{{cannot initialize}} + } +}; + +template +struct Derived : Base { + virtual void foo() { } +}; + +template struct Derived; // expected-note {{in instantiation of member function 'Base::~Base' requested here}} + +template +struct HasOutOfLineKey { + HasOutOfLineKey() { } + virtual T *f(float *fp); +}; + +template +T *HasOutOfLineKey::f(float *fp) { + return fp; // expected-error{{cannot initialize return object of type 'int *' with an lvalue of type 'float *'}} +} + +HasOutOfLineKey out_of_line; // expected-note{{in instantiation of member function 'HasOutOfLineKey::f' requested here}} + +namespace std { + class type_info; +} + +namespace PR7114 { + class A { virtual ~A(); }; // expected-note{{declared private here}} + + template + class B { + public: + class Inner : public A { }; // expected-error{{base class 'PR7114::A' has private destructor}} + static Inner i; + static const unsigned value = sizeof(i) == 4; + }; + + int f() { return B::value; } + + void test_typeid(B::Inner bfi) { + (void)typeid(bfi); // expected-note{{implicit default destructor}} + } + + template + struct X : A { + void f() { } + }; + + void test_X(X xi, X xf) { + xi.f(); + } +} -- cgit v1.2.3