[SanitizerCoverage] Fix wrong pointer type return from CreateSecStartEnd()
authorWu, Yingcong <yingcong.wu@intel.com>
Thu, 10 Nov 2022 07:29:04 +0000 (23:29 -0800)
committerFangrui Song <i@maskray.me>
Thu, 10 Nov 2022 07:29:04 +0000 (23:29 -0800)
`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.

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D137310

llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp

index 5cfa520..697eacf 100644 (file)
@@ -522,7 +522,7 @@ bool ModuleSanitizerCoverage::instrumentModule(
   }
 
   if (Ctor && Options.CollectControlFlow) {
-    auto SecStartEnd = CreateSecStartEnd(M, SanCovCFsSectionName, IntptrPtrTy);
+    auto SecStartEnd = CreateSecStartEnd(M, SanCovCFsSectionName, IntptrTy);
     FunctionCallee InitFunction = declareSanitizerInitFunction(
         M, SanCovCFsInitName, {IntptrPtrTy, IntptrPtrTy});
     IRBuilder<> IRBCtor(Ctor->getEntryBlock().getTerminator());