107 lines · c
1// This test is copied from clang/test/CodeGen/dso-local-executable.c with2// unsupported targets, thread_local variables, and function checks removed.3 4// These are here so we find this test when grepping for missing features.5// cir::MissingFeatures::opGlobalThreadLocal()6 7// Note: Unlike CIR doesn't set dso_local on function declarations. This is8// a difference from classic codege in the STATIC checks.9 10/// Static relocation model defaults to -fdirect-access-external-data and sets11/// dso_local on most global objects.12// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm -mrelocation-model static %s -o - | FileCheck --check-prefix=STATIC %s13// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm -mrelocation-model static -fdirect-access-external-data %s -o - | FileCheck --check-prefix=STATIC %s14// STATIC: @baz = dso_local global i32 4215// STATIC-NEXT: @import_var = external dso_local global i3216// STATIC-NEXT: @weak_bar = extern_weak dso_local global i3217// STATIC-NEXT: @bar = external dso_local global i3218// STATIC-DAG: declare void @foo()19// STATIC-DAG: define dso_local ptr @zed()20// STATIC-DAG: declare void @import_func()21 22/// If -fno-direct-access-external-data is set, drop dso_local from global variable23/// declarations.24// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm -mrelocation-model static -fno-direct-access-external-data %s -o - | FileCheck --check-prefix=STATIC-INDIRECT %s25// STATIC-INDIRECT: @baz = dso_local global i32 4226// STATIC-INDIRECT-NEXT: @import_var = external global i3227// STATIC-INDIRECT-NEXT: @weak_bar = extern_weak global i3228// STATIC-INDIRECT-NEXT: @bar = external global i3229// STATIC-INDIRECT-DAG: declare void @import_func()30// STATIC-INDIRECT-DAG: define dso_local ptr @zed()31// STATIC-INDIRECT-DAG: declare void @foo()32 33// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm -pic-level 1 -pic-is-pie %s -o - | FileCheck --check-prefix=PIE %s34// PIE: @baz = dso_local global i32 4235// PIE-NEXT: @import_var = external global i3236// PIE-NEXT: @weak_bar = extern_weak global i3237// PIE-NEXT: @bar = external global i3238// PIE-DAG: declare void @foo()39// PIE-DAG: define dso_local ptr @zed()40// PIE-DAG: declare void @import_func()41 42// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm -pic-level 1 -pic-is-pie -fdirect-access-external-data %s -o - | FileCheck --check-prefix=PIE-DIRECT %s43// PIE-DIRECT: @baz = dso_local global i32 4244// PIE-DIRECT-NEXT: @import_var = external dso_local global i3245// PIE-DIRECT-NEXT: @weak_bar = extern_weak global i3246// PIE-DIRECT-NEXT: @bar = external dso_local global i3247// PIE-DIRECT-DAG: declare void @foo()48// PIE-DIRECT-DAG: define dso_local ptr @zed()49// PIE-DIRECT-DAG: declare void @import_func()50 51// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm -mrelocation-model static -fno-plt %s -o - | FileCheck --check-prefix=NOPLT %s52// NOPLT: @baz = dso_local global i32 4253// NOPLT-NEXT: @import_var = external dso_local global i3254// NOPLT-NEXT: @weak_bar = extern_weak dso_local global i3255// NOPLT-NEXT: @bar = external dso_local global i3256// NOPLT-DAG: declare void @foo()57// NOPLT-DAG: define dso_local ptr @zed()58// NOPLT-DAG: declare void @import_func()59 60// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm -fno-plt -pic-level 1 -pic-is-pie -fdirect-access-external-data %s -o - | FileCheck --check-prefix=PIE-DIRECT-NOPLT %s61// PIE-DIRECT-NOPLT: @baz = dso_local global i32 4262// PIE-DIRECT-NOPLT-NEXT: @import_var = external dso_local global i3263// PIE-DIRECT-NOPLT-NEXT: @weak_bar = extern_weak global i3264// PIE-DIRECT-NOPLT-NEXT: @bar = external dso_local global i3265// PIE-DIRECT-NOPLT-DAG: declare void @foo()66// PIE-DIRECT-NOPLT-DAG: define dso_local ptr @zed()67// PIE-DIRECT-NOPLT-DAG: declare void @import_func()68 69// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm -pic-level 1 -pic-is-pie -fno-plt %s -o - | FileCheck --check-prefix=PIE-NO-PLT %s70// RUN: %clang_cc1 -triple powerpc64le -fclangir -emit-llvm -mrelocation-model static %s -o - | FileCheck --check-prefix=PIE-NO-PLT %s71// PIE-NO-PLT: @baz = dso_local global i32 4272// PIE-NO-PLT-NEXT: @import_var = external global i3273// PIE-NO-PLT-NEXT: @weak_bar = extern_weak global i3274// PIE-NO-PLT-NEXT: @bar = external global i3275// PIE-NO-PLT-DAG: declare void @import_func()76// PIE-NO-PLT-DAG: define dso_local ptr @zed()77// PIE-NO-PLT-DAG: declare void @foo()78 79/// -fdirect-access-external-data is currently ignored for -fPIC.80// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm -pic-level 2 %s -o - | FileCheck --check-prefix=SHARED %s81// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm -pic-level 2 -fdirect-access-external-data %s -o - | FileCheck --check-prefix=SHARED %s82// SHARED-DAG: @bar = external global i3283// SHARED-DAG: @weak_bar = extern_weak global i3284// SHARED-DAG: declare void @foo()85// SHARED-DAG: @baz ={{.*}} global i32 4286// SHARED-DAG: define{{.*}} ptr @zed()87 88int baz = 42;89__attribute__((dllimport)) extern int import_var;90__attribute__((weak)) extern int weak_bar;91extern int bar;92__attribute__((dllimport)) void import_func(void);93 94int *use_import(void) {95 import_func();96 return &import_var;97}98 99void foo(void);100 101int *zed(void) {102 foo();103 if (baz)104 return &weak_bar;105 return &bar;106}107