mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-11-16 12:34:43 +00:00
gas: multi-byte warning adjustments
First input_scrub_next_buffer()'s invocation was wrong, leading to input only being checked from the last newline till the end of the current buffer. Correcting the invocation, however, leads to duplicate checking unless -f (or the #NO_APP equivalent thereof) is in effect. Move the invocation to input_file_give_next_buffer(), to restrict it accordingly. Then, when macros contain multi-byte characters, warning about them again in every expansion isn't useful. Suppress such warnings from sb_scrub_and_add_sb().
This commit is contained in:
@@ -406,7 +406,8 @@ scan_for_multibyte_characters (const unsigned char * start,
|
||||
This is the way the old code used to work. */
|
||||
|
||||
size_t
|
||||
do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
|
||||
do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen,
|
||||
bool check_multibyte)
|
||||
{
|
||||
char *to = tostart;
|
||||
char *toend = tostart + tolen;
|
||||
@@ -510,7 +511,7 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
|
||||
from = input_buffer;
|
||||
fromend = from + fromlen;
|
||||
|
||||
if (multibyte_handling == multibyte_warn)
|
||||
if (check_multibyte)
|
||||
(void) scan_for_multibyte_characters ((const unsigned char *) from,
|
||||
(const unsigned char* ) fromend,
|
||||
true /* Generate warnings. */);
|
||||
|
||||
2
gas/as.h
2
gas/as.h
@@ -496,7 +496,7 @@ void input_scrub_insert_line (const char *);
|
||||
void input_scrub_insert_file (char *);
|
||||
char * input_scrub_new_file (const char *);
|
||||
char * input_scrub_next_buffer (char **bufp);
|
||||
size_t do_scrub_chars (size_t (*get) (char *, size_t), char *, size_t);
|
||||
size_t do_scrub_chars (size_t (*get) (char *, size_t), char *, size_t, bool);
|
||||
size_t do_scrub_pending (void);
|
||||
bool scan_for_multibyte_characters (const unsigned char *, const unsigned char *, bool);
|
||||
int gen_to_words (LITTLENUM_TYPE *, int, long);
|
||||
|
||||
@@ -240,9 +240,20 @@ input_file_give_next_buffer (char *where /* Where to place 1st character of new
|
||||
Since the assembler shouldn't do any output to stdout, we
|
||||
don't bother to synch output and input. */
|
||||
if (preprocess)
|
||||
size = do_scrub_chars (input_file_get, where, BUFFER_SIZE);
|
||||
size = do_scrub_chars (input_file_get, where, BUFFER_SIZE,
|
||||
multibyte_handling == multibyte_warn);
|
||||
else
|
||||
size = input_file_get (where, BUFFER_SIZE);
|
||||
{
|
||||
size = input_file_get (where, BUFFER_SIZE);
|
||||
|
||||
if (multibyte_handling == multibyte_warn)
|
||||
{
|
||||
const unsigned char *start = (const unsigned char *) where;
|
||||
|
||||
(void) scan_for_multibyte_characters (start, start + size,
|
||||
true /* Generate warnings */);
|
||||
}
|
||||
}
|
||||
|
||||
if (size)
|
||||
return_value = where + size;
|
||||
|
||||
@@ -386,11 +386,6 @@ input_scrub_next_buffer (char **bufp)
|
||||
++p;
|
||||
}
|
||||
|
||||
if (multibyte_handling == multibyte_warn)
|
||||
(void) scan_for_multibyte_characters ((const unsigned char *) p,
|
||||
(const unsigned char *) limit,
|
||||
true /* Generate warnings */);
|
||||
|
||||
/* We found a newline in the newly read chars. */
|
||||
partial_where = p;
|
||||
partial_size = limit - p;
|
||||
|
||||
2
gas/sb.c
2
gas/sb.c
@@ -124,7 +124,7 @@ sb_scrub_and_add_sb (sb *ptr, sb *s)
|
||||
break;
|
||||
sb_check (ptr, copy);
|
||||
ptr->len += do_scrub_chars (scrub_from_sb, ptr->ptr + ptr->len,
|
||||
ptr->max - ptr->len);
|
||||
ptr->max - ptr->len, false);
|
||||
}
|
||||
|
||||
sb_to_scrub = 0;
|
||||
|
||||
@@ -535,3 +535,5 @@ run_dump_test "pr27384"
|
||||
run_dump_test "pr27381"
|
||||
run_dump_test "multibyte1"
|
||||
run_dump_test "multibyte2"
|
||||
run_list_test "multibyte3" "--multibyte-handling=warn"
|
||||
run_list_test "multibyte3" "-f --multibyte-handling=warn"
|
||||
|
||||
10
gas/testsuite/gas/all/multibyte3.l
Normal file
10
gas/testsuite/gas/all/multibyte3.l
Normal file
@@ -0,0 +1,10 @@
|
||||
[^:]*: Assembler messages:
|
||||
[^:]*: Warning: multibyte character \(.*\) encountered in .*
|
||||
[^:]*: Warning: multibyte character \(.*\) encountered in .*
|
||||
[^:]*: Warning: multibyte character \(.*\) encountered in .*
|
||||
[^:]*: Warning: multibyte character \(.*\) encountered in .*
|
||||
[^:]*: Warning: multibyte character \(.*\) encountered in .*
|
||||
[^:]*: Warning: multibyte character \(.*\) encountered in .*
|
||||
[^:]*: Warning: multibyte character \(.*\) encountered in .*
|
||||
[^:]*: Warning: multibyte character \(.*\) encountered in .*
|
||||
[^:]*:[0-9]+: Warning: end of input
|
||||
11
gas/testsuite/gas/all/multibyte3.s
Normal file
11
gas/testsuite/gas/all/multibyte3.s
Normal file
@@ -0,0 +1,11 @@
|
||||
.macro m
|
||||
UmlautÜ\@:
|
||||
.endm
|
||||
|
||||
UmlautÄ:
|
||||
.irpc c,szß
|
||||
UmlautÖ\@\c\():
|
||||
m
|
||||
.endr
|
||||
|
||||
.warning "end of input"
|
||||
Reference in New Issue
Block a user