Generally tests test something other than "this program doesn't crash" - should it test that we apply the attribute correctly? (either via ast dump, or checking the resulting DWARF doesn't have debug info on the relevant entity)
Or is this not actually a new/separate codepath? In which case do we really need the test? It's a –verify test which is about diagnostics, rather than not-crashing. It parallels line 3 of Sema/attr-nodebug.c, which verifies the attribute can be applied to a function. Without this test, you could remove "ObjCMethod" from the Subjects line and no test would fail. I put "ObjCMethod" on the Subjects line because the hand-coded condition used "isFunctionOrMethod" which permits Objective-C methods. The new test passes with old and new compilers, demonstrating the NFC claim. Now, if we decide the 'nodebug' attribute should not apply to Objective-C, that's fine with me, in which case the new test should verify that a diagnostic *is* produced. I am admittedly clueless about Objective-C, are they handled differently from other functions by the time we get to CGDebugInfo? If there's another path I should tweak, I'd like to know about it. Thanks, --paulr From: David Blaikie [mailto:dblai...@gmail.com] Sent: Thursday, April 28, 2016 4:26 PM To: reviews+d19689+public+514682b5314c5...@reviews.llvm.org; Robinson, Paul Cc: Aaron Ballman; cfe-commits Subject: Re: [PATCH] D19689: Add Subjects to NoDebugAttr [NFC] LGTM On Thu, Apr 28, 2016 at 2:10 PM, Paul Robinson via cfe-commits <cfe-commits@lists.llvm.org<mailto:cfe-commits@lists.llvm.org>> wrote: probinson created this revision. probinson added a reviewer: aaron.ballman. probinson added a subscriber: cfe-commits. The 'nodebug' attribute had hand-coded constraints; replace those with a Subjects line in Attr.td. Also add a missing test to verify the attribute is okay on an Objective-C method. http://reviews.llvm.org/D19689 Files: include/clang/Basic/Attr.td include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaDeclAttr.cpp test/Sema/attr-nodebug.c test/SemaObjC/attr-nodebug.m Index: test/SemaObjC/attr-nodebug.m =================================================================== --- test/SemaObjC/attr-nodebug.m +++ test/SemaObjC/attr-nodebug.m @@ -0,0 +1,5 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s +// expected-no-diagnostics +@interface NSObject +- (void)doSomething __attribute__((nodebug)); +@end Generally tests test something other than "this program doesn't crash" - should it test that we apply the attribute correctly? (either via ast dump, or checking the resulting DWARF doesn't have debug info on the relevant entity) Or is this not actually a new/separate codepath? In which case do we really need the test? Index: test/Sema/attr-nodebug.c =================================================================== --- test/Sema/attr-nodebug.c +++ test/Sema/attr-nodebug.c @@ -3,7 +3,7 @@ int a __attribute__((nodebug)); void b() { - int b __attribute__((nodebug)); // expected-warning {{'nodebug' only applies to variables with static storage duration and functions}} + int b __attribute__((nodebug)); // expected-warning {{'nodebug' attribute only applies to functions and global variables}} } void t1() __attribute__((nodebug)); Index: lib/Sema/SemaDeclAttr.cpp =================================================================== --- lib/Sema/SemaDeclAttr.cpp +++ lib/Sema/SemaDeclAttr.cpp @@ -3572,18 +3572,6 @@ } static void handleNoDebugAttr(Sema &S, Decl *D, const AttributeList &Attr) { - if (const VarDecl *VD = dyn_cast<VarDecl>(D)) { - if (!VD->hasGlobalStorage()) - S.Diag(Attr.getLoc(), - diag::warn_attribute_requires_functions_or_static_globals) - << Attr.getName(); - } else if (!isFunctionOrMethod(D)) { - S.Diag(Attr.getLoc(), - diag::warn_attribute_requires_functions_or_static_globals) - << Attr.getName(); - return; - } - D->addAttr(::new (S.Context) NoDebugAttr(Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); Index: include/clang/Basic/DiagnosticSemaKinds.td =================================================================== --- include/clang/Basic/DiagnosticSemaKinds.td +++ include/clang/Basic/DiagnosticSemaKinds.td @@ -2504,9 +2504,6 @@ def warn_incomplete_encoded_type : Warning< "encoding of %0 type is incomplete because %1 component has unknown encoding">, InGroup<DiagGroup<"encode-type">>; -def warn_attribute_requires_functions_or_static_globals : Warning< - "%0 only applies to variables with static storage duration and functions">, - InGroup<IgnoredAttributes>; def warn_gnu_inline_attribute_requires_inline : Warning< "'gnu_inline' attribute requires function to be marked 'inline'," " attribute ignored">, Index: include/clang/Basic/Attr.td =================================================================== --- include/clang/Basic/Attr.td +++ include/clang/Basic/Attr.td @@ -973,6 +973,8 @@ def NoDebug : InheritableAttr { let Spellings = [GCC<"nodebug">]; + let Subjects = SubjectList<[FunctionLike, ObjCMethod, GlobalVar], WarnDiag, + "ExpectedFunctionGlobalVarMethodOrProperty">; let Documentation = [NoDebugDocs]; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org<mailto:cfe-commits@lists.llvm.org> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits