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();