brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · 243bd41 Raw
39 lines · c
1/// -fno-semantic-interposition is the default and local aliases (via dso_local) are allowed.2// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -mrelocation-model pic -pic-level 1 %s -o - | FileCheck %s --check-prefixes=CHECK,NOMETADATA3 4/// -fsemantic-interposition sets a module metadata.5// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -mrelocation-model pic -pic-level 1 -fsemantic-interposition %s -o - | FileCheck %s --check-prefixes=PREEMPT,METADATA6 7/// Traditional half-baked behavior: interprocedural optimizations are allowed8/// but local aliases are not used.9// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -mrelocation-model pic -pic-level 1 -fhalf-no-semantic-interposition %s -o - | FileCheck %s --check-prefixes=PREEMPT,NOMETADATA10 11// CHECK: @var = global i32 0, align 412// CHECK: @ext_var = external global i32, align 413// CHECK: @ifunc = ifunc i32 (), ptr @ifunc_resolver14// CHECK: define dso_local i32 @func()15// CHECK: declare i32 @ext()16 17// PREEMPT: @var = global i32 0, align 418// PREEMPT: @ext_var = external global i32, align 419// PREEMPT: @ifunc = ifunc i32 (), ptr @ifunc_resolver20// PREEMPT: define i32 @func()21// PREEMPT: declare i32 @ext()22 23// METADATA:           !{{[0-9]+}} = !{i32 1, !"SemanticInterposition", i32 1}24// NOMETADATA-NOT:     "SemanticInterposition"25 26int var;27extern int ext_var;28 29int ifunc(void) __attribute__((ifunc("ifunc_resolver")));30 31int func(void) { return 0; }32int ext(void);33 34static void *ifunc_resolver(void) { return func; }35 36int foo(void) {37  return var + ext_var + ifunc() + func() + ext();38}39