blob: eb733f72c7ed8f4ef434d072e9346423c3460bac [file] [log] [blame]
// 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()