diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp --- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp +++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp @@ -201,7 +201,8 @@ void finish() override { for (auto *Sym : UpdateOther) - copyLocalEntry(Sym, Sym->getVariableValue()); + if (Sym->isVariable()) + copyLocalEntry(Sym, Sym->getVariableValue()); } private: diff --git a/llvm/test/MC/PowerPC/ppc64-localentry-symbols.s b/llvm/test/MC/PowerPC/ppc64-localentry-symbols.s --- a/llvm/test/MC/PowerPC/ppc64-localentry-symbols.s +++ b/llvm/test/MC/PowerPC/ppc64-localentry-symbols.s @@ -32,3 +32,8 @@ nop nop .localentry func, 8 + +## PR44284 Don't crash if err is redefined after .set +.set err, _err +.globl err +err: