Skip to content

Silence protobuf sun.misc.Unsafe warnings from the direct header comp… - #375

Open
davido wants to merge 1 commit into
bazelbuild:masterfrom
davido:turbine-direct-unsafe-memory-access
Open

Silence protobuf sun.misc.Unsafe warnings from the direct header comp…#375
davido wants to merge 1 commit into
bazelbuild:masterfrom
davido:turbine-direct-unsafe-memory-access

Conversation

@davido

@davido davido commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

…iler

turbine_direct (header_compiler_direct) bundles protobuf, whose UnsafeUtil calls terminally-deprecated sun.misc.Unsafe methods. On JDK 24+ (JEP 498) the JVM prints a warning for each such call during header compilation:

WARNING: A terminally deprecated method in sun.misc.Unsafe has been called
WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by
com.google.protobuf.UnsafeUtil (.../java_tools/turbine_direct_binary_deploy.jar)

Unlike the Turbine worker, header_compiler_direct does not receive turbine_jvm_opts, and --jvmopt does not reach header-compilation actions, so a toolchain currently has no way to silence these warnings for the direct header compiler. Add --sun-misc-unsafe-memory-access=allow to header_compiler_direct_jvm_opts, gated on the runtime feature version since the flag is rejected on JDK <= 22.

See protocolbuffers/protobuf#20760.

Closes #374

@davido
davido requested review from a team and hvadehra as code owners August 16, 2026 19:56
TurbineDirect bundles protobuf, whose UnsafeUtil calls
terminally-deprecated sun.misc.Unsafe methods. On JDK 24+ (JEP 498),
the JVM prints a warning for each such call during header compilation:

  WARNING: A terminally deprecated method in sun.misc.Unsafe has been
  called
  WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by
  com.google.protobuf.UnsafeUtil

The direct header compiler has two invocation shapes. The Java
TurbineDirect launcher runs as java -jar, but the prebuilt
`turbine_direct_graal` tools are native binaries. Only the Java launcher
can receive JVM options; the native binary parses the same values as
Turbine CLI options and fails with:

  unknown option: --sun-misc-unsafe-memory-access=allow

Add --sun-misc-unsafe-memory-access=allow only when the selected direct
header compiler is packaged as a deploy jar and the Java runtime feature
version is 24 or newer. This silences the protobuf warning for the Java
launcher without breaking the Graal/native path.

Add analysis tests for the three relevant cases: JDK 24 plus a jar
direct compiler gets the flag, JDK 23 plus a jar direct compiler does
not, and JDK 24 plus a native direct compiler does not.

See protocolbuffers/protobuf#20760.

Closes bazelbuild#374

Tested:
* buildifier java/common/rules/java_toolchain.bzl \
    test/java/toolchains/java_toolchain_tests.bzl
* bazelisk test //test/java/toolchains:java_toolchain_tests \
    --test_output=errors
@davido
davido force-pushed the turbine-direct-unsafe-memory-access branch from cf27565 to 68de125 Compare August 18, 2026 05:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

header_compiler_direct (TurbineDirect) emits protobuf sun.misc.Unsafe warnings on JDK 24+ that no toolchain option can silence

1 participant