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
+4 -1
View File
@@ -16,12 +16,15 @@ namespace Carbon::Lower {
FunctionContext::FunctionContext(
FileContext& file_context, llvm::Function* function,
FileContext& specific_file_context, SemIR::SpecificId specific_id,
FileContext& specific_file_context,
SemIR::FunctionId specific_sem_ir_function_id,
SemIR::SpecificId specific_id,
SpecificCoalescer::SpecificFunctionFingerprint* function_fingerprint,
llvm::DISubprogram* di_subprogram, llvm::raw_ostream* vlog_stream)
: file_context_(&file_context),
function_(function),
specific_file_context_(&specific_file_context),
specific_sem_ir_function_id_(specific_sem_ir_function_id),
specific_id_(specific_id),
builder_(file_context.llvm_context(), llvm::ConstantFolder(),
Inserter(file_context.inst_namer())),