https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120857
Bug ID: 120857
Summary: The wording of the warning issued by Wreturn-type is
overly confident for the current implementation
Product: gcc
Version: 16.0
URL: https://godbolt.org/z/xn5Th8avT
Status: UNCONFIRMED
Keywords: diagnostic
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: tiborgyri at gmail dot com
CC: tiborgyri at gmail dot com
Target Milestone: ---
As discussed in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67629, the current
implementation for issuing -Wreturn-type warnings is relatively simplistic and
has limitations due to how early it runs. This results in false positive
warnings being issued even in cases where it is trivial that control cannot
reach the end of the function, such as this:
int foo (bool a) {
if (a) return 0;
else if (!a) return 1;
}
Despite these current (as of GCC 16 trunk) (and longstanding) limitations, the
message emitted is extremely confident:
warning: control reaches end of non-void function [-Wreturn-type]
The wording unambiguously states that control reaches the end, without any
shred of uncertainty. I feel like given how easy it is to run into a false
positive, this is overly confident wording. The issue is made worse by the fact
that Wreturn-type is enabled by default for C++.
I propose that GCC should be more honest about the limitations of its
implementations, such as by changing this message to the following:
warning: cannot prove that control does not reach end of non-void function
[-Wreturn-type]
This message would be clear about the condition being detected and the limited
trust the user should put into the current implementation.