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