From ed837e205f3e67c4ae112f544cfe486ca3cc8455 Mon Sep 17 00:00:00 2001 From: Mukund Keshava Date: Thu, 15 May 2025 14:45:43 +0530 Subject: Rename 'main' on some backends (#7105) * Rename 'main' on some backednds Fixes #5542 Some backends like cuda, metal, cpu do not allow 'main' as the entry point. This commit adds a new warning that is emitted when a program uses main as the entry point. In addition to emitting the warning, it internally renames the entry point to "main_". It also adds a test to check these for the three backends. * format code * move test to diagnostics * rename test to diagnostic * generate unique name --------- Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> --- source/slang/slang-emit-c-like.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'source/slang/slang-emit-c-like.cpp') diff --git a/source/slang/slang-emit-c-like.cpp b/source/slang/slang-emit-c-like.cpp index 141a843f2..b2dc9b014 100644 --- a/source/slang/slang-emit-c-like.cpp +++ b/source/slang/slang-emit-c-like.cpp @@ -1109,9 +1109,25 @@ void CLikeSourceEmitter::appendScrubbedName(const UnownedStringSlice& name, Stri } } +inline String CLikeSourceEmitter::maybeMakeEntryPointNameValid(String name, DiagnosticSink* sink) +{ + if (isCPUTarget(getTargetReq()) || isCUDATarget(getTargetReq()) || + isMetalTarget(getTargetReq())) + { + if (name == "main") + { + String newName = _generateUniqueName(name.getUnownedSlice()); + sink->diagnose(SourceLoc(), Diagnostics::mainEntryPointRenamed, name, newName); + return newName; + } + } + return name; +} + String CLikeSourceEmitter::generateEntryPointNameImpl(IREntryPointDecoration* entryPointDecor) { - return entryPointDecor->getName()->getStringSlice(); + String name = entryPointDecor->getName()->getStringSlice(); + return maybeMakeEntryPointNameValid(name, getSink()); } String CLikeSourceEmitter::_generateUniqueName(const UnownedStringSlice& name) -- cgit v1.2.3