From c7c4816146bb9ec055e9a8f8c3f975624f2fdb07 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 8 Aug 2025 00:34:05 +0000 Subject: Fix FunctionReflection getName() returning null for overloaded functions (#8113) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When using Slang reflection API to find functions by name in a type, `FunctionReflection::getName()` would return `nullptr` for overloaded functions instead of the expected function name. The issue occurred in `spReflectionFunction_GetName` when `findFunctionByNameInType` returned a `SlangReflectionFunction` wrapping an `OverloadedExpr` (for overloaded functions) instead of a single `DeclRef`. The `convertToFunc()` function would fail for `OverloadedExpr` objects, causing `getName()` to return `nullptr`. **Example of the bug:** ```cpp // This code would fail before the fix public interface IBase { public void step(inout float f); } public struct Impl : IBase { public void step(inout float f) { f += 1.0f; } } // Using reflection API: auto implType = reflection->findTypeByName("Impl"); auto stepFunction = reflection->findFunctionByNameInType(implType, "step"); auto name = stepFunction->getName(); // Would return nullptr ``` **Fix:** Modified `spReflectionFunction_GetName` to handle overloaded functions by falling back to the name of the first overload candidate when `convertToFunc` fails. This follows the same pattern already used by `spReflectionFunction_specializeWithArgTypes`. The fix ensures that: - Overloaded function containers return the correct function name - Individual overload candidates also return their names correctly - Non-overloaded functions continue to work as before - No regression in existing functionality **Testing:** Added comprehensive test cases covering both the original issue scenario and explicit function overloading. All existing reflection tests continue to pass. Fixes #8047. --- 💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more [Copilot coding agent tips](https://gh.io/copilot-coding-agent-tips) in the docs. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> Co-authored-by: Yong He Co-authored-by: ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> Co-authored-by: slangbot Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> --- tools/slang-unit-test/unit-test-function-lookup-resolution.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'tools') diff --git a/tools/slang-unit-test/unit-test-function-lookup-resolution.cpp b/tools/slang-unit-test/unit-test-function-lookup-resolution.cpp index 539c9ac48..c88ca7760 100644 --- a/tools/slang-unit-test/unit-test-function-lookup-resolution.cpp +++ b/tools/slang-unit-test/unit-test-function-lookup-resolution.cpp @@ -75,6 +75,9 @@ SLANG_UNIT_TEST(functionLookupResolution) auto func1 = layout->findFunctionByNameInType(type, "method"); SLANG_CHECK_ABORT(func1->isOverloaded()); SLANG_CHECK(func1->getOverloadCount() == 3); + // Test that overloaded function containers return the correct name + SLANG_CHECK(func1->getName() != nullptr); + SLANG_CHECK(String(func1->getName()) == "method"); if (func1->isOverloaded()) { List candidates; -- cgit v1.2.3