From 39fcc9a984e2820e4ea0fa2ac4abd17d9f3a31df Mon Sep 17 00:00:00 2001
From: dim <dim@FreeBSD.org>
Date: Sun, 20 Feb 2011 13:06:31 +0000
Subject: Vendor import of clang trunk r126079:
 http://llvm.org/svn/llvm-project/cfe/trunk@126079

---
 test/CodeGenCXX/thunks-available-externally.cpp | 88 +++++++++++++++++++++++++
 1 file changed, 88 insertions(+)
 create mode 100644 test/CodeGenCXX/thunks-available-externally.cpp

(limited to 'test/CodeGenCXX/thunks-available-externally.cpp')

diff --git a/test/CodeGenCXX/thunks-available-externally.cpp b/test/CodeGenCXX/thunks-available-externally.cpp
new file mode 100644
index 0000000..dfdb786
--- /dev/null
+++ b/test/CodeGenCXX/thunks-available-externally.cpp
@@ -0,0 +1,88 @@
+// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm -O3 -o - | FileCheck %s
+
+// Check that we don't assert on this case.
+namespace Test1 {
+
+struct Incomplete;
+
+struct A {
+  virtual void f();
+  virtual void g(Incomplete);
+  virtual void h();
+  virtual void i();
+  int a;
+};
+
+struct B {
+  virtual void f();
+  virtual void g(Incomplete);
+  virtual void h();
+  virtual void i();
+  int b;
+};
+
+struct C : A, B {
+  C();
+
+  virtual void f();
+  virtual void g(Incomplete);
+  virtual void h();
+  virtual void i();
+};
+
+void C::h() { }
+
+C::C() { }
+
+void C::i() { }
+
+}
+
+namespace Test2 {
+
+struct A {
+  virtual void f();
+  int a;
+};
+
+struct B {
+  virtual void f();
+  int b;
+};
+
+struct C : A, B {
+  virtual void f();
+};
+
+static void f(B* b) {
+  b->f();
+}
+
+// CHECK: define void @_ZN5Test21fEv()
+// CHECK: call void @_ZN5Test21C1fEv
+// CHECK: ret void
+// CHECK: define available_externally void @_ZThn16_N5Test21C1fEv
+void f() {
+  C c;
+  f(&c);
+}
+
+}
+
+// Test that we don't assert.
+namespace Test3 {
+
+struct A {
+  virtual ~A();
+
+  int a;
+};
+
+struct B : A { };
+struct C : virtual B { };
+
+void f() {
+  C c;
+}
+
+}
-- 
cgit v1.1