summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGen/always_inline-unused.c
blob: eb733f72c7ed8f4ef434d072e9346423c3460bac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Test alwaysinline definitions w/o any non-direct-call uses.
// None of the declarations are emitted. Stub are only emitted when the original
// function can not be discarded.

// RUN: %clang_cc1 -disable-llvm-optzns -emit-llvm %s -o - | FileCheck %s

void __attribute__((__always_inline__)) f1() {}
inline void __attribute__((__always_inline__)) f2() {}
static inline void __attribute__((__always_inline__)) f3() {}
inline void __attribute__((gnu_inline, __always_inline__)) f4() {}
static inline void __attribute__((gnu_inline, __always_inline__)) f5() {}
inline void __attribute__((visibility("hidden"), __always_inline__)) f6() {}
inline void __attribute__((visibility("hidden"), gnu_inline, __always_inline__)) f7() {}

void g() {
  f1();
  f2();
  f3();
  f4();
  f5();
  f6();
  f7();
}

// CHECK: define void @f1()
// CHECK-NOT: void @f2()
// CHECK-NOT: void @f3()
// CHECK: define void @f4()
// CHECK-NOT: void @f5()
// CHECK-NOT: void @f6()
// CHECK: define hidden void @f7()
OpenPOWER on IntegriCloud