summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorCopilot <198982749+Copilot@users.noreply.github.com>2025-08-08 00:34:05 +0000
committerGitHub <noreply@github.com>2025-08-08 00:34:05 +0000
commitc7c4816146bb9ec055e9a8f8c3f975624f2fdb07 (patch)
treea18bc755bf281e31b228df1a37db7c3752d2db12 /tools
parente595743b5aa4f6bd88800cfbcfd6eead3cc3d01b (diff)
Fix FunctionReflection getName() returning null for overloaded functions (#8113)
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<FunctionDeclBase>`. 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. <!-- START COPILOT CODING AGENT TIPS --> --- 💡 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 <yonghe@outlook.com> Co-authored-by: ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> Co-authored-by: slangbot <ellieh+slangbot@nvidia.com> Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/slang-unit-test/unit-test-function-lookup-resolution.cpp3
1 files changed, 3 insertions, 0 deletions
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<slang::FunctionReflection*> candidates;