diff options
| author | Yong He <yonghe@outlook.com> | 2025-07-10 21:11:46 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-11 04:11:46 +0000 |
| commit | 7764b83d24d341334ca7c1693cae2472be8f8d99 (patch) | |
| tree | 50ed4779a43bbe52798340c67c5d83bb30ba792b | |
| parent | 0ddb2fcbbaa5387990c8812341fbe8e2848f8989 (diff) | |
Fix issue in match parameter type that depend on an associatedtype. (#7707)
| -rw-r--r-- | source/slang/slang-check-decl.cpp | 2 | ||||
| -rw-r--r-- | tests/language-feature/interfaces/assoctype-param.slang | 32 |
2 files changed, 33 insertions, 1 deletions
diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp index 847f296bb..7cd1d7df8 100644 --- a/source/slang/slang-check-decl.cpp +++ b/source/slang/slang-check-decl.cpp @@ -4407,7 +4407,7 @@ bool SemanticsVisitor::doesGenericSignatureMatchRequirement( auto satisfyingWitness = m_astBuilder->getDeclaredSubtypeWitness( getSub(m_astBuilder, satisfyingConstraintDeclRef), getSup(m_astBuilder, satisfyingConstraintDeclRef), - satisfyingConstraintDeclRef); + satisfyingConstraintDeclRef.getDecl()); requiredSubstArgs.add(satisfyingWitness); } diff --git a/tests/language-feature/interfaces/assoctype-param.slang b/tests/language-feature/interfaces/assoctype-param.slang new file mode 100644 index 000000000..f2572484e --- /dev/null +++ b/tests/language-feature/interfaces/assoctype-param.slang @@ -0,0 +1,32 @@ +//TEST:INTERPRET(filecheck=CHECK): + +public interface IDataTrait { + public associatedtype InputType; + public static const int32_t kElementCount; +} + +public struct DataTrait0 : IDataTrait { + public typedef float InputType; + public static const int32_t kElementCount = 2; +} + +public interface IGenericInterface<Ti : IFloat> { + public Array<Di.InputType, Di.kElementCount> eval<Di : IDataTrait>(const Di.InputType interface_input); +} + +public struct GenericImpl<T : IFloat> : IGenericInterface<T> +{ + public Array<Dx.InputType, Dx.kElementCount> eval<Dx : IDataTrait>( + const Dx.InputType impl_input) + { + return makeArrayFromElement<Dx.InputType, Dx.kElementCount>(impl_input); + } +} + +void main() +{ + GenericImpl<float> f; + let rs = f.eval<DataTrait0>(1.0); + printf("result is %f\n", rs[0]); + // CHECK: result is 1.0 +} |
