================
@@ -18,6 +21,87 @@ mlir::MLIRContext &CIRGenTypes::getMLIRContext() const {
   return *builder.getContext();
 }
 
+/// Return true if the specified type in a function parameter or result 
position
+/// can be converted to a CIR type at this point. This boils down to being
+/// whether it is complete, as well as whether we've temporarily deferred
+/// expanding the type because we're in a recursive context.
+bool CIRGenTypes::isFuncParamTypeConvertible(clang::QualType type) {
+  // Some ABIs cannot have their member pointers represented in LLVM IR unless
+  // certain circumstances have been reached.
+  assert(!type->getAs<MemberPointerType>() && "NYI");
+
+  // If this isn't a tagged type, we can convert it!
----------------
dkolsen-pgi wrote:

I disagree about this one.  If the source code uses a vector type as the type 
of a function parameter, ClangIR code gen will fail with a NYI error in 
`CIRGenTypes::convertType` when trying to convert the Clang vector type into a 
CIR type.  There isn't a good reason to add a general-purpose check here in a 
function that is looking for a very specific condition that has only to do with 
function types.

Maybe this function should be renamed to 
`isConvertedTypeUsableInFunctionTypes`, to emphasize that it is not checking if 
a type is convertible, but checking whether or not a type is problematic if 
used as a return type or a parameter type within a function type.

https://github.com/llvm/llvm-project/pull/120484
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to