Commit 81cfb90f authored by Craig Topper's avatar Craig Topper
Browse files

[IR] Add a few asserts to provide a better failure signature if you try to...

[IR] Add a few asserts to provide a better failure signature if you try to create a load/store/alloca with no alignment or insertion position

If no alignment is specified we try to find the datalayout by using the insert position to get the module so we can get the datalayout. But if those are null, then we deference a null pointer.

This patch adds asserts to make the failure a little more obvious than just seg faulting.

Differential Revision: https://reviews.llvm.org/D83829
parent 71292379
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -1262,11 +1262,15 @@ static Value *getAISize(LLVMContext &Context, Value *Amt) {
}

static Align computeAllocaDefaultAlign(Type *Ty, BasicBlock *BB) {
  assert(BB && "Insertion BB cannot be null when alignment not provided!");
  assert(BB->getParent() &&
         "BB must be in a Function when alignment not provided!");
  const DataLayout &DL = BB->getModule()->getDataLayout();
  return DL.getPrefTypeAlign(Ty);
}

static Align computeAllocaDefaultAlign(Type *Ty, Instruction *I) {
  assert(I && "Insertion position cannot be null when alignment not provided!");
  return computeAllocaDefaultAlign(Ty, I->getParent());
}

@@ -1342,11 +1346,15 @@ void LoadInst::AssertOK() {
}

static Align computeLoadStoreDefaultAlign(Type *Ty, BasicBlock *BB) {
  assert(BB && "Insertion BB cannot be null when alignment not provided!");
  assert(BB->getParent() &&
         "BB must be in a Function when alignment not provided!");
  const DataLayout &DL = BB->getModule()->getDataLayout();
  return DL.getABITypeAlign(Ty);
}

static Align computeLoadStoreDefaultAlign(Type *Ty, Instruction *I) {
  assert(I && "Insertion position cannot be null when alignment not provided!");
  return computeLoadStoreDefaultAlign(Ty, I->getParent());
}