RFR: 8346193: Test runtime/ErrorHandling/TestDwarf.java fails build with clang17
SendaoYan
syan at openjdk.org
Mon Dec 16 09:57:45 UTC 2024
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
-------------
Commit messages:
- 8346193: Test runtime/ErrorHandling/TestDwarf.java fails build with clang17
Changes: https://git.openjdk.org/jdk/pull/22757/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22757&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8346193
Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
Patch: https://git.openjdk.org/jdk/pull/22757.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/22757/head:pull/22757
PR: https://git.openjdk.org/jdk/pull/22757
More information about the hotspot-dev
mailing list