[PATCH] D125751: [llvm-nm] Always use opaque pointers (PR55506)

Nikita Popov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue May 17 01:52:27 PDT 2022


nikic created this revision.
nikic added a reviewer: opaque-pointers.
Herald added a subscriber: rupprecht.
Herald added a reviewer: jhenderson.
Herald added a project: All.
nikic requested review of this revision.
Herald added subscribers: llvm-commits, MaskRay.
Herald added a project: LLVM.

Always enable opaque pointers in llvm-nm, because the tool doesn't actually care, and this allows us to read both typed pointer and opaque pointer bitcode files in one archive. Previously this depended on the order inside the archive (it would work with an opaque pointer bitcode file first, but fail with a typed pointer bitcode file first).

Fixes https://github.com/llvm/llvm-project/issues/55506.


https://reviews.llvm.org/D125751

Files:
  llvm/test/tools/llvm-nm/opaque-pointers.ll
  llvm/tools/llvm-nm/llvm-nm.cpp


Index: llvm/tools/llvm-nm/llvm-nm.cpp
===================================================================
--- llvm/tools/llvm-nm/llvm-nm.cpp
+++ llvm/tools/llvm-nm/llvm-nm.cpp
@@ -2254,7 +2254,11 @@
   if (error(BufferOrErr.getError(), Filename))
     return SymbolList;
 
+  // Always enable opaque pointers, to handle archives with mixed typed and
+  // opaque pointer bitcode files gracefully. As we're only reading symbols,
+  // the used pointer types don't matter.
   LLVMContext Context;
+  Context.setOpaquePointers(true);
   LLVMContext *ContextPtr = NoLLVMBitcode ? nullptr : &Context;
   Expected<std::unique_ptr<Binary>> BinaryOrErr =
       createBinary(BufferOrErr.get()->getMemBufferRef(), ContextPtr);
Index: llvm/test/tools/llvm-nm/opaque-pointers.ll
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-nm/opaque-pointers.ll
@@ -0,0 +1,13 @@
+; RUN: llvm-as -opaque-pointers=0 < %s > %t.typed.bc
+; RUN: llvm-as -opaque-pointers=1 < %s > %t.opaque.bc
+; RUN: llvm-ar cr %t.a %t.typed.bc %t.opaque.bc
+; RUN: llvm-nm --just-symbol-name %t.a | FileCheck %s
+
+; CHECK-LABEL: typed.bc:
+; CHECK: test
+; CHECK-LABEL: opaque.bc:
+; CHECK: test
+
+define void @test() {
+  ret void
+}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D125751.429962.patch
Type: text/x-patch
Size: 1252 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220517/b8a19ff7/attachment.bin>


More information about the llvm-commits mailing list