diff --git a/lib/IR/Value.cpp b/lib/IR/Value.cpp index 295d6ecf0db0338b9d45e8d5d087ac0754caa67e..5723cd63271ccf33496fc5628df8479c75cb8386 100644 --- a/lib/IR/Value.cpp +++ b/lib/IR/Value.cpp @@ -293,6 +293,15 @@ void Value::setNameImpl(const Twine &NewName) { } void Value::setName(const Twine &NewName) { + // Prevent basic blocks without name + if (BasicBlock *BB = dyn_cast<BasicBlock>(this)) + if (NewName.isTriviallyEmpty()) { + static int unnamedCounter = 0; + std::string bbName = "unnamed_BB_" + std::to_string(unnamedCounter++); + setNameImpl(bbName); + return; // Asumption: we are not a function if we are a basic block + } + setNameImpl(NewName); if (Function *F = dyn_cast<Function>(this)) F->recalculateIntrinsicID();