Add a Subjects line to NoDebugAttr [NFC].

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.

Differential Revision: http://reviews.llvm.org/D19689

llvm-svn: 268065
This commit is contained in:
Paul Robinson 2016-04-29 17:03:34 +00:00
parent fa3e04298b
commit e801f6a7f4
5 changed files with 8 additions and 16 deletions

View File

@ -973,6 +973,8 @@ def NoCommon : InheritableAttr {
def NoDebug : InheritableAttr {
let Spellings = [GCC<"nodebug">];
let Subjects = SubjectList<[FunctionLike, ObjCMethod, GlobalVar], WarnDiag,
"ExpectedFunctionGlobalVarMethodOrProperty">;
let Documentation = [NoDebugDocs];
}

View File

@ -2512,9 +2512,6 @@ def warn_type_attribute_wrong_type : Warning<
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">,

View File

@ -3572,18 +3572,6 @@ void Sema::AddModeAttr(SourceRange AttrRange, Decl *D, IdentifierInfo *Name,
}
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()));

View File

@ -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));

View File

@ -0,0 +1,5 @@
// RUN: %clang_cc1 -fsyntax-only -verify %s
// expected-no-diagnostics
@interface NSObject
- (void)doSomething __attribute__((nodebug));
@end