github MikePopoloski/slang v8.0

latest releases: v10.0, v9.1, v9.0...
13 months ago

Language Support

  • 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)
  • Added -Wpacked-array-conv which warns for conversions between different multidimensional packed array types even if their overall bit width is the same
  • Added the -Wparentheses warning group for diagnosing common precedence-related syntactical errors, which includes the following new warnings: -Wbitwise-rel-precedence, -Warith-in-shift, -Wlogical-not-parentheses, -Wbitwise-op-parentheses, -Wlogical-op-parentheses, -Wconditional-precedence, -Wconsecutive-comparison
  • 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 -Wcase-not-wildcard and -Wcasez-with-x which warn about potentially misleading wildcard bits in non-wildcard case statements
  • 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

Don't miss a new slang release

NewReleases is sending notifications on new releases.