1 // Check that we correctly set or did not set the attribute for each function. 2 // RUN: %clang_cc1 -std=c++11 -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK1 3 // RUN: %clang_cc1 -std=c++11 -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK2 4 5 // Check that we correctly set or did not set the attribute on each function despite the 6 // -mspeculative-load-hardening flag. 7 // RUN: %clang_cc1 -mspeculative-load-hardening -std=c++11 -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK3 8 // RUN: %clang_cc1 -mspeculative-load-hardening -std=c++11 -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK4 9 10 11 // Check that we correctly set or did not set the attribute on each function despite the 12 // -mno-speculative-load-hardening flag. 13 // RUN: %clang -mno-speculative-load-hardening -S -std=c++11 -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK5 14 // RUN: %clang -mno-speculative-load-hardening -S -std=c++11 -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK6 15 16 17 [[clang::speculative_load_hardening]] 18 int test1() { 19 return 42; 20 } 21 22 int __attribute__((speculative_load_hardening)) test2() { 23 return 42; 24 } 25 26 [[clang::no_speculative_load_hardening]] 27 int test3() { 28 return 42; 29 } 30 31 int __attribute__((no_speculative_load_hardening)) test4() { 32 return 42; 33 } 34 // CHECK1: @{{.*}}test1{{.*}}[[SLH:#[0-9]+]] 35 // CHECK1: @{{.*}}test3{{.*}}[[NOSLH:#[0-9]+]] 36 // CHECK1: attributes [[SLH]] = { {{.*}}speculative_load_hardening{{.*}} } 37 // CHECK1-NOT: attributes [[NOSLH]] = { {{.*}}speculative_load_hardening{{.*}} } 38 39 // CHECK2: @{{.*}}test2{{.*}}[[SLH:#[0-9]+]] 40 // CHECK2: @{{.*}}test4{{.*}}[[NOSLH:#[0-9]+]] 41 // CHECK2: attributes [[SLH]] = { {{.*}}speculative_load_hardening{{.*}} } 42 // CHECK2-NOT: attributes [[NOSLH]] = { {{.*}}speculative_load_hardening{{.*}} } 43 44 // CHECK3: @{{.*}}test1{{.*}}[[SLH:#[0-9]+]] 45 // CHECK3: @{{.*}}test3{{.*}}[[NOSLH:#[0-9]+]] 46 // CHECK3: attributes [[SLH]] = { {{.*}}speculative_load_hardening{{.*}} } 47 // CHECK3-NOT: attributes [[NOSLH]] = { {{.*}}speculative_load_hardening{{.*}} } 48 49 // CHECK4: @{{.*}}test2{{.*}}[[SLH:#[0-9]+]] 50 // CHECK4: @{{.*}}test4{{.*}}[[NOSLH:#[0-9]+]] 51 // CHECK4: attributes [[SLH]] = { {{.*}}speculative_load_hardening{{.*}} } 52 // CHECK4-NOT: attributes [[NOSLH]] = { {{.*}}speculative_load_hardening{{.*}} } 53 54 // CHECK5: @{{.*}}test1{{.*}}[[SLH:#[0-9]+]] 55 // CHECK5: @{{.*}}test3{{.*}}[[NOSLH:#[0-9]+]] 56 // CHECK5: attributes [[SLH]] = { {{.*}}speculative_load_hardening{{.*}} } 57 // CHECK5-NOT: attributes [[NOSLH]] = { {{.*}}speculative_load_hardening{{.*}} } 58 59 // CHECK6: @{{.*}}test2{{.*}}[[SLH:#[0-9]+]] 60 // CHECK6: @{{.*}}test4{{.*}}[[NOSLH:#[0-9]+]] 61 // CHECK6: attributes [[SLH]] = { {{.*}}speculative_load_hardening{{.*}} } 62 // CHECK6-NOT: attributes [[NOSLH]] = { {{.*}}speculative_load_hardening{{.*}} } 63