[clang] [clang] [Diagnostic] Clarify -Winfinite-recursion message (PR #98763)
via cfe-commits
cfe-commits at lists.llvm.org
Sat Jul 13 12:01:43 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Narayan (vortex73)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/98763.diff
2 Files Affected:
- (modified) clang/include/clang/Basic/DiagnosticSemaKinds.td (+1-1)
- (modified) clang/test/SemaCXX/warn-infinite-recursion.cpp (+16-16)
``````````diff
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 0ea3677355169..53c38bb543409 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -60,7 +60,7 @@ def note_remove_max_call : Note<
"remove call to max function and unsigned zero argument">;
def warn_infinite_recursive_function : Warning<
- "all paths through this function will call itself">,
+ "in order to understand recursion, you must first understand recursion">,
InGroup<InfiniteRecursion>, DefaultIgnore;
def warn_comma_operator : Warning<"possible misuse of comma operator here">,
diff --git a/clang/test/SemaCXX/warn-infinite-recursion.cpp b/clang/test/SemaCXX/warn-infinite-recursion.cpp
index d0f3fe7b164e1..b57b417d13cd2 100644
--- a/clang/test/SemaCXX/warn-infinite-recursion.cpp
+++ b/clang/test/SemaCXX/warn-infinite-recursion.cpp
@@ -1,10 +1,10 @@
// RUN: %clang_cc1 %s -fsyntax-only -verify -Winfinite-recursion
-void a() { // expected-warning{{call itself}}
+void a() { // expected-warning{{to understand recursion}}
a();
}
-void b(int x) { // expected-warning{{call itself}}
+void b(int x) { // expected-warning{{to understand recursion}}
if (x)
b(x);
else
@@ -16,7 +16,7 @@ void c(int x) {
c(5);
}
-void d(int x) { // expected-warning{{call itself}}
+void d(int x) { // expected-warning{{to understand recursion}}
if (x)
++x;
return d(x);
@@ -29,7 +29,7 @@ void f();
void e() { f(); }
void f() { e(); }
-void g() { // expected-warning{{call itself}}
+void g() { // expected-warning{{to understand recursion}}
while (true)
g();
@@ -42,14 +42,14 @@ void h(int x) {
}
}
-void i(int x) { // expected-warning{{call itself}}
+void i(int x) { // expected-warning{{to understand recursion}}
while (x < 5) {
--x;
}
i(0);
}
-int j() { // expected-warning{{call itself}}
+int j() { // expected-warning{{to understand recursion}}
return 5 + j();
}
@@ -80,11 +80,11 @@ class S {
void b();
};
-void S::a() { // expected-warning{{call itself}}
+void S::a() { // expected-warning{{to understand recursion}}
return a();
}
-void S::b() { // expected-warning{{call itself}}
+void S::b() { // expected-warning{{to understand recursion}}
int i = 0;
do {
++i;
@@ -95,8 +95,8 @@ void S::b() { // expected-warning{{call itself}}
template<class member>
struct T {
member m;
- void a() { return a(); } // expected-warning{{call itself}}
- static void b() { return b(); } // expected-warning{{call itself}}
+ void a() { return a(); } // expected-warning{{to understand recursion}}
+ static void b() { return b(); } // expected-warning{{to understand recursion}}
};
void test_T() {
@@ -107,13 +107,13 @@ void test_T() {
class U {
U* u;
- void Fun() { // expected-warning{{call itself}}
+ void Fun() { // expected-warning{{to understand recursion}}
u->Fun();
}
};
// No warnings on templated functions
-// sum<0>() is instantiated, does recursively call itself, but never runs.
+// sum<0>() is instantiated, does recursively to understand recursion, but never runs.
template <int value>
int sum() {
return value + sum<value/2>();
@@ -157,7 +157,7 @@ struct Wrapper {
return 0;
return Wrapper<x/2>::run();
}
- static int run2() { // expected-warning{{call itself}}
+ static int run2() { // expected-warning{{to understand recursion}}
return run2();
}
};
@@ -194,7 +194,7 @@ struct Q {
};
Q q;
-Q &evaluated_recursive_function(int x) { // expected-warning{{call itself}}
+Q &evaluated_recursive_function(int x) { // expected-warning{{to understand recursion}}
(void)typeid(evaluated_recursive_function(x)); // expected-warning {{expression with side effects will be evaluated despite being used as an operand to 'typeid'}}
return q;
}
@@ -204,11 +204,11 @@ int unevaluated_recursive_function() {
return 0;
}
-void func1(int i) { // expected-warning {{call itself}}
+void func1(int i) { // expected-warning {{to understand recursion}}
if (i || !i)
func1(i);
}
-void func2(int i) { // expected-warning {{call itself}}
+void func2(int i) { // expected-warning {{to understand recursion}}
if (!i && i) {}
else
func2(i);
``````````
</details>
https://github.com/llvm/llvm-project/pull/98763
More information about the cfe-commits
mailing list