### 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).

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

Commit messages:
 - Make UnlockExperimentalVMOptions and UnlockDiagnosticVMOptions always 
unlocked

Changes: https://git.openjdk.org/jdk/pull/32910/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=32910&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8392477
  Stats: 10 lines in 4 files changed: 3 ins; 1 del; 6 mod
  Patch: https://git.openjdk.org/jdk/pull/32910.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/32910/head:pull/32910

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

Reply via email to