[PATCH] D107125: [Diagnostic] Split 'qualifier on reference type has no effect' out into a new flag

Luna Kirkby via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 2 14:52:20 PDT 2021


lunasorcery updated this revision to Diff 363582.
lunasorcery added a comment.

How does this look? I've got a 'control' test to demonstrate the diagnostic as a child of ignored-qualifiers, as well as a test to demonstrate this diagnostic can be disabled in isolation.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D107125/new/

https://reviews.llvm.org/D107125

Files:
  clang/include/clang/Basic/DiagnosticGroups.td
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/test/SemaCXX/ignored-reference-qualifiers-disabled.cpp
  clang/test/SemaCXX/ignored-reference-qualifiers.cpp


Index: clang/test/SemaCXX/ignored-reference-qualifiers.cpp
===================================================================
--- /dev/null
+++ clang/test/SemaCXX/ignored-reference-qualifiers.cpp
@@ -0,0 +1,20 @@
+// RUN: %clang_cc1 %s -std=c++11 -Wignored-qualifiers -verify
+
+const int scalar_c(); // expected-warning{{'const' type qualifier on return type has no effect}}
+volatile int scalar_v(); // expected-warning{{'volatile' type qualifier on return type has no effect}}
+const volatile int scalar_cv(); // expected-warning{{'const volatile' type qualifiers on return type have no effect}}
+
+typedef int& IntRef;
+
+const IntRef ref_c(); // expected-warning{{'const' qualifier on reference type 'IntRef' (aka 'int &') has no effect}}
+volatile IntRef ref_v(); // expected-warning{{'volatile' qualifier on reference type 'IntRef' (aka 'int &') has no effect}}
+const volatile IntRef ref_cv(); /* expected-warning{{'const' qualifier on reference type 'IntRef' (aka 'int &') has no effect}} \
+                                expected-warning{{'volatile' qualifier on reference type 'IntRef' (aka 'int &') has no effect}} */
+
+template<typename T>
+class container {
+	using value_type = T;
+	using reference  = value_type&;
+	reference get();
+	const reference get() const; // expected-warning{{'const' qualifier on reference type 'container::reference' (aka 'T &') has no effect}}
+};
Index: clang/test/SemaCXX/ignored-reference-qualifiers-disabled.cpp
===================================================================
--- /dev/null
+++ clang/test/SemaCXX/ignored-reference-qualifiers-disabled.cpp
@@ -0,0 +1,20 @@
+// RUN: %clang_cc1 %s -std=c++11 -Wignored-qualifiers -Wno-ignored-reference-qualifiers -verify
+
+const int scalar_c(); // expected-warning{{'const' type qualifier on return type has no effect}}
+volatile int scalar_v(); // expected-warning{{'volatile' type qualifier on return type has no effect}}
+const volatile int scalar_cv(); // expected-warning{{'const volatile' type qualifiers on return type have no effect}}
+
+// no warnings expected below here, as we've disabled ignored-reference-qualifiers.
+typedef int& IntRef;
+
+const IntRef ref_c();
+volatile IntRef ref_v();
+const volatile IntRef ref_cv();
+
+template<typename T>
+class container {
+	using value_type = T;
+	using reference  = value_type&;
+	reference get();
+	const reference get() const;
+};
Index: clang/include/clang/Basic/DiagnosticSemaKinds.td
===================================================================
--- clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -5733,7 +5733,7 @@
   "'%0' qualifier on function type %1 has unspecified behavior">;
 def warn_typecheck_reference_qualifiers : Warning<
   "'%0' qualifier on reference type %1 has no effect">,
-  InGroup<IgnoredQualifiers>;
+  InGroup<IgnoredReferenceQualifiers>;
 def err_typecheck_invalid_restrict_not_pointer : Error<
   "restrict requires a pointer or reference (%0 is invalid)">;
 def err_typecheck_invalid_restrict_not_pointer_noarg : Error<
Index: clang/include/clang/Basic/DiagnosticGroups.td
===================================================================
--- clang/include/clang/Basic/DiagnosticGroups.td
+++ clang/include/clang/Basic/DiagnosticGroups.td
@@ -400,7 +400,8 @@
 def InfiniteRecursion : DiagGroup<"infinite-recursion">;
 def PureVirtualCallFromCtorDtor: DiagGroup<"call-to-pure-virtual-from-ctor-dtor">;
 def GNUImaginaryConstant : DiagGroup<"gnu-imaginary-constant">;
-def IgnoredQualifiers : DiagGroup<"ignored-qualifiers">;
+def IgnoredReferenceQualifiers : DiagGroup<"ignored-reference-qualifiers">;
+def IgnoredQualifiers : DiagGroup<"ignored-qualifiers", [IgnoredReferenceQualifiers]>;
 def : DiagGroup<"import">;
 def GNUIncludeNext : DiagGroup<"gnu-include-next">;
 def IncompatibleMSStruct : DiagGroup<"incompatible-ms-struct">;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D107125.363582.patch
Type: text/x-patch
Size: 3896 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210802/080f5792/attachment-0001.bin>


More information about the cfe-commits mailing list