| // REQUIRES: systemz-registered-target |
| // RUN: %clang_cc1 -x c++ %s -emit-llvm -triple s390x-none-zos -fzos-extensions -fvisibility=hidden -o - | FileCheck %s |
| |
| // Testing pragma export after decl. |
| extern "C" void f0(void) {} |
| int v0; |
| #pragma export(f0) |
| #pragma export(v0) |
| |
| // Testing pragma export before decl. |
| #pragma export(f1) |
| #pragma export(v1) |
| extern "C" void f1(void) {} |
| int v1; |
| |
| // Testing overloaded functions. |
| #pragma export(f2) |
| void f2(double, double) {} |
| extern "C" void f2(int) {} |
| void f2(int, int) {} |
| |
| extern "C" void f3(double) {} |
| void f3(int, double) {} |
| void f3(double, double) {} |
| #pragma export(f3) |
| |
| extern "C" void f2b(void) {} |
| |
| void t0(void) { |
| f2b(); |
| } |
| |
| // Testing pragma export after decl and usage. |
| #pragma export(f2b) |
| |
| // Testing pragma export with namespace. |
| extern "C" void f5(void) {} |
| extern "C" void f5a(void) {} |
| namespace N0 { |
| void f5(void) {} |
| #pragma export(f5) |
| #pragma export(f5a) |
| void f5a(void) {} |
| } // namespace N0 |
| |
| void f10(int); |
| #pragma export(f10) |
| extern "C" void f10(double) {} |
| void f10(int) {} |
| |
| // CHECK: @v0 = hidden global i32 0 |
| // CHECK: @v1 = global i32 0 |
| // CHECK: define hidden void @f0() |
| // CHECK: define void @f1() |
| // CHECK: define hidden void @_Z2f2dd(double noundef %0, double noundef %1) |
| // CHECK: define void @f2(i32 noundef signext %0) |
| // CHECK: define hidden void @_Z2f2ii(i32 noundef signext %0, i32 noundef signext %1) |
| // CHECK: define hidden void @f3(double noundef %0) |
| // CHECK: define hidden void @_Z2f3id(i32 noundef signext %0, double noundef %1) |
| // CHECK: define hidden void @_Z2f3dd(double noundef %0, double noundef %1) |
| // CHECK: define hidden void @f2b() |
| // CHECK: define hidden void @_Z2t0v() |
| // CHECK: define hidden void @f5() |
| // CHECK: define hidden void @f5a() |
| // CHECK: define hidden void @_ZN2N02f5Ev() |
| // CHECK: define hidden void @_ZN2N03f5aEv() |
| // CHECK: define void @f10(double noundef %0) |
| // CHECK: define hidden void @_Z3f10i(i32 noundef signext %0) |
| |