diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp --- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp +++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp @@ -4040,7 +4040,7 @@ ConstantStruct::get(DynamicEnvironment, {DebugIndentionLevelVal}); Constant *DynamicEnvironmentGV = new GlobalVariable( M, DynamicEnvironment, /* IsConstant */ false, - GlobalValue::InternalLinkage, DynamicEnvironmentInitializer, + GlobalValue::WeakODRLinkage, DynamicEnvironmentInitializer, DynamicEnvironmentName, /* InsertBefore */ nullptr, llvm::GlobalValue::NotThreadLocal, DL.getDefaultGlobalsAddressSpace()); @@ -4062,7 +4062,7 @@ }); Twine KernelEnvironmentName = KernelName + "_kernel_environment"; Constant *KernelEnvironmentGV = new GlobalVariable( - M, KernelEnvironment, /* IsConstant */ true, GlobalValue::ExternalLinkage, + M, KernelEnvironment, /* IsConstant */ true, GlobalValue::WeakODRLinkage, KernelEnvironmentInitializer, KernelEnvironmentName, /* InsertBefore */ nullptr, llvm::GlobalValue::NotThreadLocal, DL.getDefaultGlobalsAddressSpace()); diff --git a/mlir/test/Target/LLVMIR/omptarget-region-device-llvm.mlir b/mlir/test/Target/LLVMIR/omptarget-region-device-llvm.mlir --- a/mlir/test/Target/LLVMIR/omptarget-region-device-llvm.mlir +++ b/mlir/test/Target/LLVMIR/omptarget-region-device-llvm.mlir @@ -25,8 +25,8 @@ // CHECK: @[[SRC_LOC:.*]] = private unnamed_addr constant [23 x i8] c"{{[^"]*}}", align 1 // CHECK: @[[IDENT:.*]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 0, i32 22, ptr @[[SRC_LOC]] }, align 8 -// CHECK: @[[DYNA_ENV:.*]] = internal global %struct.DynamicEnvironmentTy zeroinitializer -// CHECK: @[[KERNEL_ENV:.*]] = constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 1, i8 1, i8 1 }, ptr @[[IDENT]], ptr @[[DYNA_ENV]] } +// CHECK: @[[DYNA_ENV:.*]] = weak_odr global %struct.DynamicEnvironmentTy zeroinitializer +// CHECK: @[[KERNEL_ENV:.*]] = weak_odr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 1, i8 1, i8 1 }, ptr @[[IDENT]], ptr @[[DYNA_ENV]] } // CHECK: define weak_odr protected void @__omp_offloading_{{[^_]+}}_{{[^_]+}}_omp_target_region__l{{[0-9]+}}(ptr %[[ADDR_A:.*]], ptr %[[ADDR_B:.*]], ptr %[[ADDR_C:.*]]) // CHECK: %[[INIT:.*]] = call i32 @__kmpc_target_init(ptr @[[KERNEL_ENV]]) // CHECK-NEXT: %[[CMP:.*]] = icmp eq i32 %3, -1