diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp --- a/clang/lib/CodeGen/CodeGenAction.cpp +++ b/clang/lib/CodeGen/CodeGenAction.cpp @@ -1102,6 +1102,8 @@ CompilerInstance &CI = getCompilerInstance(); SourceManager &SM = CI.getSourceManager(); + VMContext->setOpaquePointers(CI.getCodeGenOpts().OpaquePointers); + // For ThinLTO backend invocations, ensure that the context // merges types based on ODR identifiers. We also need to read // the correct module out of a multi-module bitcode file. diff --git a/clang/test/CodeGen/Inputs/thinlto-opaque.ll b/clang/test/CodeGen/Inputs/thinlto-opaque.ll new file mode 100644 --- /dev/null +++ b/clang/test/CodeGen/Inputs/thinlto-opaque.ll @@ -0,0 +1,6 @@ +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64--" + +define ptr @f2() { + ret ptr null +} diff --git a/clang/test/CodeGen/thinlto-distributed-cfi-devirt.ll b/clang/test/CodeGen/thinlto-distributed-cfi-devirt.ll --- a/clang/test/CodeGen/thinlto-distributed-cfi-devirt.ll +++ b/clang/test/CodeGen/thinlto-distributed-cfi-devirt.ll @@ -100,7 +100,7 @@ ; CHECK-IR: br i1 {{.*}}, label %trap ; We still have to call it as virtual. - ; CHECK-IR: %call3 = tail call i32 %7 + ; CHECK-IR: %call3 = tail call i32 {{%[0-9]+}} %call3 = tail call i32 %8(%struct.A* nonnull %obj, i32 %call) ret i32 %call3 } diff --git a/clang/test/CodeGen/thinlto-opaque-typed-mix.ll b/clang/test/CodeGen/thinlto-opaque-typed-mix.ll new file mode 100644 --- /dev/null +++ b/clang/test/CodeGen/thinlto-opaque-typed-mix.ll @@ -0,0 +1,23 @@ +; REQUIRES: x86-registered-target +; Test that mixing bitcode file with opaque and typed pointers works. + +; RUN: mkdir -p %t +; RUN: opt -module-summary -o %t/typed.bc %s +; RUN: opt -module-summary -o %t/opaque.bc %S/Inputs/thinlto-opaque.ll +; RUN: llvm-lto2 run -thinlto-distributed-indexes %t/typed.bc %t/opaque.bc \ +; RUN: -o %t/native.o -r %t/typed.bc,main,plx -r %t/typed.bc,f2, \ +; RUN: -r %t/opaque.bc,f2,p + +; RUN: %clang_cc1 -triple x86_64-- -emit-obj -o %t/native.o %t/typed.bc \ +; RUN: -Wno-override-module \ +; RUN: -fthinlto-index=%t/typed.bc.thinlto.bc + +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64--" + +declare i8* @f2() + +define i32 @main() { + call i8* @f2() + ret i32 0 +}