On Wed, 16 Sep 2026 19:10:42 GMT, Robert Toyonaga <[email protected]> wrote:

> ### Summary
> 
> When specifying `-XX:UnlockDiagnosticVMOptions` without the necessary +/-, 
> the following error is produced:
> 
> $ java -XX:UnlockDiagnosticVMOptions -m jdk.httpserver
> Error: VM option 'UnlockDiagnosticVMOptions' is diagnostic and must be 
> enabled via -XX:+UnlockDiagnosticVMOptions.
> 
> 
> Similarly with `-XX:UnlockExperimentalVMOptions`:
> 
> $ java -XX:UnlockExperimentalVMOptions -m jdk.httpserver
> Error: VM option 'UnlockExperimentalVMOptions' is experimental and must be 
> enabled via -XX:+UnlockExperimentalVMOptions.
> 
> 
> This recursive complaint about using the unlocker to unlock the unlocker is 
> misleading and probably confusing for users.
> 
> ### Root cause
> The problem is that `UnlockDiagnosticVMOptions` is **itself**  a _diagnostic_ 
> option. And `UnlockExperimentalVMOptions` is **itself** an _experimental_ 
> option.
> 
> `Arguments::process_argument` calls `parse_argument` which notices 
> `UnlockDiagnosticVMOptions`/`UnlockExperimentalVMOptions` is missing +/-  so  
> leaves the option **unset**. Since the unlocker option is unset, and the 
> unlocker option is itself diagnostic/experiemental, the "must be enabled" 
> error is thrown because it hasn't yet been unlocked.
> 
> UnlockDiagnosticVMOptions defaults to true in debug, so the problem only 
> manifests in release builds. 
> UnlockExperimentalVMOptions always defaults to false, so the problem 
> manifests in all builds. 
> 
> 
> ### Solution
> The solution is to treat `UnlockDiagnosticVMOptions` and 
> `UnlockExperimentalVMOptions` as always unlocked. The existing Hotspot code 
> already essentially does this, but this PR formalizes it in 
> `JVMFlag::is_unlocked()`.  As an added benefit, this allows for some 
> simplification in other places too where we check the status of flags.
> 
> 
> 
> ---------
> - [x] I confirm that I make this contribution in accordance with the [OpenJDK 
> Interim AI Policy](https://openjdk.org/legal/ai).

This pull request has now been integrated.

Changeset: 2a364c40
Author:    Robert Toyonaga <[email protected]>
URL:       
https://git.openjdk.org/jdk/commit/2a364c40380ac2f654860908ce58301de56fc4e1
Stats:     62 lines in 5 files changed: 55 ins; 1 del; 6 mod

8392477: -XX:UnlockDiagnosticVMOptions and -XX:UnlockExperimentalVMOptions 
produce incorrect error

Reviewed-by: dholmes, sspitsyn

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

PR: https://git.openjdk.org/jdk/pull/32910

Reply via email to