mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-12-15 22:00:47 +08:00
gas: correct ignoring of C-style number suffixes
First of all the respective original changes didn't deal with just 0 having such a suffix - this needs additional logic outside of integer_constant(). Further bogus suffixes having more than two L-s were accepted, while valid suffixes with U following the L(s) weren't. Finally respective tests were introduced for Sparc only. Reviewed-by: Neal Frager <neal.frager@amd.com>
This commit is contained in:
31
gas/expr.c
31
gas/expr.c
@@ -538,17 +538,26 @@ integer_constant (int radix, expressionS *expressionP)
|
|||||||
#ifndef tc_allow_U_suffix
|
#ifndef tc_allow_U_suffix
|
||||||
#define tc_allow_U_suffix 1
|
#define tc_allow_U_suffix 1
|
||||||
#endif
|
#endif
|
||||||
|
bool u_seen = !tc_allow_U_suffix;
|
||||||
/* PR 19910: Look for, and ignore, a U suffix to the number. */
|
/* PR 19910: Look for, and ignore, a U suffix to the number. */
|
||||||
if (tc_allow_U_suffix && (c == 'U' || c == 'u'))
|
if (!u_seen && (c == 'U' || c == 'u'))
|
||||||
c = * input_line_pointer++;
|
{
|
||||||
|
c = *input_line_pointer++;
|
||||||
|
u_seen = true;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef tc_allow_L_suffix
|
#ifndef tc_allow_L_suffix
|
||||||
#define tc_allow_L_suffix 1
|
#define tc_allow_L_suffix 1
|
||||||
#endif
|
#endif
|
||||||
/* PR 20732: Look for, and ignore, a L or LL suffix to the number. */
|
/* PR 20732: Look for, and ignore, a L or LL suffix to the number. */
|
||||||
if (tc_allow_L_suffix)
|
if (tc_allow_L_suffix && (c == 'L' || c == 'l'))
|
||||||
while (c == 'L' || c == 'l')
|
{
|
||||||
c = * input_line_pointer++;
|
c = * input_line_pointer++;
|
||||||
|
if (c == 'L' || c == 'l')
|
||||||
|
c = *input_line_pointer++;
|
||||||
|
if (!u_seen && (c == 'U' || c == 'u'))
|
||||||
|
c = *input_line_pointer++;
|
||||||
|
}
|
||||||
|
|
||||||
if (small)
|
if (small)
|
||||||
{
|
{
|
||||||
@@ -888,6 +897,19 @@ operand (expressionS *expressionP, enum expr_mode mode)
|
|||||||
input_line_pointer++;
|
input_line_pointer++;
|
||||||
goto default_case;
|
goto default_case;
|
||||||
|
|
||||||
|
case 'l':
|
||||||
|
case 'L':
|
||||||
|
/* Accept an L suffix to the zero. */
|
||||||
|
if (tc_allow_L_suffix)
|
||||||
|
goto numeric;
|
||||||
|
goto default_case;
|
||||||
|
|
||||||
|
case 'u':
|
||||||
|
case 'U':
|
||||||
|
/* Accept a U suffix to the zero. */
|
||||||
|
if (!tc_allow_U_suffix)
|
||||||
|
goto default_case;
|
||||||
|
/* Fall through. */
|
||||||
case '0':
|
case '0':
|
||||||
case '1':
|
case '1':
|
||||||
case '2':
|
case '2':
|
||||||
@@ -896,6 +918,7 @@ operand (expressionS *expressionP, enum expr_mode mode)
|
|||||||
case '5':
|
case '5':
|
||||||
case '6':
|
case '6':
|
||||||
case '7':
|
case '7':
|
||||||
|
numeric:
|
||||||
integer_constant ((flag_m68k_mri || NUMBERS_WITH_SUFFIX)
|
integer_constant ((flag_m68k_mri || NUMBERS_WITH_SUFFIX)
|
||||||
? 0 : 8,
|
? 0 : 8,
|
||||||
expressionP);
|
expressionP);
|
||||||
|
|||||||
64
gas/testsuite/gas/all/const-1.l
Normal file
64
gas/testsuite/gas/all/const-1.l
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
# This should match the output of gas -alm const-1.s.
|
||||||
|
.*: Assembler messages:
|
||||||
|
.*:5: Error: .*`l'
|
||||||
|
.*:18: Info: .*
|
||||||
|
.*:6: Error: .*`l'
|
||||||
|
.*:18: Info: .*
|
||||||
|
.*:7: Error: .*`l'
|
||||||
|
.*:18: Info: .*
|
||||||
|
.*:8: Error: .*`l'
|
||||||
|
.*:18: Info: .*
|
||||||
|
.*:5: Error: .*`u'
|
||||||
|
.*:19: Info: .*
|
||||||
|
.*:6: Error: .*`u'
|
||||||
|
.*:19: Info: .*
|
||||||
|
.*:7: Error: .*`u'
|
||||||
|
.*:19: Info: .*
|
||||||
|
.*:8: Error: .*`u'
|
||||||
|
.*:19: Info: .*
|
||||||
|
.*:5: Error: .*`l'
|
||||||
|
.*:20: Info: .*
|
||||||
|
.*:6: Error: .*`l'
|
||||||
|
.*:20: Info: .*
|
||||||
|
.*:7: Error: .*`l'
|
||||||
|
.*:20: Info: .*
|
||||||
|
.*:8: Error: .*`l'
|
||||||
|
.*:20: Info: .*
|
||||||
|
.*GAS .*/const-1\.s[ ].*
|
||||||
|
#...
|
||||||
|
[ ]*[0-9]*[ ]+const u
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 0u
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 00u
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 0x0u
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 01[ ]+> \.byte 1u
|
||||||
|
[ ]*[0-9]*[ ]+const l
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 0l
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 00l
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 0x0l
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 01[ ]+> \.byte 1l
|
||||||
|
[ ]*[0-9]*[ ]+const ul
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 0ul
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 00ul
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 0x0ul
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 01[ ]+> \.byte 1ul
|
||||||
|
[ ]*[0-9]*[ ]+const lu
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 0lu
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 00lu
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 0x0lu
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 01[ ]+> \.byte 1lu
|
||||||
|
[ ]*[0-9]*[ ]+const ll
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 0ll
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 00ll
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 0x0ll
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 01[ ]+> \.byte 1ll
|
||||||
|
[ ]*[0-9]*[ ]+const llu
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 0llu
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 00llu
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 0x0llu
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 01[ ]+> \.byte 1llu
|
||||||
|
[ ]*[0-9]*[ ]+const ull
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 0ull
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 00ull
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 00[ ]+> \.byte 0x0ull
|
||||||
|
[ ]*[0-9]*[ ]+\?\?\?\? 01[ ]+> \.byte 1ull
|
||||||
|
#pass
|
||||||
20
gas/testsuite/gas/all/const-1.s
Normal file
20
gas/testsuite/gas/all/const-1.s
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
.data
|
||||||
|
data:
|
||||||
|
|
||||||
|
.macro const, sfx
|
||||||
|
.byte 0\sfx
|
||||||
|
.byte 00\sfx
|
||||||
|
.byte 0x0\sfx
|
||||||
|
.byte 1\sfx
|
||||||
|
.endm
|
||||||
|
|
||||||
|
const u
|
||||||
|
const l
|
||||||
|
const ul
|
||||||
|
const lu
|
||||||
|
const ll
|
||||||
|
const llu
|
||||||
|
const ull
|
||||||
|
const lll
|
||||||
|
const ulu
|
||||||
|
const lul
|
||||||
@@ -469,6 +469,11 @@ run_list_test cond-2 "-al"
|
|||||||
setup_xfail "tic30-*-*"
|
setup_xfail "tic30-*-*"
|
||||||
run_list_test linefile ""
|
run_list_test linefile ""
|
||||||
|
|
||||||
|
# Again, .byte does not emit 8 bits on either tic4x or tic54x.
|
||||||
|
if { ![istarget "tic4x*-*-*"] && ![istarget "tic54x*-*-*"] } {
|
||||||
|
run_list_test const-1 "-alm"
|
||||||
|
}
|
||||||
|
|
||||||
run_list_test macro "-alm"
|
run_list_test macro "-alm"
|
||||||
|
|
||||||
run_list_test pr20312
|
run_list_test pr20312
|
||||||
|
|||||||
Reference in New Issue
Block a user