RFR: 8365829: Multiple definitions of static 'phase_names' [v2]

Francesco Andreuzzi duke at openjdk.org
Wed Aug 20 08:21:57 UTC 2025


> - `opto/phasetype.hpp` defines `static const char* phase_names[]`
> - `compiler/compilerEvent.cpp` defines `static GrowableArray<const char*>* phase_names`
> 
> This is not a problem when the two files are compiled as different translation units, but it causes a build failure if any of them is pulled in by a precompiled header:
> 
> 
> /jdk/src/hotspot/share/compiler/compilerEvent.cpp:59:36: error: redefinition of 'phase_names' with a different type: 'GrowableArray<const char *> *' vs 'const char *[100]'
>    59 | static GrowableArray<const char*>* phase_names = nullptr;
>       | ^
> /jdk/src/hotspot/share/opto/phasetype.hpp:147:20: note: previous definition is here
>   147 | static const char* phase_names[] = {
>       | ^
> /jdk/src/hotspot/share/compiler/compilerEvent.cpp:67:39: error: member reference base type 'const char *' is not a structure or union
>    67 | const u4 nof_entries = phase_names->length();
>       | ~~~~~~~~~~~^ ~~~~~~
> /jdk/src/hotspot/share/compiler/compilerEvent.cpp:71:31: error: member reference base type 'const char *' is not a structure or union
>    71 | writer.write(phase_names->at(i));
>       | ~~~~~~~~~~~^ ~~
> /jdk/src/hotspot/share/compiler/compilerEvent.cpp:77:34: error: member reference base type 'const char *' is not a structure or union
>    77 | for (int i = 0; i < phase_names->length(); i++) {
>       | ~~~~~~~~~~~^ ~~~~~~
> /jdk/src/hotspot/share/compiler/compilerEvent.cpp:78:35: error: member reference base type 'const char *' is not a structure or union
>    78 | const char* name = phase_names->at(i);
>       | ~~~~~~~~~~~^ ~~
> /jdk/src/hotspot/share/compiler/compilerEvent.cpp:91:9: error: comparison of array 'phase_names' equal to a null pointer is always false [-Werror,-Wtautological-pointer-compare]
>    91 | if (phase_names == nullptr) {
>       | ^~~~~~~~~~~ ~~~~~~~
> /jdk/src/hotspot/share/compiler/compilerEvent.cpp:92:19: error: array type 'const char *[100]' is not assignable
>    92 | phase_names = new (mtInternal) GrowableArray<const char*>(100, mtCompiler);
>       | ~~~~~~~~~~~ ^
> /jdk/src/hotspot/share/compiler/compilerEvent.cpp:103:24: error: member reference base type 'const char *' is not a structure or union
>   103 | index = phase_names->length();
>       | ~~~~~~~~~~~^ ~~~~~~
> /jdk/src/hotspot/share/compiler/compilerEvent.cpp:104:16: error: member reference base type 'const char *' is not a structure or union
>   104 | phase_names->append(use_strdup ? os::strdup(phase_name) : phase_name);
>       | ~~~~~~~~~~~^ ~~~~~~
> 9 errors generated.
> 
> 
> Passes `tier1`.

Francesco Andreuzzi has updated the pull request incrementally with seven additional commits since the last revision:

 - static
 - nn
 - indent
 - review sugg
 - revert
 - Merge branch 'resolved-default-cctor' into JDK-8365829
 - use copy ctor

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/26851/files
  - new: https://git.openjdk.org/jdk/pull/26851/files/dc4fa3ac..a2183a2c

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

  Stats: 58 lines in 3 files changed: 40 ins; 14 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/26851.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/26851/head:pull/26851

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


More information about the hotspot-compiler-dev mailing list