================
@@ -3717,6 +3717,33 @@ static void emitCheckHandlerCall(CodeGenFunction &CGF,
   }
 }
 
+// Adapts the arguments to the handler function.
+// It is expected that {StaticArgs..., DynamicArgs...} sequence matches the
+// corresponding XxxData type from the ubsan_handlers.h file.
+// Minimal hadler can use a subset of the arguments.
+static void
+AdaptArgsToHandler(CodeGenModule &CGM, SanitizerHandler CheckHandler,
+                   ArrayRef<llvm::Constant *> StaticArgs,
+                   ArrayRef<llvm::Value *> DynamicArgs,
+                   SmallVectorImpl<llvm::Constant *> &HandlerStaticArgs,
+                   SmallVectorImpl<llvm::Value *> &HandlerDynamicArgs) {
+  if (!CGM.getCodeGenOpts().SanitizeMinimalRuntime) {
+    HandlerStaticArgs.assign(StaticArgs.begin(), StaticArgs.end());
+    HandlerDynamicArgs.assign(DynamicArgs.begin(), DynamicArgs.end());
+    return;
+  }
+
+  switch (CheckHandler) {
+  case SanitizerHandler::TypeMismatch:
+    // Pass value pointer only. It adds minimal overhead.
+    HandlerDynamicArgs.assign(DynamicArgs.begin(), DynamicArgs.end());
----------------
alazarev wrote:

Done

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

Reply via email to