https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77722
Bug ID: 77722
Summary: -fsanitize=undefined doesn't give runtime error in
function without return value, unless at least 2
instructions
Product: gcc
Version: 6.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: jamespharvey20 at gmail dot com
Target Milestone: ---
[test.cpp]
----------
int func() {
}
int main() {
func();
}
----------
$ g++ test.cpp -fsanitize=undefined -O0
$ ./a.out
(No runtime error)
----------
int func() {
int a = 5;
}
----------
$ ./a.out
(No runtime error)
----------
int func() {
int a = 5;
int b = 5;
}
----------
$ ./a.out
test.cpp:1:5: runtime error: execution reached the end of a value-returning
function without returning a value
I'm not sure what (if any) relation there is in the gcc to clang fsanitize
code. But, clang 3.8.1's fsanitize=undefined gives a runtime error on all 3
above versions of func().
As a note, -Wreturn-type does issue a warning even for an empty version of
func(), so it does catch the situation, but fsanitize=undefined does not.