There are functions where we do not want function instrumentation which is why we have `__attribute__((no_instrument_function))`. Extending this functionality to disable instrumentation for Objective-C methods as well. Objective C methods like `+load` run premain and having instrumentation on them causes runtime errors depending on the implementation of `__cyg_profile_func_enter` etc. functions Reviewed By: rjmccall, aaron.ballman Differential Revision: https://reviews.llvm.org/D111286
35 lines
1.2 KiB
Objective-C
35 lines
1.2 KiB
Objective-C
// RUN: %clang_cc1 -S -triple x86_64-apple-darwin10 -debug-info-kind=standalone -emit-llvm -o - %s -finstrument-functions | FileCheck %s
|
|
// RUN: %clang_cc1 -S -triple x86_64-apple-darwin10 -debug-info-kind=standalone -emit-llvm -o - %s -finstrument-function-entry-bare | FileCheck -check-prefix=BARE %s
|
|
|
|
@interface ObjCClass
|
|
@end
|
|
|
|
@implementation ObjCClass
|
|
|
|
// CHECK: @"\01+[ObjCClass initialize]"
|
|
// CHECK: call void @__cyg_profile_func_enter
|
|
// CHECK: call void @__cyg_profile_func_exit
|
|
// BARE: @"\01+[ObjCClass initialize]"
|
|
// BARE: call void @__cyg_profile_func_enter
|
|
+ (void)initialize {
|
|
}
|
|
|
|
// CHECK: @"\01+[ObjCClass load]"
|
|
// CHECK-NOT: call void @__cyg_profile_func_enter
|
|
// BARE: @"\01+[ObjCClass load]"
|
|
// BARE-NOT: call void @__cyg_profile_func_enter
|
|
+ (void)load __attribute__((no_instrument_function)) {
|
|
}
|
|
|
|
// CHECK: @"\01-[ObjCClass dealloc]"
|
|
// CHECK-NOT: call void @__cyg_profile_func_enter
|
|
// BARE: @"\01-[ObjCClass dealloc]"
|
|
// BARE-NOT: call void @__cyg_profile_func_enter
|
|
- (void)dealloc __attribute__((no_instrument_function)) {
|
|
}
|
|
|
|
// CHECK: declare void @__cyg_profile_func_enter(i8*, i8*)
|
|
// CHECK: declare void @__cyg_profile_func_exit(i8*, i8*)
|
|
// BARE: declare void @__cyg_profile_func_enter_bare
|
|
@end
|