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">,
|
let Args = [IdentifierArgument<"Type">, IntArgument<"FormatIdx">,
|
||||||
IntArgument<"FirstArg">];
|
IntArgument<"FirstArg">];
|
||||||
let Subjects = SubjectList<[ObjCMethod, Block, HasFunctionProto], WarnDiag,
|
let Subjects = SubjectList<[ObjCMethod, Block, HasFunctionProto], WarnDiag,
|
||||||
"ExpectedFunction">;
|
"ExpectedFunctionWithProtoType">;
|
||||||
let Documentation = [FormatDocs];
|
let Documentation = [FormatDocs];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -777,7 +777,7 @@ def FormatArg : InheritableAttr {
|
||||||
let Spellings = [GCC<"format_arg">];
|
let Spellings = [GCC<"format_arg">];
|
||||||
let Args = [IntArgument<"FormatIdx">];
|
let Args = [IntArgument<"FormatIdx">];
|
||||||
let Subjects = SubjectList<[ObjCMethod, HasFunctionProto], WarnDiag,
|
let Subjects = SubjectList<[ObjCMethod, HasFunctionProto], WarnDiag,
|
||||||
"ExpectedFunction">;
|
"ExpectedFunctionWithProtoType">;
|
||||||
let Documentation = [Undocumented];
|
let Documentation = [Undocumented];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1203,7 +1203,8 @@ def Ownership : InheritableAttr {
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
let Args = [IdentifierArgument<"Module">, VariadicUnsignedArgument<"Args">];
|
let Args = [IdentifierArgument<"Module">, VariadicUnsignedArgument<"Args">];
|
||||||
let Subjects = SubjectList<[HasFunctionProto], WarnDiag, "ExpectedFunction">;
|
let Subjects = SubjectList<[HasFunctionProto], WarnDiag,
|
||||||
|
"ExpectedFunctionWithProtoType">;
|
||||||
let Documentation = [Undocumented];
|
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|"
|
"Objective-C instance methods|init methods of interface or class extension declarations|"
|
||||||
"variables, functions and classes|Objective-C protocols|"
|
"variables, functions and classes|Objective-C protocols|"
|
||||||
"functions and global variables|structs, unions, and typedefs|structs and typedefs|"
|
"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>;
|
InGroup<IgnoredAttributes>;
|
||||||
def err_attribute_wrong_decl_type : Error<warn_attribute_wrong_decl_type.Text>;
|
def err_attribute_wrong_decl_type : Error<warn_attribute_wrong_decl_type.Text>;
|
||||||
def warn_type_attribute_wrong_type : Warning<
|
def warn_type_attribute_wrong_type : Warning<
|
||||||
|
|
|
@ -852,7 +852,8 @@ enum AttributeDeclKind {
|
||||||
ExpectedStructOrUnionOrTypedef,
|
ExpectedStructOrUnionOrTypedef,
|
||||||
ExpectedStructOrTypedef,
|
ExpectedStructOrTypedef,
|
||||||
ExpectedObjectiveCInterfaceOrProtocol,
|
ExpectedObjectiveCInterfaceOrProtocol,
|
||||||
ExpectedKernelFunction
|
ExpectedKernelFunction,
|
||||||
|
ExpectedFunctionWithProtoType
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace clang
|
} // 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 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}}
|
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 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}}
|
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}}
|
__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 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 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 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}}
|
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}}
|
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 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 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 *ff3 (const NSString *) __attribute__((format_arg(3-2)));
|
||||||
extern NSString *ff4 (const NSString *) __attribute__((format_arg(foo))); // expected-error {{use of undeclared identifier 'foo'}}
|
extern NSString *ff4 (const NSString *) __attribute__((format_arg(foo))); // expected-error {{use of undeclared identifier 'foo'}}
|
||||||
|
|
Loading…
Reference in New Issue