RFR: 8304674: File java.c compile error with -fsanitize=address -O0

SendaoYan syan at openjdk.org
Tue Nov 26 01:41:38 UTC 2024


On Mon, 25 Nov 2024 07:08:56 GMT, David Holmes <dholmes 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.
>> This PR add final return statement make gcc with options `-fsanitize=address -O0` happy, to make jdk compile success with configure option `--enable-asan` by slowdebug mode. The added `return ret` make no sence because the `LEAVE()` macro make sure that function will execute `returun ret` statement at java.c:348.  So I think this change is no risk.
>> 
>> Additional testing:
>> 
>> - [x]   jtreg tests(include tier1/2/3 etc.) with linux-x64 release build
>> - [x]   jtreg tests(include tier1/2/3 etc.) with linux-x64 fastdebug build
>> - [x]   jtreg tests(include tier1/2/3 etc.) with linux-aarch64 release build
>> - [x]   jtreg tests(include tier1/2/3 etc.) with linux-aarch64 fastdebug build
>
> src/java.base/share/native/libjli/java.c line 663:
> 
>> 661:     }
>> 662:     LEAVE();
>> 663:     return ret;
> 
> A `do-while` loop is always executed at least once, that is why the `LEAVE macro is structured as it is:
> 
>     do { \
>         if ((*vm)->DetachCurrentThread(vm) != JNI_OK) { \
>             JLI_ReportErrorMessage(JVM_ERROR2); \
>             ret = 1; \
>         } \
>         if (JNI_TRUE) { \
>             (*vm)->DestroyJavaVM(vm); \
>             return ret; \
>         } \
>     } while (JNI_FALSE)
> 
> So this will always return and the sanitizer seems incorrect.

Yes, I was make a mistake prior, the do-while(false) loop will execute once. But I think this PR still a bit usefull and no risk, the analyze seen as [below](https://github.com/openjdk/jdk/pull/22355#issuecomment-2497997812).

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/22355#discussion_r1857554793


More information about the core-libs-dev mailing list