Implement a mechanism to verify patches before applying them to a function call site. The patch must match the expected argument count, argument types, and return type. The task includes:
- Extract function arguments, argument types, and return type from ClangIR representation.
- Validate that the patch definition matches the function signature before insertion.
- Handle type conversions and pointer types to ensure compatibility.
- Ensure correct rewriting of function calls when inserting patches.