RFR: 8330540: Rename the enum type CompileCommand to CompileCommandEnum

Ioi Lam iklam at openjdk.org
Sat Apr 20 03:54:34 UTC 2024


On Thu, 18 Apr 2024 21:49:34 GMT, Dean Long <dlong 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.
>
> 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.

Thanks @dean-long and @vnkozlov for the review

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

PR Comment: https://git.openjdk.org/jdk/pull/18829#issuecomment-2067537671


More information about the hotspot-dev mailing list