追加質問です。
llvm のソースの中に、以下の様に、
配置 new に似ていてもそれとは違うような new 演算子の使用方法が
有りますが、分かる人いますか? 例えば、
new (2) CatchReturnInst(CatchPad, BB, InsertBefore);
は、配置 new の new (p) T(引数列) に似ていますが、
p の位置は、アドレスを指定することになっているのに、
「2」という整数値を指定しています。

llvm-project-main/llvm/include/llvm/IR/Instructions.h

class CatchPadInst : public FuncletPadInst {・・・}
の中の
 static CatchPadInst *Create(Value *CatchSwitch, ArrayRef<Value *> Args,
               const Twine &NameStr = "",
               Instruction *InsertBefore = nullptr) {
  unsigned Values = 1 + Args.size();
  return new (Values)
    CatchPadInst(CatchSwitch, Args, Values, NameStr, InsertBefore);
 }

class CatchReturnInst : public Instruction {・・・}
の中の
 static CatchReturnInst *Create(Value *CatchPad, BasicBlock *BB,
                 Instruction *InsertBefore = nullptr) {
  assert(CatchPad);
  assert(BB);
  return new (2) CatchReturnInst(CatchPad, BB, InsertBefore);
 }