Skip to content

Commit 0bf50ce

Browse files
Issue#1403: VSG crashes in constaint due to not checking for "is" or ">>".
1 parent cc678cb commit 0bf50ce

File tree

3 files changed

+56
-37
lines changed

3 files changed

+56
-37
lines changed

tests/vhdlFile/alias_declaration/classification_results.txt

Lines changed: 53 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,7 @@
1414
3 |
1515
<class 'vsg.parser.blank_line'>
1616
--------------------------------------------------------------------------------
17-
4 |
18-
<class 'vsg.parser.blank_line'>
19-
--------------------------------------------------------------------------------
20-
5 |
21-
<class 'vsg.parser.blank_line'>
22-
--------------------------------------------------------------------------------
23-
6 |
24-
<class 'vsg.parser.blank_line'>
25-
--------------------------------------------------------------------------------
26-
7 |
27-
<class 'vsg.parser.blank_line'>
28-
--------------------------------------------------------------------------------
29-
8 | alias ident : std_logic_vector(3 downto 0) is write_enable [name1, name2 return integer];
17+
4 | alias ident : std_logic_vector(3 downto 0) is write_enable [name1, name2 return integer];
3018
<class 'vsg.token.alias_declaration.alias_keyword'>
3119
<class 'vsg.token.alias_declaration.alias_designator'>
3220
<class 'vsg.token.alias_declaration.colon'>
@@ -47,10 +35,10 @@
4735
<class 'vsg.token.signature.close_bracket'>
4836
<class 'vsg.token.alias_declaration.semicolon'>
4937
--------------------------------------------------------------------------------
50-
9 |
38+
5 |
5139
<class 'vsg.parser.blank_line'>
5240
--------------------------------------------------------------------------------
53-
10 | alias ident : std_logic_vector(3 downto 0) is write_enable [name1, name2];
41+
6 | alias ident : std_logic_vector(3 downto 0) is write_enable [name1, name2];
5442
<class 'vsg.token.alias_declaration.alias_keyword'>
5543
<class 'vsg.token.alias_declaration.alias_designator'>
5644
<class 'vsg.token.alias_declaration.colon'>
@@ -69,10 +57,10 @@
6957
<class 'vsg.token.signature.close_bracket'>
7058
<class 'vsg.token.alias_declaration.semicolon'>
7159
--------------------------------------------------------------------------------
72-
11 |
60+
7 |
7361
<class 'vsg.parser.blank_line'>
7462
--------------------------------------------------------------------------------
75-
12 | alias ident : std_logic_vector(3 downto 0) is write_enable [return integer];
63+
8 | alias ident : std_logic_vector(3 downto 0) is write_enable [return integer];
7664
<class 'vsg.token.alias_declaration.alias_keyword'>
7765
<class 'vsg.token.alias_declaration.alias_designator'>
7866
<class 'vsg.token.alias_declaration.colon'>
@@ -90,10 +78,10 @@
9078
<class 'vsg.token.signature.close_bracket'>
9179
<class 'vsg.token.alias_declaration.semicolon'>
9280
--------------------------------------------------------------------------------
93-
13 |
81+
9 |
9482
<class 'vsg.parser.blank_line'>
9583
--------------------------------------------------------------------------------
96-
14 | alias ident : std_logic_vector(3 downto 0) is write_enable(15 downto 0);
84+
10 | alias ident : std_logic_vector(3 downto 0) is write_enable(15 downto 0);
9785
<class 'vsg.token.alias_declaration.alias_keyword'>
9886
<class 'vsg.token.alias_declaration.alias_designator'>
9987
<class 'vsg.token.alias_declaration.colon'>
@@ -112,13 +100,13 @@
112100
<class 'vsg.token.todo.close_parenthesis'>
113101
<class 'vsg.token.alias_declaration.semicolon'>
114102
--------------------------------------------------------------------------------
115-
15 |
103+
11 |
116104
<class 'vsg.parser.blank_line'>
117105
--------------------------------------------------------------------------------
118-
16 |
106+
12 |
119107
<class 'vsg.parser.blank_line'>
120108
--------------------------------------------------------------------------------
121-
17 | alias ident is write_enable [name1, name2 return integer];
109+
13 | alias ident is write_enable [name1, name2 return integer];
122110
<class 'vsg.token.alias_declaration.alias_keyword'>
123111
<class 'vsg.token.alias_declaration.alias_designator'>
124112
<class 'vsg.token.alias_declaration.is_keyword'>
@@ -132,10 +120,10 @@
132120
<class 'vsg.token.signature.close_bracket'>
133121
<class 'vsg.token.alias_declaration.semicolon'>
134122
--------------------------------------------------------------------------------
135-
18 |
123+
14 |
136124
<class 'vsg.parser.blank_line'>
137125
--------------------------------------------------------------------------------
138-
19 | alias ident is write_enable [name1, name2];
126+
15 | alias ident is write_enable [name1, name2];
139127
<class 'vsg.token.alias_declaration.alias_keyword'>
140128
<class 'vsg.token.alias_declaration.alias_designator'>
141129
<class 'vsg.token.alias_declaration.is_keyword'>
@@ -147,10 +135,10 @@
147135
<class 'vsg.token.signature.close_bracket'>
148136
<class 'vsg.token.alias_declaration.semicolon'>
149137
--------------------------------------------------------------------------------
150-
20 |
138+
16 |
151139
<class 'vsg.parser.blank_line'>
152140
--------------------------------------------------------------------------------
153-
21 | alias ident is write_enable [return integer];
141+
17 | alias ident is write_enable [return integer];
154142
<class 'vsg.token.alias_declaration.alias_keyword'>
155143
<class 'vsg.token.alias_declaration.alias_designator'>
156144
<class 'vsg.token.alias_declaration.is_keyword'>
@@ -161,26 +149,59 @@
161149
<class 'vsg.token.signature.close_bracket'>
162150
<class 'vsg.token.alias_declaration.semicolon'>
163151
--------------------------------------------------------------------------------
164-
22 |
152+
18 |
165153
<class 'vsg.parser.blank_line'>
166154
--------------------------------------------------------------------------------
167-
23 | alias ident is write_enable;
155+
19 | alias ident is write_enable;
168156
<class 'vsg.token.alias_declaration.alias_keyword'>
169157
<class 'vsg.token.alias_declaration.alias_designator'>
170158
<class 'vsg.token.alias_declaration.is_keyword'>
171159
<class 'vsg.parser.todo'>
172160
<class 'vsg.token.alias_declaration.semicolon'>
173161
--------------------------------------------------------------------------------
174-
24 |
162+
20 |
163+
<class 'vsg.parser.blank_line'>
164+
--------------------------------------------------------------------------------
165+
21 | alias s_event_count : natural range 0 to 2**16 - 1 is << signal some.reference.some_signal : natural range 0 to 2**16 - 1 >>;
166+
<class 'vsg.token.alias_declaration.alias_keyword'>
167+
<class 'vsg.token.alias_declaration.alias_designator'>
168+
<class 'vsg.token.alias_declaration.colon'>
169+
<class 'vsg.token.type_mark.name'>
170+
<class 'vsg.token.range_constraint.range_keyword'>
171+
<class 'vsg.parser.todo'>
172+
<class 'vsg.token.direction.to'>
173+
<class 'vsg.parser.todo'>
174+
<class 'vsg.token.miscellaneous_operator.double_star'>
175+
<class 'vsg.parser.todo'>
176+
<class 'vsg.token.adding_operator.minus'>
177+
<class 'vsg.parser.todo'>
178+
<class 'vsg.token.alias_declaration.is_keyword'>
179+
<class 'vsg.token.external_signal_name.double_less_than'>
180+
<class 'vsg.token.external_signal_name.signal_keyword'>
181+
<class 'vsg.token.external_signal_name.external_pathname'>
182+
<class 'vsg.token.external_signal_name.colon'>
183+
<class 'vsg.token.type_mark.name'>
184+
<class 'vsg.token.range_constraint.range_keyword'>
185+
<class 'vsg.parser.todo'>
186+
<class 'vsg.token.direction.to'>
187+
<class 'vsg.parser.todo'>
188+
<class 'vsg.token.miscellaneous_operator.double_star'>
189+
<class 'vsg.parser.todo'>
190+
<class 'vsg.token.adding_operator.minus'>
191+
<class 'vsg.parser.todo'>
192+
<class 'vsg.token.external_signal_name.double_greater_than'>
193+
<class 'vsg.token.alias_declaration.semicolon'>
194+
--------------------------------------------------------------------------------
195+
22 |
175196
<class 'vsg.parser.blank_line'>
176197
--------------------------------------------------------------------------------
177-
25 | begin
198+
23 | begin
178199
<class 'vsg.token.architecture_body.begin_keyword'>
179200
--------------------------------------------------------------------------------
180-
26 |
201+
24 |
181202
<class 'vsg.parser.blank_line'>
182203
--------------------------------------------------------------------------------
183-
27 | end architecture RTL;
204+
25 | end architecture RTL;
184205
<class 'vsg.token.architecture_body.end_keyword'>
185206
<class 'vsg.token.architecture_body.end_architecture_keyword'>
186207
<class 'vsg.token.architecture_body.architecture_simple_name'>

