| // 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) | |