return 0 from Run when it doesn't specify a return value (#7180)

https://carbon.compiler-explorer.com/z/88K9Kh5Wo shows the program
exiting with a garbage value copied from uninitialized memory.

This PR modifies `lower` to detect if the function lowered is the
entry point and doesn't specify a return type. If so, it emits
different LLVM IR to return int32 0, and modifies the lowered
function signature to match the int32 return type.
This commit is contained in:
Lucile Rose Nihlen
2026-05-08 19:00:47 +00:00
committed by GitHub
parent 3e36f7d43c
commit bc1ae703c3
22 changed files with 618 additions and 444 deletions
+3 -3
View File
@@ -548,9 +548,9 @@ auto FileContext::BuildFunctionBody(SemIR::FunctionId function_id,
auto* subprogram = BuildDISubprogram(declaration_function, *function_info);
FunctionContext function_lowering(
definition_context, function_info->llvm_function, *this, specific_id,
coalescer_.InitializeFingerprintForSpecific(specific_id), subprogram,
vlog_stream_);
definition_context, function_info->llvm_function, *this, function_id,
specific_id, coalescer_.InitializeFingerprintForSpecific(specific_id),
subprogram, vlog_stream_);
auto call_param_ids = definition_ir.inst_blocks().GetOrEmpty(
definition_function.call_params_id);