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

Robert Toyonaga has updated the pull request incrementally with one additional 
commit since the last revision:

  fix bug and add test

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/32910/files
  - new: https://git.openjdk.org/jdk/pull/32910/files/788ced56..6cef9fc1

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=32910&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=32910&range=00-01

  Stats: 53 lines in 2 files changed: 52 ins; 0 del; 1 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