RFR: 8346193: Test runtime/ErrorHandling/TestDwarf.java fails build with clang17 [v2]
Hamlin Li
mli at openjdk.org
Wed Dec 18 14:19:39 UTC 2024
On Wed, 18 Dec 2024 07:28:50 GMT, SendaoYan <syan at openjdk.org> wrote:
>> Hi all,
>> Function `frame::oops_do_internal` in src/hotspot/share/runtime/frame.cpp assign value to a nullptr `char *t` and intended to cause jvm crash. But after the assignment the nullptr do not use anymore, so clang17 consider the `char *t` initialization and assignment is "dead code". This PR add `volatile` modifier to `char *t`, to make avoid clang do the "dead code" elimination. Risk is low.
>>
>> Here is the example explain the "dead code" elimination.
>>
>> 1. Without volatile modifier, clang will delete the "dead code" and cause no more Segmentation fault error by -O1.
>>
>>
>>> cat demo.c
>> int main() { char *t = 0; *t = 'c'; return 0; }
>>> clang -O0 demo.c && ./a.out ; echo $?
>> Segmentation fault (core dumped)
>> 139
>>> clang -O1 demo.c && ./a.out ; echo $?
>> 0
>>
>>
>> 2. With volatile modifier, clang do not delete the "dead code" again and and the expected Segmentation fault occur by -O1.
>>
>>> cat demo.c
>> int main() { volatile char *t = 0; *t = 'c'; return 0; }
>>> clang -O0 demo.c && ./a.out ; echo $?
>> Segmentation fault (core dumped)
>> 139
>>> clang -O1 demo.c && ./a.out ; echo $?
>> Segmentation fault (core dumped)
>> 139
>
> SendaoYan has updated the pull request incrementally with one additional commit since the last revision:
>
> update comment "Use volatile to prevent compiler from optimising away the store"
I see, thanks for the information. Then the change looks good to me.
`ShouldNotReachHere();` seems better to me, but you have the final say.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/22757#issuecomment-2551436683
More information about the hotspot-dev
mailing list