Index: llvm/lib/IR/AutoUpgrade.cpp =================================================================== --- llvm/lib/IR/AutoUpgrade.cpp +++ llvm/lib/IR/AutoUpgrade.cpp @@ -4453,12 +4453,16 @@ } MDNode *llvm::UpgradeTBAANode(MDNode &MD) { + const unsigned NumOperands = MD.getNumOperands(); + if (NumOperands == 0) + return nullptr; + // Check if the tag uses struct-path aware TBAA format. - if (isa(MD.getOperand(0)) && MD.getNumOperands() >= 3) + if (isa(MD.getOperand(0)) && NumOperands >= 3) return &MD; auto &Context = MD.getContext(); - if (MD.getNumOperands() == 3) { + if (NumOperands == 3) { Metadata *Elts[] = {MD.getOperand(0), MD.getOperand(1)}; MDNode *ScalarType = MDNode::get(Context, Elts); // Create a MDNode Index: llvm/test/Bitcode/tbaa-empty-arg-autoupgrade-crash.ll =================================================================== --- /dev/null +++ llvm/test/Bitcode/tbaa-empty-arg-autoupgrade-crash.ll @@ -0,0 +1,11 @@ +; RUN: llvm-as -o - < %s | llvm-dis | FileCheck %s + +; Test there's no crash if tbaa has an empty argument. +; CHECK: store i32 %arg0, ptr addrspace(1) %arg1, align 4{{$}} + +define void @tbaa_empty_arg(i32 %arg0, ptr addrspace(1) %arg1) { + store i32 %arg0, ptr addrspace(1) %arg1, align 4, !tbaa !0 + ret void +} + +!0 = !{}