• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  // RUN: %clang_cc1 -triple x86_64-none-linux-gnu %s -emit-llvm -o - | FileCheck %s
2  // RUN: %clang_cc1 -triple arm-apple-darwin %s -emit-llvm -o - | FileCheck %s
3  
4  // Simple key function test
5  struct testa { virtual void a(); };
a()6  void testa::a() {}
7  
8  // Simple key function test
atestb9  struct testb { virtual void a() {} };
10  testb *testbvar = new testb;
11  
12  // Key function with out-of-line inline definition
13  struct testc { virtual void a(); };
a()14  inline void testc::a() {}
15  
16  // Functions with inline specifier are not key functions (PR5705)
17  struct testd { inline virtual void a(); };
a()18  void testd::a() {}
19  
20  // Functions with inline specifier are not key functions (PR5705)
21  struct teste { inline virtual void a(); };
22  teste *testevar = new teste;
23  
24  // Key functions with namespace (PR5711)
25  namespace {
26    struct testf { virtual void a(); };
27  }
a()28  void testf::a() {}
29  
30  // Key functions with namespace (PR5711)
31  namespace {
32    struct testg { virtual void a(); };
33  }
a()34  void testg::a() {}
35  testg *testgvar = new testg;
36  
37  struct X0 { virtual ~X0(); };
38  struct X1 : X0 {
39    virtual void f();
40  };
41  
f()42  inline void X1::f() { }
43  
use_X1()44  void use_X1() { X1 x1; }
45  
46  // CHECK-DAG: @_ZTV2X1 = linkonce_odr unnamed_addr constant
47  // CHECK-DAG: @_ZTV5testa = unnamed_addr constant [3 x i8*] [i8* null
48  // CHECK-DAG: @_ZTV5testc = linkonce_odr unnamed_addr constant [3 x i8*] [i8* null
49  // CHECK-DAG: @_ZTV5testb = linkonce_odr unnamed_addr constant [3 x i8*] [i8* null
50  // CHECK-DAG: @_ZTV5teste = linkonce_odr unnamed_addr constant [3 x i8*] [i8* null
51  // CHECK-DAG: @_ZTVN12_GLOBAL__N_15testgE = internal unnamed_addr constant [3 x i8*] [i8* null
52