summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2025-07-30Reduce merge_group CI workload. (#7996)Yong He
* Reduce merge_group CI workload. * fix.
2025-07-30disallow `static const` variables without default-value (#7993)ArielG-NV
* Fix static const variables without initializers causing internal errors Add validation in SemanticsDeclHeaderVisitor::checkVarDeclCommon to detect static const variables without initializers and emit proper error diagnostics instead of allowing internal errors to escape during SPIR-V generation. - Add new diagnostic (ID 31225) for static const variables without initializers - Skip validation for extern static const variables - Skip validation for interface member variables - Add comprehensive test case covering various scenarios Fixes #7989 Co-authored-by: ArielG-NV <ArielG-NV@users.noreply.github.com> * clean up test and implementation * format code (#7994) Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: ArielG-NV <ArielG-NV@users.noreply.github.com> Co-authored-by: slangbot <ellieh+slangbot@nvidia.com> Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
2025-07-30[Language Server]: Don't eagerly check file upon open doc. (#7995)Yong He
2025-07-30Lowering unsupported matrix types for GLSL/WGSL/Metal targets (#7936)venkataram-nv
* Add emit cases for WGSL and GLSL * Fix compilation warnings Modify short cutting test to reflect change in emit logic Lower matrix for metal as well Add emit matrix logic for metal Fix compiler warning Brace initializer for lowered matrices Fix compiler warnings * Tests for metal * Fix mult, any, and determinant * Fix matrix-matrix multiplication * Fix mat mul to be element-wise * Fix compiler warning * Move makeMatrix to legalization * Move unary and binary arithmetic operator lowering to legalization * Remove emit logic and move final comparison operators to legalization * Handle vector/matrix negation for WGSL * Restore older SPIR-V emit logic * Address PR comments * Revert to zero minus for negation * format code --------- Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
2025-07-29Disable more CI workflows on master push. (#7983)Yong He
2025-07-30Disable debug-layers temporarlily on CI (#7972)Jay Kwak
2025-07-29Fix ICE when immutable value is passed to a bwd_diff function. (#7973)Yong He
2025-07-29Fix Metal invalid as_type cast for 64-bit RWByteAddressBuffer.Store values ↵Gangzheng Tong
(#7843) * Fix 64-bit val lowering for metal * Add ByteAddressBuffer load/store 64-bit tests * Handle Store/Load ptr types * Use bitcast for non-pointer typers * format code (#7966) Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> --------- Co-authored-by: slangbot <ellieh+slangbot@nvidia.com> Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
2025-07-29Fix slang-no-embedded-core-module-source embedding core module (#7885)Julius Ikkala
2025-07-29Invoke `clang++` on C++ code instead of `clang` (#7958)Sam Estep
2025-07-29[Language Server]: Show signature help on generic parameters. (#7913)Yong He
* Show signature help on generic parameters. * Fix. * Update tests. * slang-test: make vvl error go through stderr. * update slang-rhi * Update slang-rhi
2025-07-29Detect uses of uninitialized resource fields (#7962)Ellie Hermaszewska
Closes https://github.com/shader-slang/slang/issues/3386
2025-07-29Improve diagnostics over ambiguous references. (#7930)Yong He
* Improve diagnostics over ambiguous references. * Fix. * Remove files. * Fix some optix hitobject intrinsics. * Fix some hitobject intrinsics for optix. * Fix. * update rhi * revert slang-rhi * Update slang-rhi
2025-07-29Fix CUDA backend missing U32_firstbitlow implementation (#7921)Copilot
* Initial plan * Add U32_firstbitlow implementation for CUDA and CPP backends Co-authored-by: bmillsNV <163073245+bmillsNV@users.noreply.github.com> * Add I32_firstbitlow and comprehensive testing for signed/unsigned firstbitlow Co-authored-by: bmillsNV <163073245+bmillsNV@users.noreply.github.com> * Convert firstbitlow test to use inline filecheck syntax Co-authored-by: ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> * Add U32_firstbithigh and I32_firstbithigh implementations for CUDA and CPP backends Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Update prelude/slang-cpp-scalar-intrinsics.h * Update prelude/slang-cpp-scalar-intrinsics.h * Update prelude/slang-cpp-scalar-intrinsics.h * Refactor Metal bit intrinsics to handle zero case correctly Co-authored-by: ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> * Update slang-cuda-prelude.h remove fake links * Update hlsl.meta.slang * if -1, return -1 due to implicit hlsl rule * -1 or 0 is ~0u as per hlsl implictly * 0 or -1 as per hlsl * fix the math to map to hlsl * fix compile error * forgot `31 - clz` * format code (#7943) Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> * Update source/slang/hlsl.meta.slang * Update source/slang/hlsl.meta.slang * Update source/slang/hlsl.meta.slang * Update source/slang/hlsl.meta.slang --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bmillsNV <163073245+bmillsNV@users.noreply.github.com> Co-authored-by: ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> Co-authored-by: ArielG-NV <aglasroth@nvidia.com> Co-authored-by: slangbot <ellieh+slangbot@nvidia.com> Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
2025-07-28Disable automatic `#include` insertion for clangd (#7951)Sam Estep
2025-07-28Fix issue in multi-level break elimination by handling multi-level continue ↵Sai Praveen Bangaru
statements (#7953)
2025-07-28Update slang-rhi to fix CI error on debug. (#7946)Yong He
* Update slang-rhi * Fix profile lookup on `nullptr`. * update rhi
2025-07-27Fix broken links in User Guide (#7938)aidanfnv
* Fix broken links in User Guide * Fix link text with filename, use title
2025-07-27Fix failing CoopVec tests (#7937)Jay Kwak
CPU tests were invalid because CPU target doesn't support float16_t. CUDA tests were failing due to minor precision error.
2025-07-25Fix mesh shader reflection JSON output (#7868)pdeayton-nv
* Fix mesh shader reflection JSON output Fixes issue #7736 where mesh shaders were showing stage "UNKNOWN" and missing type information in reflection JSON output. Changes: - Add missing SLANG_STAGE_MESH and SLANG_STAGE_AMPLIFICATION cases to shader stage switch statements in emitReflectionVarBindingInfoJSON and emitReflectionEntryPointJSON - Add missing MeshOutput to TypeReflection::Kind enum in slang.h - Add missing type kind cases (OutputStream, MeshOutput, Specialized, None) to emitReflectionTypeInfoJSON Testing: - Simple mesh shader now correctly shows "stage": "mesh" instead of "UNKNOWN" - Complex mesh shader with parameters shows proper stage and input type information - Output parameters show "kind": "None" instead of crashing with assertion 🤖 Generated with [Claude Code](https://claude.ai/code) Co-authored-by: pdeayton-nv <pdeayton-nv@users.noreply.github.com> * Remove test files from mesh shader reflection fix As requested, removed test files since there is no testing infrastructure for reflection JSON output. Focus is now only on the core mesh and amplification shader reflection fixes. Co-authored-by: pdeayton-nv <pdeayton-nv@users.noreply.github.com> * Address review comments: move MeshOutput enum to end and restore assert - Move MeshOutput enum member to end of TypeReflection::Kind enum for backward compatibility - Replace fprintf with SLANG_ASSERT for unhandled type kinds Co-authored-by: pdeayton-nv <pdeayton-nv@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: pdeayton-nv <pdeayton-nv@users.noreply.github.com> Co-authored-by: Yong He <yonghe@outlook.com>
2025-07-25Fix nv_viewport_mask semantic to emit SpvBuiltInViewportMaskNV (#7904)davli-nv
Fixes #7903 SPV_NV_viewport_array2 says ViewportMaskNV corresponds to gl_ViewportMask
2025-07-25Fix SLANG_USE_SYSTEM_SPIRV_HEADERS=TRUE (#7916)Ellie Hermaszewska
find_package is locally scoped, so like other find_packages we should do it at the top level Closes https://github.com/shader-slang/slang/issues/7643
2025-07-25Fix for Generic Function Redefinition Error (#7891)Gangzheng Tong
* emit literal values in getTypeNameHint for bool, str etc. * add test for specializing generics with bool literals * fix build error * add specializing with Enum type test
2025-07-25Add combined texture-sampler flag to reflection API to differentiate ↵Copilot
Texture2D from Sampler2D (#7901) * Initial plan * Add SLANG_TEXTURE_COMBINED_FLAG to differentiate combined texture-samplers Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Fix regression in hlsl-to-vulkan-combined test by updating expected output Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
2025-07-25Fix compiler crash when enum is used as vertex output data (#7915)Copilot
* Initial plan * Initial investigation and plan for enum vertex output fix Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Fix compiler crash when enum is used as vertex output data Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Fix compiler crash when enum is used as vertex output data Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Address reviewer feedback: use SLANG_ASSERT and improve CHECK directives Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
2025-07-25Fix SPIRV OpMemberName member indices (#7912)davli-nv
OpMemberName instructions were all using member index 0 instead of incrementing indices (0, 1, 2, ...) as required by the SPIR-V spec. The bug was that the member index increment (id++) was only happening for physical struct types, but OpMemberName emission occurs for all struct types when they have name decorations. This fix ensures member indices are properly incremented for both physical and non-physical struct types. Fixes #7909 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: davli-nv <davli-nv@users.noreply.github.com>
2025-07-25Fix metallib-asm target parsing by adding missing comma (#7902)Jay Kwak
* Fix metallib-asm target parsing by adding missing comma The metallib-asm target was not being recognized from command line because of a syntax error in the target string definition in slang-type-text-util.cpp. A missing comma after the first "metallib-asm" string caused C++ string literal concatenation to create a malformed string. Resolves #7774 Co-authored-by: Jay Kwak <jkwak-work@users.noreply.github.com> * format code (#7910) Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> * regenerate command line reference (#7911) Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> --------- Co-authored-by: Claude Code <claude@anthropic.com> Co-authored-by: Jay Kwak <jkwak-work@users.noreply.github.com> Co-authored-by: slangbot <ellieh+slangbot@nvidia.com> Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
2025-07-24Avoid early specialization for witness tables in SimplifyIR (#7636)Jay Kwak
* Avoid early specialization for witness tables in SimplifyIR Prevents SimplifyIR from prematurely specializing witness tables before the main specialization pass. Witness tables are hoistable immutable objects that must maintain consistent signatures to avoid incorrect deduplication. SimplifyIR was incorrectly transforming expressions like "witness_table_t(%IFoo)(specialize(%7, %GenericValue4))" into "witness_table_t(%IFoo)(%Foo)" even when %GenericValue4 was unused. Fixes #7233 * Add a missing test file
2025-07-24Add test for Metal pointer uniform parameter (#7850)Jay Kwak
* Add test for Metal pointer uniform parameter * Update the test to include runtime result * Adding CUDA to the test * Adding -render-features argument-buffer-tier-2
2025-07-24Organize code better by splitting some big files (#7890)Theresa Foley
* Organize code better by splitting some big files The basic change here is that the majority of the declarations in `slang-compiler.h` have been split out into a set of smaller and more focused files. As a result, the implement of those declarations have been moved from `slang-compiler.cpp` and `slang.cpp` over to those new files when the proper home for code is obvious. I have tried as much as possible to *not* make any edits to the code along the way, and just copy-paste declarations from one place to another as-is. The exceptions I am aware of are: * In some cases a function that used to be file-scope `static` was used by code that landed in two or more different `.cpp` files. In these cases, I changed the function to be non-`static` (removing the `_` prefix from its name, if it had one, per our naming conventions), and put a declaration for the function into the most appropriate header I could identify. * I added a few comments in places where I saw ugly or unfortunate things in the code I was moving, and wanted to tag them with `TODO`s so we can hopefully get to them in the fullness of time. * I added top-level comments to each of the new `.h` files that was introduced to try to explain the logic for what goes into that file. * In cases where one of the new header files mostly existed to declare a single type, I sometimes added more detail to the doc comment on that type, to better explain the type and its role in the compiler (this is text that otherwise might have gone into the comment at the top leve lof the file, but I figured that the doc comment would have higher discoverability). I expect that the most contentious choice here is that the `Session` class lands in `slang-global-session.h` while `slang-session.h` holds the `Linkage` class. The names used in this change are consistent with how the relevant concepts in the public Slang API are named, and are consistent with how we *intend* to rename the classes themselves in time. * format code * fixup --------- Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
2025-07-24Fix confusing error messages for interface return type mismatches (#7854)Copilot
* Initial plan * Add improved diagnostic for interface return type mismatches Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Complete fix for interface return type mismatch error reporting Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Move diagnostic to synthesis phase for better interface return type mismatch errors Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Remove extraneous test file and update .gitignore Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Add diagnostic test for interface return type mismatch and apply formatting Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Address feedback: restore whitespace and use filecheck for diagnostic test Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Fix logic error in return type mismatch detection Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Remove unnecessary flag by using out parameter for diagnostic tracking Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Refactor witness synthesis failure reporting to use structured approach Replace ad-hoc `outSpecificDiagnosticEmitted` parameter with `WitnessSynthesisFailureReason` enum and `MethodWitnessSynthesisFailureDetails` struct as requested in code review. This provides: - Clear taxonomy of failure reasons (General, MethodResultTypeMismatch, MethodParameterMismatch) - Centralized diagnostic emission in findWitnessForInterfaceRequirement - Better extensibility for future failure types - Improved maintainability by removing state tracking flags The return type mismatch diagnostic continues to work correctly, showing error 38106 with precise location information. Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Remove unused MethodParameterMismatch enum and duplicate code Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Remove redundant requiredMethod field from MethodWitnessSynthesisFailureDetails Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Address feedback: add outFailureDetails guard and remove unnecessary hasReturnTypeError variable Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Fix regression: restore original diagnostic message for mutating method mismatch Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Fix. * Fix. * Remove `innerSink`. * Print candidates considered for interface match upon error. * Fix tests. --------- 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>
2025-07-24Include Inst UID in some assert failure messages. (#7882)Yong He
2025-07-24Skip creating transitive witnesses for interface conformances that are ↵aidanfnv
inherited through structs (#7597) * Eliminate null-pointer reference in multilevel struct interface inheritance * Add test * Replace witness nullptr guard with conformance check to skip the witness * Update test * Skip creating transitive witness entirely for struct-struct-interface * format code (#14) Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> * Removes casts, check for identity witness --------- Co-authored-by: slangbot <ellieh+slangbot@nvidia.com> Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
2025-07-24Document how to use LLDB in the Slang codebase (#7809)Sam Estep
* Document how to use LLDB in the Slang codebase * Include `slang_lldb.py` in `.lldbinit` * Switch from GCC to Clang * Include a VS Code task to build before debugging * Fix clangd
2025-07-23Remove unnecessary processing in the release note script (#7884)Jay Kwak
The release note script was trying to retrieve additional label information from the "issue" but when parsing logic is not reliable. When the issue has a link to a repo other than Slang, it printed error message. An example is #7826 that has a link to an external repo, https://github.com/llvm/llvm-project/issues/79043
2025-07-23Add slang-ast files to gitignore (#6901)Ellie Hermaszewska
2025-07-23Update document to include lua build step (#7886)Jay Kwak
2025-07-23Fix MSVC compiler complains about different calling convention between ↵hzqst
interface and impl when building Win32 binaries (#7845) (#7872)
2025-07-23Add LLDB data formatters for Slang IR (#7828)Sam Estep
2025-07-23fix #7869 (#7871)ArielG-NV
2025-07-23Added small section about default values of `struct` members (#7844)Šimon
* Added small section about default values of `struct` members * Added one more example and made `int a` to be brace initilised as well * Implemented suggested changes * Update docs/user-guide/02-conventional-features.md Co-authored-by: Yong He <yonghe@outlook.com> --------- Co-authored-by: Yong He <yonghe@outlook.com>
2025-07-22Fix visibility of synthesized Differential typedefs. (#7865)Yong He
* Fix visibility of synthesized `Differential` typedefs. * Delete incorrect test.
2025-07-22Fix public unscoped enum constants not visible across module boundaries (#7864)Copilot
* Initial plan * Fix public unscoped enum constants visibility across module boundaries Add visibility modifier copying in CompleteDecl for unscoped enum cases. When synthesizing static const declarations for unscoped enum cases, copy the visibility modifiers from the original enum declaration to ensure they have the same visibility scope across module boundaries. Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Create new visibility modifier instances instead of sharing existing ones Address reviewer feedback to avoid sharing modifier instances between declarations since modifiers form a linked list. Now creates new instances of the appropriate visibility modifier type (Public, Private, or Internal) instead of reusing the existing instance. Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Move unscoped enum visibility tests into subdirectory structure Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Use createByNodeType for visibility modifier creation as suggested Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * format code (#7867) Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> --------- 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: slangbot <ellieh+slangbot@nvidia.com> Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
2025-07-22Fix scalar to array conversion for tessellation factors (#7837)Yong He
* Fix scalar to array conversion for tessellation factors in GLSL legalization Add scalar-to-array conversion support in adaptType() function to handle cases where users declare scalar tessellation factors (e.g., float TessLevelInner) but GLSL requires arrays (float[2] for gl_TessLevelInner). This prevents the generation of BuiltinCast instructions that crash the SPIR-V emitter. Fixes crash: "unimplemented: Unhandled local inst in spirv-emit: BuiltinCast" - Add scalar-to-array case in slang-ir-glsl-legalize.cpp adaptType() - Fill all array elements with the scalar value for tessellation factors - Add test case for scalar tessellation factor conversion Fixes #7000 Co-authored-by: Yong He <csyonghe@users.noreply.github.com> * Apply review feedback fixes - Change test directive to TEST:SIMPLE - Use IRArrayType instead of IRArrayTypeBase - Use MakeArrayFromElement for cleaner scalar-to-array conversion Co-authored-by: Yong He <csyonghe@users.noreply.github.com> * Fix type conversion in scalar-to-array tessellation factor conversion Convert scalar value to array element type before creating array to handle cases where scalar type differs from array element type (e.g., int to float[3]). Co-authored-by: Yong He <csyonghe@users.noreply.github.com> * Use CHECK-DAG for order-independent tessellation factor checks Co-authored-by: Yong He <csyonghe@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Yong He <csyonghe@users.noreply.github.com>
2025-07-22Fix segfault when using -separate-debug-info with unsupported targets (#7777)Copilot
* Initial plan * Fix segfault when using -separate-debug-info with unsupported targets Add validation to emit a diagnostic error when -separate-debug-info is used with targets other than SPIR-V binary. Previously, this would cause a segfault because the separate debug info logic is only implemented for SPIR-V targets. Changes: - Added new diagnostic error (ID 18) for unsupported separate debug info usage - Added validation in OptionsParser::_parse() to check target compatibility - Created test cases for HLSL and GLSL targets to verify the fix - Updated error message to clarify only SPIR-V binary targets are supported The fix prevents segfaults and provides clear feedback to users about target limitations for the -separate-debug-info option. Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> * Address feedback: fix segfault properly instead of preventing it Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: csyonghe <2652293+csyonghe@users.noreply.github.com>
2025-07-22Fix crash when private ctor is used for coercion. (#7858)Yong He
* Fix crash when private ctor is used for coercion. * Fix tests. * Fix. * Fix test error.
2025-07-22Fix findFunctionByNameInType to preserve functions with different signatures ↵Copilot
(#7827) findFunctionByNameInType was only returning one function when multiple functions existed with the same name but different signatures. This broke reflection functionality for extension methods. Fix the issue by changing findDeclFromStringInType by not calling maybeResolveOverloadedExpr if checkedTerm is overloaded functions. We still call maybeResolveOverloadedExpr when any candidates in the overloaded list is not DeclRefExpr referencing a function.
2025-07-22Add CI to check ir module versioning (#7821)Ellie Hermaszewska
2025-07-22Add Python type stubs for LLDB (#7826)Sam Estep
2025-07-22Fix Conditioanl<T, false> fields with a semantic. (#7855)Yong He
* Fix Conditioanl<T, false> fields with a semantic. * Add unit test. * Fix test.