| // RUN: %clang_cc1 -std=c++98 -emit-llvm %s -o - -triple=x86_64-apple-darwin10 | FileCheck %s |
| // RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - -triple=x86_64-apple-darwin10 | FileCheck %s |
| |
| struct S { |
| virtual ~S() { } |
| }; |
| |
| // PR5706 |
| // Make sure this doesn't crash; the mangling doesn't matter because the name |
| // doesn't have linkage. |
| static struct : S { } obj8; |
| |
| void f() { |
| // Make sure this doesn't crash; the mangling doesn't matter because the |
| // generated vtable/etc. aren't modifiable (although it would be nice for |
| // codesize to make it consistent inside inline functions). |
| static struct : S { } obj8; |
| } |
| |
| inline int f2() { |
| // FIXME: We don't mangle the names of a or x correctly! |
| static struct { int a() { static int x; return ++x; } } obj; |
| return obj.a(); |
| } |
| |
| int f3() { return f2(); } |
| |
| struct A { |
| typedef struct { int x; } *ptr; |
| ptr m; |
| int a() { |
| static struct x { |
| // FIXME: We don't mangle the names of a or x correctly! |
| int a(ptr A::*memp) { static int x; return ++x; } |
| } a; |
| return a.a(&A::m); |
| } |
| }; |
| |
| int f4() { return A().a(); } |
| |
| int f5() { |
| static union { |
| int a; |
| }; |
| |
| // CHECK: _ZZ2f5vE1a |
| return a; |
| } |
| |
| #if __cplusplus <= 199711L |
| int f6() { |
| static union { |
| union { |
| int : 1; |
| }; |
| int b; |
| }; |
| |
| // CXX98: _ZZ2f6vE1b |
| return b; |
| } |
| #endif |
| |
| int f7() { |
| static union { |
| union { |
| int b; |
| } a; |
| }; |
| |
| // CHECK: _ZZ2f7vE1a |
| return a.b; |
| } |
| |
| // This used to cause an assert because the typedef-for-anonymous-tag |
| // code was trying to claim the enum for the template. |
| enum { T8 }; |
| template <class T> struct Test8 { |
| typedef T type; |
| Test8(type t) {} // tested later |
| }; |
| template <class T> void make_test8(T value) { Test8<T> t(value); } |
| void test8() { make_test8(T8); } |
| |
| // CHECK-LABEL: define internal void @"_ZNV3$_35test9Ev"( |
| typedef volatile struct { |
| void test9() volatile {} |
| } Test9; |
| void test9() { |
| Test9 a; |
| a.test9(); |
| } |
| |
| // CHECK-LABEL: define internal void @"_ZN5Test8I3$_2EC1ES0_"( |