]> granicus.if.org Git - clang/commitdiff
This diagnostic did not accept arguments, and did not have any test coverage. Paramet...
authorAaron Ballman <aaron@aaronballman.com>
Thu, 26 Dec 2013 17:07:49 +0000 (17:07 +0000)
committerAaron Ballman <aaron@aaronballman.com>
Thu, 26 Dec 2013 17:07:49 +0000 (17:07 +0000)
Since this warning was generalized, it was also given a sensible warning group flag and the corresponding test was updated to reflect this.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198053 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaDeclAttr.cpp
test/Misc/warning-flags.c
test/Sema/nonnull.c

index c82e2415920edb5b9789302a314866bea68924af..54a4159ee6de40a0549e9d5a337fc20457f10405 100644 (file)
@@ -1838,8 +1838,9 @@ def err_attribute_argument_out_of_bounds : Error<
   "%0 attribute parameter %1 is out of bounds">;
 def err_attribute_uuid_malformed_guid : Error<
   "uuid attribute contains a malformed GUID">;
-def warn_nonnull_pointers_only : Warning<
-  "nonnull attribute only applies to pointer arguments">;
+def warn_attribute_pointers_only : Warning<
+  "%0 attribute only applies to pointer arguments">,
+  InGroup<IgnoredAttributes>;
 def err_attribute_pointers_only : Error<
   "%0 attribute only applies to pointer arguments">;
 def err_attribute_no_member_pointers : Error<
index 122cec50b2891eb0fdf704c3daa7a57a26d5a032..66fce3410a2f69950c457e35b04d2969dd81962c 100644 (file)
@@ -1194,8 +1194,8 @@ static void handleNonNullAttr(Sema &S, Decl *D, const AttributeList &Attr) {
     
     if (!T->isAnyPointerType() && !T->isBlockPointerType()) {
       // FIXME: Should also highlight argument in decl.
-      S.Diag(Attr.getLoc(), diag::warn_nonnull_pointers_only)
-        << "nonnull" << Ex->getSourceRange();
+      S.Diag(Attr.getLoc(), diag::warn_attribute_pointers_only)
+        << Attr.getName() << Ex->getSourceRange();
       continue;
     }
 
index 67937a5cef1c892d3fe5d15160fc68233199ebb4..53c9a0397e02345703272a4328cab450e81b370b 100644 (file)
@@ -18,7 +18,7 @@ This test serves two purposes:
 
 The list of warnings below should NEVER grow.  It should gradually shrink to 0.
 
-CHECK: Warnings without flags (133):
+CHECK: Warnings without flags (132):
 CHECK-NEXT:   ext_delete_void_ptr_operand
 CHECK-NEXT:   ext_expected_semi_decl_list
 CHECK-NEXT:   ext_explicit_specialization_storage_class
@@ -97,7 +97,6 @@ CHECK-NEXT:   warn_missing_exception_specification
 CHECK-NEXT:   warn_missing_whitespace_after_macro_name
 CHECK-NEXT:   warn_multiple_method_decl
 CHECK-NEXT:   warn_no_constructor_for_refconst
-CHECK-NEXT:   warn_nonnull_pointers_only
 CHECK-NEXT:   warn_not_compound_assign
 CHECK-NEXT:   warn_objc_property_copy_missing_on_block
 CHECK-NEXT:   warn_objc_protocol_qualifier_missing_id
index 4e6171160f64d110eec4af7d33c9a9e0ce0f9f46..70d3d39f8ba5744da4563ce0c095e08860e7e76d 100644 (file)
@@ -20,3 +20,4 @@ int main(void) {
 }
 
 void foo(const char *str) __attribute__((nonnull("foo"))); // expected-error{{'nonnull' attribute requires parameter 1 to be an integer constant}}
+void bar(int i) __attribute__((nonnull(1))); // expected-warning {{'nonnull' attribute only applies to pointer arguments}} expected-warning {{'nonnull' attribute applied to function with no pointer arguments}}