[llvm-dev] Discrepancy between Debug and Release+Asserts versions of Clang/LLVM

Shishir V Jessu via llvm-dev llvm-dev at lists.llvm.org
Thu Apr 30 09:51:21 PDT 2020


I am editing the LowerTypeTests pass in LLVM, and part of my additions
include the following 3 lines of code:

// newTypeName is a std::string
MDString* newMD = MDString::get(M.getContext(), newTypeName);
ArrayRef<Metadata*> mdArray {ConstantInt::get(Int64Ty, 0), newMD};
auto* node = MDTuple::get(M.getContext(), mdArray);

Thus far, I have been developing on a version of Clang with debugging
symbols enabled, and this code has worked. However, on the Release+Asserts
version, the third line results in a segmentation fault. The backtrace for
the error, up to the method I'm working on, is as follows:

// signal handling...
 #4 0x00005556e48d6120
 #5 0x00005556e48db8c2 llvm::MetadataTracking::track(void*,
llvm::Metadata&, llvm::PointerUnion<llvm::MetadataAsValue*,
llvm::Metadata*>) (/home/sjessu/build-no-debug/bin/clang-10+0x278c8c2)
 #6 0x00005556e48dbc12 llvm::MDNode::MDNode(llvm::LLVMContext&, unsigned
int, llvm::Metadata::StorageType, llvm::ArrayRef<llvm::Metadata*>,
 #7 0x00005556e48dd70d llvm::MDTuple::getImpl(llvm::LLVMContext&,
llvm::ArrayRef<llvm::Metadata*>, llvm::Metadata::StorageType, bool)
 #8 0x00005556e4a4b293 (anonymous namespace)::LowerTypeTestsModule::lower()
(.part.1843) (/home/sjessu/build-no-debug/bin/clang-10+0x28fc293)

Crucially, *this error does not occur in the Debug version*, so I am lost
as to how to diagnose it. I have checked that newMD is non-null and
contains the value I expect. Are there any discrepancies in the Debug
version as compared to the Release + Asserts version that would cause such
an error? Thanks for your help!

Shishir Jessu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200430/e40566db/attachment.html>

More information about the llvm-dev mailing list