Disallow access to protected members from class scoped randomize constraint blocks -- the LRM is unclear about this but other tools seem to have decided this way made the most sense
Added a check that net aliases aren't duplicated, and that nets don't alias to themselves, as mandated by the LRM (thanks to @likeamahoney)
Implemented remaining rules for virtual interfaces:
Virtual interfaces can't have hierarchical references to objects outside the interface
Virtual interfaces can't have interface ports
Instances assigned to a virtual interface can't have an instance configuration rule applied to them
Potentially Breaking Changes
The minimum supported Xcode version is now 16 and the minimum supported Clang version is now 17 (to allow cleaning up workarounds for various bugs)
New Features
Added -Wudp-coverage which warns about edge-sensitive user-defined primitives that don't specify an output state for all edges of all inputs (thanks to @likeamahoney)
v8.0 - slang Release Notes | AnnounceHQ
Added -Wpacked-array-conv which warns for conversions between different multidimensional packed array types even if their overall bit width is the same
Added -Wcase-type to warn about case statements with mismatching types in their item expressions
Added -Wcase-default which warns about case statements that don't include a default label
Added -Wcase-outside-range which warns for case items that can never be matched because they are outside the range of the case condition expression
Added -Wcase-enum and -Wcase-enum-explicit which warns about enum values that are missing from a case statement (with and without the presence of a default label, respectively)
Added -Wcase-dup which warns about duplicate item expressions in a case statement
Added -Wcase-overlap which warns about overlapping case items (due to wildcard bits)
Added initial support for instance caching, which skips elaborating identical module instances to speed up elaboration. This is currently hidden behind the --disable-instance-caching command line flag because when turned on not all multi-driven errors are properly issued. Once all issues have been worked out the feature will be turned on by default.
Added the ability to output diagnostics to JSON instead of (or in addition to) plain text
Added --translate-off-format which allows specifying comment directives that should act as skipped regions (for example, // pragma translate_off and // pragma translate_on)
slang warnings can now be turned on and off within source code using // slang lint_off style comment directives
Added --ast-json-detailed-types to include detailed type information in AST JSON output
slang-tidy gained a clkNameRegexString option to control how clocks are named (thanks to @spomatasmd)
Improvements
Made -Wuseless-cast a bit less noisy -- it now does not warn about expressions involving genvars or cases where types are matching but one or the other has a different typedef alias name
-Wsign-compare no longer warns about expressions involving genvars
-Wvector-overflow no longer warns about signed literals with binary, octal, or hex bases that place a bit in the MSB
Made some build tweaks to support hermetic builds (thanks to @cc10512)
Added support for unions to slang-reflect (thanks to @Sustrak)
Changed the error issued for sequences that can never be matched to be a warning instead (-Wseq-no-match) and added additional context to the diagnostic message
Made minor tweaks to improve defparam and bind resolution performance
-Wsign-conversion will no longer warn for certain system functions that have a return type of int but in practice only return a single bit result
Made some minor improvements to parser error recovery when struct definitions are missing a closing brace
Inline genvars declared in generate loops are now included in the generate loop's members list when serializing the AST
The pyslang packaging build is now done in this repo instead of a separate downstream repo (thanks to @parker-research)
pyslang wheels now include support for arm64 (thanks to @gadfort)
Documentation now includes the READMEs for the various ancillary slang tools
Added stub generation to the Python distribution (thanks to @parker-research)
Fixes
Fixed a bug with constant evaluation of left-hand side assignment patterns that require implicit conversions to be applied
Fixed the locations returned by Trivia::getExplicitLocation for nested trivia involving directives (thanks to @povik)
Fixed checking of illegal property negation operator when used within recursive property instantiations (thanks to @likeamahoney)
Fixed a bug with serializing UninstantiatedDef AST nodes that use implicit named port connections
Fixed a crash when checking duplicate drivers in assignments to invalid ranges of a vector
Correctly allow unpacked unions to be used in equality and conditional expressions
Fixed spurious warnings inside an unused generic class that instantiates the default specialization of itself
Fixed Python bindings build to work with Python 3.13 (thanks to @vowstar)
Fixed a spurious error when assigning the empty queue to an unresolved / unknown typed variable
Correctly disallow override specifiers on class constructor declarations
Correctly report an error for unbased unsized literals that use a ? instead of a z character for high impedance
Fixed handling of connections of interface arrays to ports with different declared dimensions
Fixed a bug in constant evaluation of packed struct member access
Correctly disallow select expressions of a parenthesized subexpression
Fixed a bug where some type declarations in two modules with different parameter values could be erroneously considered equivalent to each other (thanks to @povik)
Correctly disallow derived class virtual methods from declaring a different visibility level from their base class method
Reworked how enum types are implemented to fix various issues related to enum values declared inside subexpressions from being visible to their surrounding scopes
Fixed several issues related to enum value initializers that try to refer to themselves or other enum values
Fixed a parser crash when an invalid class override specifier is at the very end of a file
Fixed a potentially unbounded loop when resolving a specific case of invalid bind directives
Fixed bad diagnostic output related to instantiating properties with missing formal argument names
Fixed several minor issues with the Python bindings (thanks to @parker-research)
Fixed bugs with pattern variables not being visible in certain scopes where they otherwise should have been
Pattern variables are now properly usable from static variable initializer expressions
$sformat in constant expressions now works properly with %p specifiers
Fixed -Wwidth-expand to apply to conditional expressions
Fixed [*] and ##[*] sequence repetitions to start from 0 instead of 1 (thanks to @georgerennie)
Fixed a case where nested attributes were not properly diagnosed (thanks to @likeamahoney)
Fixed type resolution for expressions involving static casts; previously the operand of the cast was considered self determined, but now the type of the cast is correctly propagated to the operand
Fixed a bug in SyntaxNode::isEquivalentTo which would cause it to sometimes return the wrong result
Fixed the direction of argument binding for n-output gate terminals