Add a no-op builtin function which shouldn't generate code. (#5306)

This is part of a broader plan to have noop destructor functions for
trivial destruction.

Note this emits a SemIR call (`%no_op: init %empty_tuple.type = call
%NoOp.ref() [concrete = constants.%empty_tuple]`), but not LLVM IR. My
thought was this was probably okay, since even though it'll be a little
spammy with destructor calls, the flipside is there'll probably already
be a fair amount for the name reference, and this at least shows when
the call is injected (and discarded).

---------

Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
This commit is contained in:
Jon Ross-Perkins
2025-04-15 00:33:39 +00:00
committed by GitHub
co-authored by Chandler Carruth
parent da83b65aa2
commit b49e89e97e
8 changed files with 256 additions and 2 deletions
+1 -1
View File
@@ -73,7 +73,7 @@ auto CheckFunctionTypeMatches(Context& context,
}
auto CheckFunctionReturnType(Context& context, SemIR::LocId loc_id,
SemIR::Function& function,
const SemIR::Function& function,
SemIR::SpecificId specific_id)
-> SemIR::ReturnTypeInfo {
auto return_info = SemIR::ReturnTypeInfo::ForFunction(context.sem_ir(),