]> granicus.if.org Git - clang/commitdiff
Split "discards qualifiers" warnings of -Wincompatible-pointer-types into subgroup.
authorTed Kremenek <kremenek@apple.com>
Tue, 22 Jan 2013 19:32:27 +0000 (19:32 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 22 Jan 2013 19:32:27 +0000 (19:32 +0000)
This allows users to promote -Wincompatible-pointer-type warnings to
errors but keep those for "discard qualifiers" as warnings (if they
so desire).

Addresses <rdar://problem/13062738>.

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

include/clang/Basic/DiagnosticGroups.td
include/clang/Basic/DiagnosticSemaKinds.td
test/Sema/incompatible-pointer-types-error.c [new file with mode: 0644]

index 8a2d5965869021c4b522eec15ebcfc2003643013..7709be139bbcf1ded5e57078de8a6d350495d1dc 100644 (file)
@@ -124,7 +124,11 @@ def DanglingField : DiagGroup<"dangling-field">;
 def DistributedObjectModifiers : DiagGroup<"distributed-object-modifiers">;
 def IgnoredQualifiers : DiagGroup<"ignored-qualifiers">;
 def : DiagGroup<"import">;
-def IncompatiblePointerTypes : DiagGroup<"incompatible-pointer-types">;
+def IncompatiblePointerTypesDiscardsQualifiers 
+  : DiagGroup<"incompatible-pointer-types-discards-qualifiers">;
+def IncompatiblePointerTypes
+  : DiagGroup<"incompatible-pointer-types",
+    [IncompatiblePointerTypesDiscardsQualifiers]>;
 def IncompleteUmbrella : DiagGroup<"incomplete-umbrella">;
 def InvalidNoreturn : DiagGroup<"invalid-noreturn">;
 def InvalidSourceEncoding : DiagGroup<"invalid-source-encoding">;
index 3b37658abba212d7a3ac324f93f33e5a1faee4d9..053f39207a294e70a4fc428d75428eea251f5e6e 100644 (file)
@@ -4902,7 +4902,7 @@ def ext_typecheck_convert_discards_qualifiers : ExtWarn<
   "sending to parameter of different type}0,1"
   "|%diff{casting $ to type $|casting between types}0,1}2"
   " discards qualifiers">,
-  InGroup<IncompatiblePointerTypes>;
+  InGroup<IncompatiblePointerTypesDiscardsQualifiers>;
 def ext_nested_pointer_qualifier_mismatch : ExtWarn<
   "%select{%diff{assigning to $ from $|assigning to different types}0,1"
   "|%diff{passing $ to parameter of type $|"
@@ -4916,7 +4916,7 @@ def ext_nested_pointer_qualifier_mismatch : ExtWarn<
   "sending to parameter of different type}0,1"
   "|%diff{casting $ to type $|casting between types}0,1}2"
   " discards qualifiers in nested pointer types">,
-  InGroup<IncompatiblePointerTypes>;
+  InGroup<IncompatiblePointerTypesDiscardsQualifiers>;
 def warn_incompatible_vectors : Warning<
   "incompatible vector types "
   "%select{%diff{assigning to $ from $|assigning to different types}0,1"
diff --git a/test/Sema/incompatible-pointer-types-error.c b/test/Sema/incompatible-pointer-types-error.c
new file mode 100644 (file)
index 0000000..fda45cf
--- /dev/null
@@ -0,0 +1,16 @@
+// RUN: %clang -fsyntax-only %s -Xclang -verify -Werror=incompatible-pointer-types -Wno-error=incompatible-pointer-types-discards-qualifiers
+
+// This test ensures that the subgroup of -Wincompatible-pointer-types warnings that
+// concern discarding qualifers can be promoted (or not promoted) to an error *separately* from
+// the other -Wincompatible-pointer-type warnings.
+//
+// <rdar://problem/13062738>
+//
+
+void foo(char *s); // expected-note {{passing argument to parameter 's' here}}
+void baz(int *s); // expected-note {{passing argument to parameter 's' here}}
+
+void bar(const char *s) {
+  foo(s); // expected-warning {{passing 'const char *' to parameter of type 'char *' discards qualifiers}}
+  baz(s); // expected-error {{incompatible pointer types passing 'const char *' to parameter of type 'int *'}}
+}