Author: Aditya Kumar Date: 2021-10-08T17:54:44-07:00 New Revision: 0f00aa502d79acf8a92b0b8490489895a9f28829
URL: https://github.com/llvm/llvm-project/commit/0f00aa502d79acf8a92b0b8490489895a9f28829 DIFF: https://github.com/llvm/llvm-project/commit/0f00aa502d79acf8a92b0b8490489895a9f28829.diff LOG: Add no_instrument_function attribute to Objective C methods as well 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 Added: clang/test/CodeGen/instrument-objc-method.m clang/test/SemaObjC/attr-noinstrument.m Modified: clang/include/clang/Basic/Attr.td clang/test/Misc/pragma-attribute-supported-attributes-list.test Removed: ################################################################################ diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 00e847bc5d2fb..ec7c1bd60ed4c 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -1979,7 +1979,7 @@ def NoReturn : InheritableAttr { def NoInstrumentFunction : InheritableAttr { let Spellings = [GCC<"no_instrument_function">]; - let Subjects = SubjectList<[Function]>; + let Subjects = SubjectList<[Function, ObjCMethod]>; let Documentation = [Undocumented]; let SimpleHandler = 1; } diff --git a/clang/test/CodeGen/instrument-objc-method.m b/clang/test/CodeGen/instrument-objc-method.m new file mode 100644 index 0000000000000..12d1ab957e964 --- /dev/null +++ b/clang/test/CodeGen/instrument-objc-method.m @@ -0,0 +1,34 @@ +// 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 diff --git a/clang/test/Misc/pragma-attribute-supported-attributes-list.test b/clang/test/Misc/pragma-attribute-supported-attributes-list.test index 8ea6dc45c9479..ef08ad89ff8c6 100644 --- a/clang/test/Misc/pragma-attribute-supported-attributes-list.test +++ b/clang/test/Misc/pragma-attribute-supported-attributes-list.test @@ -98,7 +98,7 @@ // CHECK-NEXT: NoDuplicate (SubjectMatchRule_function) // CHECK-NEXT: NoEscape (SubjectMatchRule_variable_is_parameter) // CHECK-NEXT: NoInline (SubjectMatchRule_function) -// CHECK-NEXT: NoInstrumentFunction (SubjectMatchRule_function) +// CHECK-NEXT: NoInstrumentFunction (SubjectMatchRule_function, SubjectMatchRule_objc_method) // CHECK-NEXT: NoMerge (SubjectMatchRule_function) // CHECK-NEXT: NoMicroMips (SubjectMatchRule_function) // CHECK-NEXT: NoMips16 (SubjectMatchRule_function) diff --git a/clang/test/SemaObjC/attr-noinstrument.m b/clang/test/SemaObjC/attr-noinstrument.m new file mode 100644 index 0000000000000..1ba3a6753bc26 --- /dev/null +++ b/clang/test/SemaObjC/attr-noinstrument.m @@ -0,0 +1,22 @@ +// RUN: %clang_cc1 -fsyntax-only -triple x86_64-apple-darwin10.4 -verify -Wno-objc-root-class %s +// RUN: %clang_cc1 -x objective-c++ -fsyntax-only -triple x86_64-apple-darwin10.4 -verify -Wno-objc-root-class %s + +// expected-no-diagnostics +@interface A ++ (void)F __attribute__((no_instrument_function)); // no warning +- (void)f __attribute__((objc_direct, no_instrument_function)); +- (void)g; +@end + +@implementation A ++ (void)F __attribute__((no_instrument_function)) { + [self F]; +} + +- (void)f { + [self g]; +} + +- (void)g { +} +@end _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits