[llvm] XCOFF associated metadata (PR #159096)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 30 12:21:47 PDT 2025
================
@@ -766,6 +766,28 @@ void Verifier::visitGlobalValue(const GlobalValue &GV) {
DL.getIntPtrType(GO->getType()),
RangeLikeMetadataKind::AbsoluteSymbol);
}
+
+ if (GO->hasMetadata(LLVMContext::MD_ref)) {
+ SmallVector<MDNode *> MDs;
+ GO->getMetadata(LLVMContext::MD_ref, MDs);
+ for (const MDNode *MD : MDs) {
+ Check(MD->getNumOperands() == 1, "ref metadata must have one operand",
+ &GV, MD);
+ const Metadata *Op = MD->getOperand(0).get();
+ const auto *VM = dyn_cast_or_null<ValueAsMetadata>(Op);
+ Check(VM, "ref metadata must be ValueAsMetadata", GO, MD);
+ if (VM) {
+ Check(isa<PointerType>(VM->getValue()->getType()),
+ "ref value must be pointer typed", GV, MD);
+
+ const Value *Stripped = VM->getValue()->stripPointerCastsAndAliases();
+ Check(isa<GlobalObject>(Stripped) || isa<Constant>(Stripped),
+ "ref metadata must point to a GlobalObject", GO, Stripped);
+ Check(Stripped != GO, "values should not reference themselves", GO,
+ MD);
+ }
+ }
+ }
----------------
nikic wrote:
LangRef says the metadata can only be applied to a definition. If that's correct, the verifier should be enforcing it as well.
https://github.com/llvm/llvm-project/pull/159096
More information about the llvm-commits
mailing list