[clang] [CIR] Better handling of `void` function return (PR #128089)
Bruno Cardoso Lopes via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 24 10:45:02 PST 2025
================
@@ -273,29 +273,36 @@ def CIR_PointerType : CIR_Type<"Pointer", "ptr",
def CIR_FuncType : CIR_Type<"Func", "func"> {
let summary = "CIR function type";
let description = [{
- The `!cir.func` is a function type. It consists of a single return type, a
- list of parameter types and can optionally be variadic.
+ The `!cir.func` is a function type. It consists of an optional return type,
+ a list of parameter types and can optionally be variadic.
Example:
```mlir
+ !cir.func<()>
!cir.func<!bool ()>
+ !cir.func<(!s8i, !s8i)>
!cir.func<!s32i (!s8i, !s8i)>
!cir.func<!s32i (!s32i, ...)>
```
}];
let parameters = (ins ArrayRefParameter<"mlir::Type">:$inputs,
- "mlir::Type":$returnType, "bool":$varArg);
+ "mlir::Type":$optionalReturnType, "bool":$varArg);
+ // Use a custom parser to handle the optional return and argument types
+ // without an optional anchor.
let assemblyFormat = [{
- `<` $returnType ` ` `(` custom<FuncTypeArgs>($inputs, $varArg) `>`
+ `<` custom<FuncType>($optionalReturnType, $inputs, $varArg) `>`
}];
let builders = [
+ // Construct with an actual return type or explicit !cir.void
----------------
bcardosolopes wrote:
Even in the incubator it should be fine to remove the compatibility given that I don't know any users loading/emitting old CIR
https://github.com/llvm/llvm-project/pull/128089
More information about the cfe-commits
mailing list