1 // RUN: %clang_cc1 -std=c++98 -emit-llvm %s -o - -triple=x86_64-apple-darwin10 | FileCheck %s 2 // RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - -triple=x86_64-apple-darwin10 | FileCheck %s 3 4 struct S { 5 virtual ~S() { } 6 }; 7 8 // PR5706 9 // Make sure this doesn't crash; the mangling doesn't matter because the name 10 // doesn't have linkage. 11 static struct : S { } obj8; 12 13 void f() { 14 // Make sure this doesn't crash; the mangling doesn't matter because the 15 // generated vtable/etc. aren't modifiable (although it would be nice for 16 // codesize to make it consistent inside inline functions). 17 static struct : S { } obj8; 18 } 19 20 inline int f2() { 21 // FIXME: We don't mangle the names of a or x correctly! 22 static struct { int a() { static int x; return ++x; } } obj; 23 return obj.a(); 24 } 25 26 int f3() { return f2(); } 27 28 struct A { 29 typedef struct { int x; } *ptr; 30 ptr m; 31 int a() { 32 static struct x { 33 // FIXME: We don't mangle the names of a or x correctly! 34 int a(ptr A::*memp) { static int x; return ++x; } 35 } a; 36 return a.a(&A::m); 37 } 38 }; 39 40 int f4() { return A().a(); } 41 42 int f5() { 43 static union { 44 int a; 45 }; 46 47 // CHECK: _ZZ2f5vE1a 48 return a; 49 } 50 51 #if __cplusplus <= 199711L 52 int f6() { 53 static union { 54 union { 55 int : 1; 56 }; 57 int b; 58 }; 59 60 // CXX98: _ZZ2f6vE1b 61 return b; 62 } 63 #endif 64 65 int f7() { 66 static union { 67 union { 68 int b; 69 } a; 70 }; 71 72 // CHECK: _ZZ2f7vE1a 73 return a.b; 74 } 75 76 // This used to cause an assert because the typedef-for-anonymous-tag 77 // code was trying to claim the enum for the template. 78 enum { T8 }; 79 template <class T> struct Test8 { 80 typedef T type; 81 Test8(type t) {} // tested later 82 }; 83 template <class T> void make_test8(T value) { Test8<T> t(value); } 84 void test8() { make_test8(T8); } 85 86 // CHECK-LABEL: define internal void @"_ZNV3$_35test9Ev"( 87 typedef volatile struct { 88 void test9() volatile {} 89 } Test9; 90 void test9() { 91 Test9 a; 92 a.test9(); 93 } 94 95 // CHECK-LABEL: define internal void @"_ZN5Test8I3$_2EC1ES0_"( 96