From 755c45ca48348bf05007e7d9672004d371c0eab8 Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Fri, 26 Jan 2024 13:01:07 +0100 Subject: [PATCH] Deprecate &bit-order on bit ranges. This does not appear to have any effect and allowing it may be confusing to users. Deprecate it with the idea of eventual removal. --- .../src/compiler/visitors/validator.cc | 9 +++++++++ .../spicy.types.bitfield.bit-bitorder/output | 3 +++ tests/spicy/types/bitfield/bit-bitorder.spicy | 17 +++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 tests/Baseline/spicy.types.bitfield.bit-bitorder/output create mode 100644 tests/spicy/types/bitfield/bit-bitorder.spicy diff --git a/spicy/toolchain/src/compiler/visitors/validator.cc b/spicy/toolchain/src/compiler/visitors/validator.cc index 8121ad357..5c6d12e60 100644 --- a/spicy/toolchain/src/compiler/visitors/validator.cc +++ b/spicy/toolchain/src/compiler/visitors/validator.cc @@ -752,6 +752,15 @@ struct VisitorPost : public hilti::visitor::PreOrder, public error(fmt("'%s' can be used at most once", a), p); } } + + if ( auto t = f.itemType().tryAs() ) { + for ( const auto& b : t->bits() ) { + if ( AttributeSet::has(b.attributes(), "&bit-order") ) + hilti::logger().deprecated(fmt("&bit-order on bitfield item '%s' has no effect and is deprecated", + b.id()), + b.meta().location()); + } + } } void operator()(const spicy::type::unit::item::UnresolvedField& u, position_t p) { diff --git a/tests/Baseline/spicy.types.bitfield.bit-bitorder/output b/tests/Baseline/spicy.types.bitfield.bit-bitorder/output new file mode 100644 index 000000000..3abeb59bf --- /dev/null +++ b/tests/Baseline/spicy.types.bitfield.bit-bitorder/output @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[warning] <...>/bit-bitorder.spicy:14:5-14:56: &bit-order on bitfield item 'x1015_msb0' has no effect and is deprecated +[warning] <...>/bit-bitorder.spicy:15:5-15:56: &bit-order on bitfield item 'x1015_lsb0' has no effect and is deprecated diff --git a/tests/spicy/types/bitfield/bit-bitorder.spicy b/tests/spicy/types/bitfield/bit-bitorder.spicy new file mode 100644 index 000000000..619b47267 --- /dev/null +++ b/tests/spicy/types/bitfield/bit-bitorder.spicy @@ -0,0 +1,17 @@ +# @TEST-EXEC: spicyc -p -o /dev/null %INPUT 2>output +# @TEST-EXEC: btest-diff output +# +# @TEST-DOC: Test deprecated "&bit-order" attribute on bits emits deprecation warning. + +module Mini; + +import spicy; + +public type X = unit { + be16_lsb0: bitfield(16) { + x0: 0; + x1015: 10..15; + x1015_msb0: 10..15 &bit-order=spicy::BitOrder::MSB0; + x1015_lsb0: 10..15 &bit-order=spicy::BitOrder::LSB0; + }; +};