CreateSecStartEnd() will return pointer to the input type, so when called with CreateSecStartEnd(M, SanCovCFsSectionName, IntptrPtrTy), SecStartEnd.first and SecStartEnd.second will have type IntptrPtrPtrTy, not IntptrPtrTy.
This problem should not impact the functionality and with opaque pointer enable, this will not trigger any alarm. But if runs with -no-opaque-pointers, this mismatch pointer type will cause type check assertion in CallInst::init() to fail.