From 8c975eac34347aec1911a90ca07926f1d6325d8a Mon Sep 17 00:00:00 2001 From: Thomas Preud'homme Date: Tue, 17 May 2022 11:47:43 +0100 Subject: [PATCH] Assert on polymorphic pointer intrinsic param Opaque pointers cannot be polymorphic on the pointed type given their lack thereof. However they are currently accepted by tablegen but the intrinsic signature verifier trips when verifying any further polymorphic type because the opaque pointer codepath for pointers will not push the pointed type in ArgTys. This commit adds an assert to easily catch such cases instead of having the generic signature match failure. Reviewed By: #opaque-pointers, nikic Differential Revision: https://reviews.llvm.org/D125764 --- llvm/lib/IR/Function.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/llvm/lib/IR/Function.cpp b/llvm/lib/IR/Function.cpp index 87a0770..c7186a7 100644 --- a/llvm/lib/IR/Function.cpp +++ b/llvm/lib/IR/Function.cpp @@ -1495,6 +1495,9 @@ static bool matchIntrinsicType( while (Infos.front().Kind == IITDescriptor::Pointer || Infos.front().Kind == IITDescriptor::Vector) Infos = Infos.slice(1); + assert((Infos.front().Kind != IITDescriptor::Argument || + Infos.front().getArgumentKind() == IITDescriptor::AK_MatchType) && + "Unsupported polymorphic pointer type with opaque pointer"); Infos = Infos.slice(1); return false; } -- 2.7.4