RFR: 8330540: Rename the enum type CompileCommand to CompileCommandEnum
Dean Long
dlong at openjdk.org
Thu Apr 18 21:52:59 UTC 2024
On Wed, 17 Apr 2024 21:26:06 GMT, Ioi Lam <iklam at openjdk.org> wrote:
> `CompileCommand` is used both as a enum type ([compilerOracle.hpp](https://github.com/openjdk/jdk/blob/064628471b83616b4463baa78618d1b7a66d0c7c/src/hotspot/share/compiler/compilerOracle.hpp#L104)), and a global variable ([compiler_globals.hpp](https://github.com/openjdk/jdk/blob/064628471b83616b4463baa78618d1b7a66d0c7c/src/hotspot/share/compiler/compiler_globals.hpp#L304)).
>
> This makes very awkward to the enum type -- we are forced to use `enum CompileCommand` in the source code whenever a type is needed:
>
> This simple c++ file illustrates the problem:
>
> enum class CompileCommand { a, b, c };
> void foo(CompileCommand x) {}
> char* CompileCommand; // can no longer use "CompileCommand" as a type
> void good(enum CompileCommand x) {}
> void bad(CompileCommand x) {}
>
> $ g++ -c ~/enum.cpp
> /home/iklam/enum.cpp:5:6: error: variable or field ?bad? declared void
> 5 | void bad(CompileCommand x) {}
>
>
> The fix is to rename the enum type to `CompileCommandEnum`.
>
> This also makes it possible to forward-declare `CompileCommandEnum` (see vmEnum.hpp) without including compilerOracle.hpp. This improves HotSpot build time by reducing the number of .o files that include compilerOracle.hpp from 456 to 16.
Marked as reviewed by dlong (Reviewer).
The char* CompileCommand for the flag seems to be used much less than the enum (I could only find it used once). So if we could rename that variable, that would be a simpler solution. But it looks like that would require some advanced macro tricks in DECLARE_FLAGS to allow customization on a per-flag basis.
-------------
PR Review: https://git.openjdk.org/jdk/pull/18829#pullrequestreview-2009977919
PR Comment: https://git.openjdk.org/jdk/pull/18829#issuecomment-2065381959
More information about the hotspot-dev
mailing list