forked from OSchip/llvm-project
Improving the diagnostic for cases where the attribute only appertains to a function with a prototype.
llvm-svn: 252055
This commit is contained in:
parent
f1b0a6e37c
commit
853273f8a9
|
@ -769,7 +769,7 @@ def Format : InheritableAttr {
|
|||
let Args = [IdentifierArgument<"Type">, IntArgument<"FormatIdx">,
|
||||
IntArgument<"FirstArg">];
|
||||
let Subjects = SubjectList<[ObjCMethod, Block, HasFunctionProto], WarnDiag,
|
||||
"ExpectedFunction">;
|
||||
"ExpectedFunctionWithProtoType">;
|
||||
let Documentation = [FormatDocs];
|
||||
}
|
||||
|
||||
|
@ -777,7 +777,7 @@ def FormatArg : InheritableAttr {
|
|||
let Spellings = [GCC<"format_arg">];
|
||||
let Args = [IntArgument<"FormatIdx">];
|
||||
let Subjects = SubjectList<[ObjCMethod, HasFunctionProto], WarnDiag,
|
||||
"ExpectedFunction">;
|
||||
"ExpectedFunctionWithProtoType">;
|
||||
let Documentation = [Undocumented];
|
||||
}
|
||||
|
||||
|
@ -1203,7 +1203,8 @@ def Ownership : InheritableAttr {
|
|||
}
|
||||
}];
|
||||
let Args = [IdentifierArgument<"Module">, VariadicUnsignedArgument<"Args">];
|
||||
let Subjects = SubjectList<[HasFunctionProto], WarnDiag, "ExpectedFunction">;
|
||||
let Subjects = SubjectList<[HasFunctionProto], WarnDiag,
|
||||
"ExpectedFunctionWithProtoType">;
|
||||
let Documentation = [Undocumented];
|
||||
}
|
||||
|
||||
|
|
|
@ -2354,7 +2354,7 @@ def warn_attribute_wrong_decl_type : Warning<
|
|||
"Objective-C instance methods|init methods of interface or class extension declarations|"
|
||||
"variables, functions and classes|Objective-C protocols|"
|
||||
"functions and global variables|structs, unions, and typedefs|structs and typedefs|"
|
||||
"interface or protocol declarations|kernel functions}1">,
|
||||
"interface or protocol declarations|kernel functions|non-K&R-style functions}1">,
|
||||
InGroup<IgnoredAttributes>;
|
||||
def err_attribute_wrong_decl_type : Error<warn_attribute_wrong_decl_type.Text>;
|
||||
def warn_type_attribute_wrong_type : Warning<
|
||||
|
|
|
@ -852,7 +852,8 @@ enum AttributeDeclKind {
|
|||
ExpectedStructOrUnionOrTypedef,
|
||||
ExpectedStructOrTypedef,
|
||||
ExpectedObjectiveCInterfaceOrProtocol,
|
||||
ExpectedKernelFunction
|
||||
ExpectedKernelFunction,
|
||||
ExpectedFunctionWithProtoType
|
||||
};
|
||||
|
||||
} // end namespace clang
|
||||
|
|
|
@ -9,7 +9,7 @@ void f6(void) __attribute__((ownership_holds(foo, 1, 2, 3))); // expected-error
|
|||
void f7(void) __attribute__((ownership_takes(foo))); // expected-error {{'ownership_takes' attribute takes at least 2 arguments}}
|
||||
void f8(int *i, int *j, int k) __attribute__((ownership_holds(foo, 1, 2, 4))); // expected-error {{'ownership_holds' attribute parameter 3 is out of bounds}}
|
||||
|
||||
int f9 __attribute__((ownership_takes(foo, 1))); // expected-warning {{'ownership_takes' attribute only applies to functions}}
|
||||
int f9 __attribute__((ownership_takes(foo, 1))); // expected-warning {{'ownership_takes' attribute only applies to non-K&R-style functions}}
|
||||
|
||||
void f10(int i) __attribute__((ownership_holds(foo, 1))); // expected-error {{'ownership_holds' attribute only applies to pointer arguments}}
|
||||
void *f11(float i) __attribute__((ownership_returns(foo, 1))); // expected-error {{'ownership_returns' attribute only applies to integer arguments}}
|
||||
|
@ -23,3 +23,4 @@ void f15(int, int)
|
|||
__attribute__((ownership_returns(foo, 2))); // expected-error {{'ownership_returns' attribute index does not match; here it is 2}}
|
||||
void f16(int *i, int *j) __attribute__((ownership_holds(foo, 1))) __attribute__((ownership_holds(foo, 1))); // OK, same index
|
||||
void f17(void*) __attribute__((ownership_takes(__, 1)));
|
||||
void f18() __attribute__((ownership_takes(foo, 1))); // expected-warning {{'ownership_takes' attribute only applies to non-K&R-style functions}}
|
||||
|
|
|
@ -9,9 +9,9 @@ extern void fc1 (const NSString *) __attribute__((format_arg)); // expected-err
|
|||
extern void fc2 (const NSString *) __attribute__((format_arg())); // expected-error {{'format_arg' attribute takes one argument}}
|
||||
extern void fc3 (const NSString *) __attribute__((format_arg(1, 2))); // expected-error {{'format_arg' attribute takes one argument}}
|
||||
|
||||
struct s1 { int i; } __attribute__((format_arg(1))); // expected-warning {{'format_arg' attribute only applies to functions}}
|
||||
union u1 { int i; } __attribute__((format_arg(1))); // expected-warning {{'format_arg' attribute only applies to functions}}
|
||||
enum e1 { E1V0 } __attribute__((format_arg(1))); // expected-warning {{'format_arg' attribute only applies to functions}}
|
||||
struct s1 { int i; } __attribute__((format_arg(1))); // expected-warning {{'format_arg' attribute only applies to non-K&R-style functions}}
|
||||
union u1 { int i; } __attribute__((format_arg(1))); // expected-warning {{'format_arg' attribute only applies to non-K&R-style functions}}
|
||||
enum e1 { E1V0 } __attribute__((format_arg(1))); // expected-warning {{'format_arg' attribute only applies to non-K&R-style functions}}
|
||||
|
||||
extern NSString *ff3 (const NSString *) __attribute__((format_arg(3-2)));
|
||||
extern NSString *ff4 (const NSString *) __attribute__((format_arg(foo))); // expected-error {{use of undeclared identifier 'foo'}}
|
||||
|
|
Loading…
Reference in New Issue