Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8365829

Multiple definitions of static 'phase_names'

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Unresolved
    • Icon: P4 P4
    • None
    • 26
    • hotspot
    • 19

      - "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.
      ```

            fandreuzzi Francesco Andreuzzi
            fandreuzzi Francesco Andreuzzi
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: