Răsfoiți Sursa

Assert that the llvm::Function is created with the same name as requested (#4306)

This will catch some cases of bugs in the name mangling logic - if
within a single file we incorrectly mangle two distinct entities to the
same name, llvm::Function will assign a new name to the second copy
showing one of the two entities should have a distinct name/is missing
something in their mangling.
David Blaikie 1 an în urmă
părinte
comite
ec63d2be21
1 a modificat fișierele cu 3 adăugiri și 0 ștergeri
  1. 3 0
      toolchain/lower/file_context.cpp

+ 3 - 0
toolchain/lower/file_context.cpp

@@ -249,6 +249,9 @@ auto FileContext::BuildFunctionDecl(SemIR::FunctionId function_id)
       llvm::Function::Create(function_type, llvm::Function::ExternalLinkage,
       llvm::Function::Create(function_type, llvm::Function::ExternalLinkage,
                              mangled_name, llvm_module());
                              mangled_name, llvm_module());
 
 
+  CARBON_CHECK(llvm_function->getName() == mangled_name,
+               "Mangled name collision: {0}", mangled_name);
+
   // Set up parameters and the return slot.
   // Set up parameters and the return slot.
   for (auto [inst_id, arg] :
   for (auto [inst_id, arg] :
        llvm::zip_equal(param_inst_ids, llvm_function->args())) {
        llvm::zip_equal(param_inst_ids, llvm_function->args())) {