tests/vhdlFile/alias_declaration/classification_test_input.vhd

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11

22
architecture RTL of FIFO is
33

4-
5-
6-
7-
84
alias ident : std_logic_vector(3 downto 0) is write_enable [name1, name2 return integer];
95

106
alias ident : std_logic_vector(3 downto 0) is write_enable [name1, name2];
@@ -22,6 +18,8 @@ architecture RTL of FIFO is
2218

2319
alias ident is write_enable;
2420

21+
alias s_event_count : natural range 0 to 2**16 - 1 is << signal some.reference.some_signal : natural range 0 to 2**16 - 1 >>;
22+
2523
begin
2624

2725
end architecture RTL;

vsg/vhdlFile/classify/range_constraint.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def classify(iToken, lObjects):
2020
iCurrent = utils.assign_next_token_required("range", token.range_keyword, iToken, lObjects)
2121

2222
iParenCnt = 0
23-
while not utils.is_next_token_one_of([";", "units", ":="], iCurrent, lObjects):
23+
while not utils.is_next_token_one_of([";", "units", ":=", "is", ">>"], iCurrent, lObjects):
2424
iCurrent = utils.find_next_token(iCurrent, lObjects)
2525
iParenCnt = utils.update_paren_counter(iCurrent, lObjects, iParenCnt)
2626
if iParenCnt == -1:

0 commit comments

Comments
 (0)