================ @@ -3794,28 +3821,37 @@ void CodeGenFunction::EmitCheck( // representing operand values. SmallVector<llvm::Value *, 4> Args; SmallVector<llvm::Type *, 4> ArgTypes; - if (!CGM.getCodeGenOpts().SanitizeMinimalRuntime) { - Args.reserve(DynamicArgs.size() + 1); - ArgTypes.reserve(DynamicArgs.size() + 1); - - // Emit handler arguments and create handler function type. - if (!StaticArgs.empty()) { - llvm::Constant *Info = llvm::ConstantStruct::getAnon(StaticArgs); - auto *InfoPtr = new llvm::GlobalVariable( - CGM.getModule(), Info->getType(), false, - llvm::GlobalVariable::PrivateLinkage, Info, "", nullptr, - llvm::GlobalVariable::NotThreadLocal, - CGM.getDataLayout().getDefaultGlobalsAddressSpace()); - InfoPtr->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global); - CGM.getSanitizerMetadata()->disableSanitizerForGlobal(InfoPtr); - Args.push_back(InfoPtr); - ArgTypes.push_back(Args.back()->getType()); - } - for (llvm::Value *DynamicArg : DynamicArgs) { - Args.push_back(EmitCheckValue(DynamicArg)); - ArgTypes.push_back(IntPtrTy); - } + SmallVector<llvm::Constant *, 4> HandlerStaticArgs; ---------------- vitalybuka wrote:
``` static std::pair<ArrayRef<llvm::Constant *>, ArrayRef<llvm::Value *>> AdaptArgsToHandler(CodeGenModule &CGM, SanitizerHandler CheckHandler, ArrayRef<llvm::Constant *> StaticArgs, ArrayRef<llvm::Value *> DynamicArgs) { if (!CGM.getCodeGenOpts().SanitizeMinimalRuntime) return {StaticArgs, DynamicArgs}; switch (CheckHandler) { case SanitizerHandler::TypeMismatch: // Pass value pointer only. It adds minimal overhead. assert(DynamicArgs.size() == 1); return {{}, DynamicArgs}; default: // No arguments for other checks. return {}; } } ``` ``` std::tie(StaticArgs, DynamicArgs) = AdaptArgsToHandler(CGM, CheckHandler, StaticArgs, DynamicArgs); ``` Looks nicer to me? https://github.com/llvm/llvm-project/pull/152192 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits