forked from OSchip/llvm-project
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:
parent
fa3e04298b
commit
e801f6a7f4
|
@ -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];
|
||||
}
|
||||
|
||||
|
|
|
@ -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">,
|
||||
|
|
|
@ -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()));
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
||||
// expected-no-diagnostics
|
||||
@interface NSObject
|
||||
- (void)doSomething __attribute__((nodebug));
|
||||
@end
|
Loading…
Reference in New Issue