[clang] [CIR] Cleanup support for C functions (PR #136854)

Andy Kaylor via cfe-commits cfe-commits at lists.llvm.org
Wed Apr 23 10:49:28 PDT 2025


================
@@ -13,20 +13,76 @@
 
 #include "CIRGenCall.h"
 #include "CIRGenFunction.h"
+#include "CIRGenFunctionInfo.h"
 #include "clang/CIR/MissingFeatures.h"
 
 using namespace clang;
 using namespace clang::CIRGen;
 
-CIRGenFunctionInfo *CIRGenFunctionInfo::create(CanQualType resultType) {
-  void *buffer = operator new(totalSizeToAlloc<ArgInfo>(1));
+CIRGenFunctionInfo *
+CIRGenFunctionInfo::create(CanQualType resultType,
+                           llvm::ArrayRef<CanQualType> argTypes,
+                           RequiredArgs required) {
+  void *buffer = operator new(totalSizeToAlloc<ArgInfo>(argTypes.size() + 1));
 
   CIRGenFunctionInfo *fi = new (buffer) CIRGenFunctionInfo();
+
+  fi->required = required;
+  fi->numArgs = argTypes.size();
   fi->getArgsBuffer()[0].type = resultType;
+  for (unsigned i = 0; i < argTypes.size(); ++i)
+    fi->getArgsBuffer()[i + 1].type = argTypes[i];
----------------
andykaylor wrote:

Can you get the args buffer before the loop? The optimizer would probably do that for you, but I'd prefer to have it in the code that way.

It's also probably worth adding a comment explaining why the args buffer is one element larger than the arg types buffer. There's enough info here to figure that out, but it looks wrong on first reading.

https://github.com/llvm/llvm-project/pull/136854


More information about the cfe-commits mailing list