diff --git a/artiq/compiler/transforms/llvm_ir_generator.py b/artiq/compiler/transforms/llvm_ir_generator.py index 0c0d532cd..c59e16689 100644 --- a/artiq/compiler/transforms/llvm_ir_generator.py +++ b/artiq/compiler/transforms/llvm_ir_generator.py @@ -655,8 +655,11 @@ class LLVMIRGenerator: def process_SetLocal(self, insn): env = insn.environment() - llptr = self.llptr_to_var(self.map(env), env.type, insn.var_name) llvalue = self.map(insn.value()) + if isinstance(llvalue.type, ll.VoidType): + # We store NoneType as {} but return it as void. So, bail out here. + return ll.Constant(ll.LiteralStructType([]), []) + llptr = self.llptr_to_var(self.map(env), env.type, insn.var_name) if isinstance(llvalue, ll.Block): llvalue = ll.BlockAddress(self.llfunction, llvalue) if llptr.type.pointee != llvalue.type: diff --git a/artiq/test/lit/codegen/assign_none.py b/artiq/test/lit/codegen/assign_none.py new file mode 100644 index 000000000..000e87ac7 --- /dev/null +++ b/artiq/test/lit/codegen/assign_none.py @@ -0,0 +1,6 @@ +# RUN: %python -m artiq.compiler.testbench.llvmgen %s + +def f(): + pass +def g(): + a = f()