brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.0 KiB · f7e5936 Raw
33 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu %s -emit-llvm -o - | FileCheck %s2// RUN: %clang_cc1 -triple x86_64-pc-win32 %s -emit-llvm -o - | FileCheck %s3// RUN: %clang_cc1 -triple x86_64-uefi %s -emit-llvm -o - | FileCheck %s4 5// CHECK: foo{{[^#]*}}#[[ATTRS:[0-9]+]]6__attribute__((no_caller_saved_registers)) void foo() {}7namespace S {8// CHECK: bar{{[^#]*}}#[[ATTRS]]9__attribute__((no_caller_saved_registers)) void bar(int *a) { foo(); }10}11 12struct St {13  static void baz(int *a) __attribute__((no_caller_saved_registers)) { S::bar(a); }14};15 16__attribute((no_caller_saved_registers)) void (*foobar)(void);17 18// CHECK-LABEL: @main19int main(int argc, char **argv) {20  St::baz(&argc);21  // CHECK: [[FOOBAR:%.+]] = load ptr, ptr @{{.*}}foobar{{.*}},22  // CHECK-NEXT: call void [[FOOBAR]]() #[[ATTRS1:.+]]23  foobar();24  return 0;25}26 27// CHECK: baz{{[^#]*}}#[[ATTRS]]28 29// CHECK: attributes #[[ATTRS]] = {30// CHECK-SAME: "no_caller_saved_registers"31// CHECK-SAME: }32// CHECK: attributes #[[ATTRS1]] = { "no_caller_saved_registers" }33