[CodeGen][test][NFC] Refactor ObjC attribute tests (#156519)

Some downstream work broke these tests because the attribute number
changed. Refactor these tests to be more resilient in the face of
changes like this

* `instrument-objc-method.m`
* `#1` was never checked, I think it was trying to check that
`__cyg_profile_func_enter` was not used, so I added
`--implicit-check-not="__cyg_profile_func_enter"`
  * Use `[[#ATTR:]]` so the test doesn't fail if the number changes
* `address-safety-attr.mm`
* Check attributes in `Function Attrs:` so it's independent of the
attribute number
This commit is contained in:
Ellis Hoag 2025-09-04 11:29:31 -05:00 committed by GitHub
parent c51db9f6f3
commit eee72111dc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 22 deletions

View File

@ -1,29 +1,24 @@
// RUN: %clang_cc1 -disable-llvm-passes -triple x86_64-apple-darwin10 -debug-info-kind=standalone -emit-llvm -o - %s -finstrument-functions | FileCheck -check-prefix=PREINLINE %s
// RUN: %clang_cc1 -disable-llvm-passes -triple x86_64-apple-darwin10 -debug-info-kind=standalone -emit-llvm -o - %s -finstrument-function-entry-bare | FileCheck -check-prefix=BARE %s
// RUN: %clang_cc1 -disable-llvm-passes -triple x86_64-apple-darwin10 -debug-info-kind=standalone -emit-llvm -o - %s -finstrument-functions | FileCheck --check-prefix=PREINLINE --implicit-check-not="__cyg_profile_func_enter" %s
// RUN: %clang_cc1 -disable-llvm-passes -triple x86_64-apple-darwin10 -debug-info-kind=standalone -emit-llvm -o - %s -finstrument-function-entry-bare | FileCheck --check-prefix=BARE --implicit-check-not="__cyg_profile_func_enter" %s
@interface ObjCClass
@end
@implementation ObjCClass
// PREINLINE: @"\01+[ObjCClass initialize]"{{\(.*\)}} #0
// BARE: @"\01+[ObjCClass initialize]"{{\(.*\)}} #0
// PREINLINE: define {{.*}}@"\01+[ObjCClass initialize]"{{\(.*\)}} #[[#ATTR:]]
// BARE: define {{.*}}@"\01+[ObjCClass initialize]"{{\(.*\)}} #[[#ATTR:]]
+ (void)initialize {
}
// BARE: @"\01+[ObjCClass load]"{{\(.*\)}} #1
+ (void)load __attribute__((no_instrument_function)) {
}
// PREINLINE: @"\01-[ObjCClass dealloc]"{{\(.*\)}} #1
// BARE: @"\01-[ObjCClass dealloc]"{{\(.*\)}} #1
- (void)dealloc __attribute__((no_instrument_function)) {
}
// PREINLINE: attributes #0 = { {{.*}}"instrument-function-entry"="__cyg_profile_func_enter"
// PREINLINE-NOT: attributes #0 = { {{.*}}"instrument-function-entry"="__cyg_profile_func_enter_bare"
// PREINLINE-NOT: attributes #2 = { {{.*}}"__cyg_profile_func_enter"
// BARE: attributes #0 = { {{.*}}"instrument-function-entry-inlined"="__cyg_profile_func_enter_bare"
// BARE-NOT: attributes #0 = { {{.*}}"__cyg_profile_func_enter"
// BARE-NOT: attributes #2 = { {{.*}}"__cyg_profile_func_enter_bare"
// PREINLINE: attributes #[[#ATTR]] =
// PREINLINE-SAME: "instrument-function-entry"="__cyg_profile_func_enter"
// BARE: attributes #[[#ATTR]] =
// BARE-SAME: "instrument-function-entry-inlined"="__cyg_profile_func_enter_bare"
@end

View File

@ -1,5 +1,5 @@
// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck -check-prefix=WITHOUT %s
// RUN: %clang_cc1 -emit-llvm -o - %s -fsanitize=address | FileCheck -check-prefix=ASAN %s
// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s --implicit-check-not=sanitize_address
// RUN: %clang_cc1 -emit-llvm -o - %s -fsanitize=address | FileCheck %s --check-prefixes=CHECK,ASAN
@interface MyClass
+ (int) addressSafety:(int*)a;
@ -7,15 +7,14 @@
@implementation MyClass
// WITHOUT: +[MyClass load]{{.*}}#0
// ASAN: +[MyClass load]{{.*}}#0
// ASAN: ; Function Attrs:
// ASAN-SAME: sanitize_address
// CHECK-LABEL: define {{.*}}+[MyClass load]
+(void) load { }
// WITHOUT: +[MyClass addressSafety:]{{.*}}#0
// ASAN: +[MyClass addressSafety:]{{.*}}#0
// ASAN: ; Function Attrs:
// ASAN-SAME: sanitize_address
// CHECK-LABEL: define {{.*}}+[MyClass addressSafety:]
+ (int) addressSafety:(int*)a { return *a; }
@end
// ASAN: attributes #0 = {{.*}}sanitize_address
// WITHOUT-NOT: attributes #0 = {{.*}}sanitize_address