brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · c90f47b Raw
96 lines · cpp
1// RUN: %clang_cc1 -std=c++98 -emit-llvm %s -o - -triple=x86_64-apple-darwin10 | FileCheck %s2// RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - -triple=x86_64-apple-darwin10 | FileCheck %s3 4struct S {5  virtual ~S() { }6};7 8// PR57069// Make sure this doesn't crash; the mangling doesn't matter because the name10// doesn't have linkage.11static struct : S { } obj8;12 13void f() {14  // Make sure this doesn't crash; the mangling doesn't matter because the15  // generated vtable/etc. aren't modifiable (although it would be nice for16  // codesize to make it consistent inside inline functions).17  static struct : S { } obj8;18}19 20inline 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 26int f3() { return f2(); }27 28struct 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 40int f4() { return A().a(); }41 42int f5() {43  static union {44    int a;45  };46  47  // CHECK: _ZZ2f5vE1a48  return a;49}50 51#if __cplusplus <= 199711L52int f6() {53  static union {54    union {55      int : 1;56    };57    int b;58  };59  60  // CXX98: _ZZ2f6vE1b61  return b;62}63#endif64 65int f7() {66  static union {67    union {68      int b;69    } a;70  };71  72  // CHECK: _ZZ2f7vE1a73  return a.b;74}75 76// This used to cause an assert because the typedef-for-anonymous-tag77// code was trying to claim the enum for the template.78enum { T8 };79template <class T> struct Test8 {80  typedef T type;81  Test8(type t) {} // tested later82};83template <class T> void make_test8(T value) { Test8<T> t(value); }84void test8() { make_test8(T8); }85 86// CHECK-LABEL: define internal void @"_ZNV3$_35test9Ev"(87typedef volatile struct {88  void test9() volatile {}89} Test9;90void test9() {91  Test9 a;92  a.test9();93}94 95// CHECK-LABEL: define internal void @"_ZN5Test8I3$_2EC1ES0_"(96