RFR: 8304674: File java.c compile error with -fsanitize=address -O0
Magnus Ihse Bursie
ihse at openjdk.org
Mon Mar 31 13:03:18 UTC 2025
On Sun, 30 Mar 2025 15:07:36 GMT, SendaoYan <syan at openjdk.org> wrote:
> Hi all,
> File src/java.base/share/native/libjli/java.c compile error: control reaches end of non-void function [-Werror=return-type] with gcc options -fsanitize=address -O0. The function int JavaMain(void* _args) in this file will execute return ret in LEAVE() macro, but gcc with -O0 is not smart enough to recognized that the function already has return statement before at the end of function. It's a gcc bug which has been recorded by [80959](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80959), and below code snippet can demonstrate the gcc bug. I think we should disable return-type gcc warning for java.c file before the gcc bug has been fixed. Risk is low.
>
>
>> cat java.c
> char a() {
> return 0;
> int b;
> if (a(&b))
> return 0;
> }
>
>> gcc -O0 -Wall -Wextra -Werror -O0 -c java.c -fsanitize=address
> java.c: In function ‘a’:
> java.c:6:1: error: control reaches end of non-void function [-Werror=return-type]
> 6 | }
> | ^
> cc1: all warnings being treated as errors
While I normally advocate using DISABLE_WARNING in makefiles instead of pragmas, in this particular case I wonder if not a pragma in the `LEAVE` macro would be better?
-------------
PR Comment: https://git.openjdk.org/jdk/pull/24318#issuecomment-2766145747
More information about the core-libs-dev
mailing list