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/instantiate-local-class.cpp | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 clang/test/SemaTemplate/instantiate-local-class.cpp (limited to 'clang/test/SemaTemplate/instantiate-local-class.cpp') diff --git a/clang/test/SemaTemplate/instantiate-local-class.cpp b/clang/test/SemaTemplate/instantiate-local-class.cpp new file mode 100644 index 0000000..20b62c1 --- /dev/null +++ b/clang/test/SemaTemplate/instantiate-local-class.cpp @@ -0,0 +1,67 @@ +// RUN: %clang_cc1 -verify %s +template +void f0() { + struct X; + typedef struct Y { + T (X::* f1())(int) { return 0; } + } Y2; + + Y2 y = Y(); +} + +template void f0(); + +// PR5764 +namespace PR5764 { + struct X { + template + void Bar() { + typedef T ValueType; + struct Y { + Y() { V = ValueType(); } + + ValueType V; + }; + + Y y; + } + }; + + void test(X x) { + x.Bar(); + } +} + +// Instantiation of local classes with virtual functions. +namespace local_class_with_virtual_functions { + template struct X { }; + template struct Y { }; + + template + void f() { + struct Z : public X*> { + virtual void g(Y* y) { } + void g2(int x) {(void)x;} + }; + Z z; + (void)z; + } + + struct S { }; + void test() { f(); } +} + +namespace PR8801 { + template + void foo() { + class X; + typedef int (X::*pmf_type)(); + class X : public T { }; + + pmf_type pmf = &T::foo; + } + + struct Y { int foo(); }; + + template void foo(); +} -- cgit v1.2.3