[clang] 8467457 - Add new flag -Wreturn-mismatch (#82872)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 11 10:25:36 PDT 2024
Author: Bhuminjay Soni
Date: 2024-03-11T13:25:32-04:00
New Revision: 8467457afc61d70e881c9817ace26356ef757733
URL: https://github.com/llvm/llvm-project/commit/8467457afc61d70e881c9817ace26356ef757733
DIFF: https://github.com/llvm/llvm-project/commit/8467457afc61d70e881c9817ace26356ef757733.diff
LOG: Add new flag -Wreturn-mismatch (#82872)
This pull request fixes #72116 where a new flag is introduced for
compatibility with GCC 14, the functionality of -Wreturn-type is
modified to split some of its behaviors into -Wreturn-mismatch
Fixes #72116
Added:
clang/test/Sema/return-type-mismatch.c
Modified:
clang/docs/ReleaseNotes.rst
clang/include/clang/Basic/DiagnosticGroups.td
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/test/Misc/warning-wall.c
Removed:
################################################################################
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index bce27dc8c4a996..88e552d5c46113 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -183,6 +183,9 @@ Deprecated Compiler Flags
Modified Compiler Flags
-----------------------
+- Added a new diagnostic flag ``-Wreturn-mismatch`` which is grouped under
+ ``-Wreturn-type``, and moved some of the diagnostics previously controlled by
+ ``-Wreturn-type`` under this new flag. Fixes #GH72116.
Removed Compiler Flags
-------------------------
diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td
index ba1d4b2352e3de..3f14167d6b8469 100644
--- a/clang/include/clang/Basic/DiagnosticGroups.td
+++ b/clang/include/clang/Basic/DiagnosticGroups.td
@@ -617,7 +617,9 @@ def GNURedeclaredEnum : DiagGroup<"gnu-redeclared-enum">;
def RedundantMove : DiagGroup<"redundant-move">;
def Register : DiagGroup<"register", [DeprecatedRegister]>;
def ReturnTypeCLinkage : DiagGroup<"return-type-c-linkage">;
-def ReturnType : DiagGroup<"return-type", [ReturnTypeCLinkage]>;
+def ReturnMismatch : DiagGroup<"return-mismatch">;
+def ReturnType : DiagGroup<"return-type", [ReturnTypeCLinkage, ReturnMismatch]>;
+
def BindToTemporaryCopy : DiagGroup<"bind-to-temporary-copy",
[CXX98CompatBindToTemporaryCopy]>;
def SelfAssignmentField : DiagGroup<"self-assign-field">;
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 9b5245695153ec..c54105507753eb 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -10248,14 +10248,14 @@ def warn_second_parameter_to_va_arg_never_compatible : Warning<
def warn_return_missing_expr : Warning<
"non-void %select{function|method}1 %0 should return a value">, DefaultError,
- InGroup<ReturnType>;
+ InGroup<ReturnMismatch>;
def ext_return_missing_expr : ExtWarn<
"non-void %select{function|method}1 %0 should return a value">, DefaultError,
- InGroup<ReturnType>;
+ InGroup<ReturnMismatch>;
def ext_return_has_expr : ExtWarn<
"%select{void function|void method|constructor|destructor}1 %0 "
"should not return a value">,
- DefaultError, InGroup<ReturnType>;
+ DefaultError, InGroup<ReturnMismatch>;
def ext_return_has_void_expr : Extension<
"void %select{function|method|block}1 %0 should not return void expression">;
def err_return_init_list : Error<
diff --git a/clang/test/Misc/warning-wall.c b/clang/test/Misc/warning-wall.c
index 05a82770e26de6..4909ab034ef30a 100644
--- a/clang/test/Misc/warning-wall.c
+++ b/clang/test/Misc/warning-wall.c
@@ -44,6 +44,7 @@ CHECK-NEXT: -Wreorder-ctor
CHECK-NEXT: -Wreorder-init-list
CHECK-NEXT: -Wreturn-type
CHECK-NEXT: -Wreturn-type-c-linkage
+CHECK-NEXT: -Wreturn-mismatch
CHECK-NEXT: -Wself-assign
CHECK-NEXT: -Wself-assign-overloaded
CHECK-NEXT: -Wself-assign-field
diff --git a/clang/test/Sema/return-type-mismatch.c b/clang/test/Sema/return-type-mismatch.c
new file mode 100644
index 00000000000000..79a625d7df1f54
--- /dev/null
+++ b/clang/test/Sema/return-type-mismatch.c
@@ -0,0 +1,36 @@
+// RUN: %clang_cc1 -Wreturn-type -Wno-return-mismatch -fsyntax-only -verify=return-type %s
+// RUN: %clang_cc1 -Wno-return-type -Wreturn-mismatch -fsyntax-only -verify=return-mismatch %s
+
+int foo(void) __attribute__((noreturn));
+int bar(void);
+
+void test1(void) {
+ return 1; // return-mismatch-warning{{void function 'test1' should not return a value}}
+}
+
+int test2(void) {
+ return; // return-mismatch-warning{{non-void function 'test2' should return a value}}
+}
+
+int test3(void) {
+ // return-type-warning at +1 {{non-void function does not return a value}}
+}
+
+int test4(void) {
+ (void)(bar() || foo()); // return-type-warning at +1 {{non-void function does not return a value in all control paths}}
+}
+
+void test5(void) {
+} // no-warning
+
+int test6(void) {
+ return 0; // no-warning
+}
+
+int test7(void) {
+ foo(); // no warning
+}
+
+int test8(void) {
+ bar(); // return-type-warning at +1 {{non-void function does not return a value}}
+}
More information about the cfe-commits
mailing list