openj9 icon indicating copy to clipboard operation
openj9 copied to clipboard

openj9 failed to compile with lto at final

Open eebssk1 opened this issue 5 months ago • 7 comments

When building the openj9 as part of jdk build, The following error occured at final link when lto is enabled.

/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/env/J9PersistentInfo.hpp:111:7: warning: type 'struct PersistentInfo' violates the C++ One Definition Rule [-Wodr]
  111 | class PersistentInfo : public OMR::PersistentInfoConnector
      |       ^
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/env/J9PersistentInfo.hpp:111: note: a different type is defined in another translation unit
  111 | class PersistentInfo : public OMR::PersistentInfoConnector
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/env/J9PersistentInfo.hpp:487:16: note: the first difference of corresponding definitions is field '_JITServerAddress'
  487 |    std::string _JITServerAddress;
      |                ^
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/env/J9PersistentInfo.hpp:111: note: a type with different number of fields is defined in another translation unit
  111 | class PersistentInfo : public OMR::PersistentInfoConnector
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/env/PersistentInfo.hpp:31:7: warning: type 'struct PersistentInfo' violates the C++ One Definition Rule [-Wodr]
   31 | class PersistentInfo : public J9::PersistentInfoConnector
      |       ^
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/env/PersistentInfo.hpp:31: note: a type with different bases is defined in another translation unit
   31 | class PersistentInfo : public J9::PersistentInfoConnector
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/codert_vm/thunkcrt.c:95: error: function 'icallVMprJavaSendVirtualL' redeclared as variable
   95 | extern void * icallVMprJavaSendVirtualL;
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/Runtime.cpp:341: note: previously declared here
  341 | JIT_HELPER(icallVMprJavaSendVirtualL);
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/codert_vm/thunkcrt.c:101: error: function 'icallVMprJavaSendInvokeExactD' redeclared as variable
  101 | extern void * icallVMprJavaSendInvokeExactD;
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/Runtime.cpp:232: note: previously declared here
  232 | JIT_HELPER(icallVMprJavaSendInvokeExactD);
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/codert_vm/thunkcrt.c:100: error: function 'icallVMprJavaSendInvokeExactF' redeclared as variable
  100 | extern void * icallVMprJavaSendInvokeExactF;
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/Runtime.cpp:231: note: previously declared here
  231 | JIT_HELPER(icallVMprJavaSendInvokeExactF);
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/codert_vm/thunkcrt.c:102: error: function 'icallVMprJavaSendInvokeExactL' redeclared as variable
  102 | extern void * icallVMprJavaSendInvokeExactL;
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/Runtime.cpp:230: note: previously declared here
  230 | JIT_HELPER(icallVMprJavaSendInvokeExactL);
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/codert_vm/thunkcrt.c:99: error: function 'icallVMprJavaSendInvokeExactJ' redeclared as variable
   99 | extern void * icallVMprJavaSendInvokeExactJ;
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/Runtime.cpp:229: note: previously declared here
  229 | JIT_HELPER(icallVMprJavaSendInvokeExactJ);
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/codert_vm/thunkcrt.c:98: error: function 'icallVMprJavaSendInvokeExact1' redeclared as variable
   98 | extern void * icallVMprJavaSendInvokeExact1;
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/Runtime.cpp:228: note: previously declared here
  228 | JIT_HELPER(icallVMprJavaSendInvokeExact1);
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/codert_vm/thunkcrt.c:97: error: function 'icallVMprJavaSendInvokeExact0' redeclared as variable
   97 | extern void * icallVMprJavaSendInvokeExact0;
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/Runtime.cpp:227: note: previously declared here
  227 | JIT_HELPER(icallVMprJavaSendInvokeExact0);
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/codert_vm/cnathelp.cpp:213: error: function 'icallVMprJavaSendStatic1' redeclared as variable
  213 | J9_EXTERN_BUILDER_SYMBOL(icallVMprJavaSendStatic1);
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/Runtime.cpp:218: note: previously declared here
  218 | JIT_HELPER(icallVMprJavaSendStatic1);
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/Runtime.cpp:354: warning: type of 'methodHandleJ2I_unwrapper' does not match original declaration [-Wlto-type-mismatch]
  354 | JIT_HELPER(methodHandleJ2I_unwrapper);
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/JitRuntime.cpp:1819: note: type mismatch in parameter 1
 1819 | void methodHandleJ2I_unwrapper(void **argsPtr, void **resPtr)
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/JitRuntime.cpp:1819: note: 'methodHandleJ2I_unwrapper' was previously declared here
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/Runtime.cpp:233: warning: type of 'initialInvokeExactThunk_unwrapper' does not match original declaration [-Wlto-type-mismatch]
  233 | JIT_HELPER(initialInvokeExactThunk_unwrapper);
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/JitRuntime.cpp:1791: note: type mismatch in parameter 1
 1791 | void initialInvokeExactThunk_unwrapper(void **argsPtr, void **resPtr)
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/JitRuntime.cpp:1791: note: 'initialInvokeExactThunk_unwrapper' was previously declared here
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/Runtime.cpp:245: warning: type of 'callGPU' does not match original declaration [-Wlto-type-mismatch]
  245 | JIT_HELPER(callGPU);
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/GPUHelpers.cpp:2494:5: note: return value type mismatch
 2494 | int callGPU(void *vmThread, void *method, char * programSource, void * invokeObject, int deviceId,
      |     ^
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/GPUHelpers.cpp:2494:5: note: type 'int' should match type 'void'
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/GPUHelpers.cpp:2494:5: note: 'callGPU' was previously declared here
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/JitRuntime.cpp:1169: warning: type of 'prepareForOSR' does not match original declaration [-Wlto-type-mismatch]
 1169 | JIT_HELPER(prepareForOSR);
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/CRuntimeImpl.cpp:47:6: note: type mismatch in parameter 1
   47 | void prepareForOSR(uintptr_t vmThreadArg, int32_t currentInlinedSiteIndex, int32_t slotData)
      |      ^
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/CRuntimeImpl.cpp:47:6: note: type 'uintptr_t' should match type 'void'
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/CRuntimeImpl.cpp:47:6: note: 'prepareForOSR' was previously declared here
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/codert_vm/thunkcrt.c:91: error: function 'icallVMprJavaSendVirtualJ' redeclared as variable
   91 | extern void * icallVMprJavaSendVirtualJ;
/home/eebssk1/j9/openj9-openjdk-jdk11/openj9/runtime/compiler/runtime/codertinit.cpp:55:1: note: previously declared here

https://github.com/eclipse-openj9/openj9/blob/7aa9aa4664d22045dcfa9fd5c2d3c1fc1fc45cb6/runtime/compiler/runtime/asmprotos.h#L45 and https://github.com/eclipse-openj9/openj9/blob/7aa9aa4664d22045dcfa9fd5c2d3c1fc1fc45cb6/runtime/oti/j9.h#L276 as well as in https://github.com/eclipse-openj9/openj9/blob/7aa9aa4664d22045dcfa9fd5c2d3c1fc1fc45cb6/runtime/codert_vm/thunkcrt.c#L89

lto does not support one being a function and another being a function pointer/variable(if it meant to be?) for the same name it seems. so if use the first definition in the if case, the build continues.

eebssk1 avatar Jun 06 '25 17:06 eebssk1