diff --git a/gas/ChangeLog b/gas/ChangeLog index 3f08a95eb0..f9e999e544 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,19 @@ 2004-03-18 Nathan Sidwell + * read.c (read_a_source_file): Use demand_empty_rest_of_line. + (demand_empty_rest_of_line): Issue an error here. + (ignore_rest_of_line): Silently skip to end. + (demand_copy_string): Issue an error, not warning. + (equals): Likewise. + * config/obj-elf.c (obj_elf_section_name): Likewise. + (obj_elf_section): Likewise. + * config/tc-arc.c (arc_extoper): Remove bogus NULL checks. + (arc_extinst): Likewise. + * config/tc-ia64.c (dot_saveb): Use demand_empty_rest_of_line. + (dot_spill): Likewise. + (dot_unwabi): Likewise. + (dot_prologue): Likewise. + * expr.c (operand): Reject ++ and --. (operator): Likewise. diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c index 01ba096244..14d48f2ee7 100644 --- a/gas/config/obj-elf.c +++ b/gas/config/obj-elf.c @@ -787,7 +787,7 @@ obj_elf_section_name (void) end++; if (end == input_line_pointer) { - as_warn (_("missing name")); + as_bad (_("missing name")); ignore_rest_of_line (); return NULL; } @@ -938,7 +938,7 @@ obj_elf_section (int push) SKIP_WHITESPACE (); if (*input_line_pointer != '#') { - as_warn (_("character following name is not '#'")); + as_bad (_("character following name is not '#'")); ignore_rest_of_line (); return; } diff --git a/gas/config/tc-arc.c b/gas/config/tc-arc.c index b99fc0b8f7..60cfa34652 100644 --- a/gas/config/tc-arc.c +++ b/gas/config/tc-arc.c @@ -905,11 +905,6 @@ arc_extoper (opertype) name = input_line_pointer; c = get_symbol_end (); name = xstrdup (name); - if (NULL == name) - { - ignore_rest_of_line (); - return; - } p = name; while (*p) @@ -1153,11 +1148,6 @@ arc_extinst (ignore) name = input_line_pointer; c = get_symbol_end (); name = xstrdup (name); - if (NULL == name) - { - ignore_rest_of_line (); - return; - } strcpy (syntax, name); name_len = strlen (name); @@ -1305,18 +1295,7 @@ arc_extinst (ignore) strcat (syntax, "%S%L"); ext_op = (struct arc_opcode *) xmalloc (sizeof (struct arc_opcode)); - if (NULL == ext_op) - { - ignore_rest_of_line (); - return; - } - ext_op->syntax = xstrdup (syntax); - if (NULL == ext_op->syntax) - { - ignore_rest_of_line (); - return; - } ext_op->mask = I (-1) | ((0x3 == opcode) ? C (-1) : 0); ext_op->value = I (opcode) | ((0x3 == opcode) ? C (subopcode) : 0); diff --git a/gas/config/tc-ia64.c b/gas/config/tc-ia64.c index 6c4519e300..f5526c9801 100644 --- a/gas/config/tc-ia64.c +++ b/gas/config/tc-ia64.c @@ -3617,7 +3617,7 @@ dot_saveb (dummy) add_unwind_entry (output_br_mem (brmask)); if (!is_end_of_line[sep] && !is_it_end_of_statement ()) - ignore_rest_of_line (); + demand_empty_rest_of_line (); } static void @@ -3649,7 +3649,7 @@ dot_spill (dummy) sep = parse_operand (&e); if (!is_end_of_line[sep] && !is_it_end_of_statement ()) - ignore_rest_of_line (); + demand_empty_rest_of_line (); if (e.X_op != O_constant) as_bad ("Operand to .spill must be a constant"); @@ -3925,7 +3925,7 @@ dot_unwabi (dummy) } sep = parse_operand (&e2); if (!is_end_of_line[sep] && !is_it_end_of_statement ()) - ignore_rest_of_line (); + demand_empty_rest_of_line (); if (e1.X_op != O_constant) { @@ -4020,7 +4020,7 @@ dot_prologue (dummy) as_bad ("No second operand to .prologue"); sep = parse_operand (&e2); if (!is_end_of_line[sep] && !is_it_end_of_statement ()) - ignore_rest_of_line (); + demand_empty_rest_of_line (); if (e1.X_op == O_constant) { diff --git a/gas/read.c b/gas/read.c index f50409cceb..430a67e3c5 100644 --- a/gas/read.c +++ b/gas/read.c @@ -1053,7 +1053,7 @@ read_a_source_file (char *name) #endif input_line_pointer--; /* Report unknown char as ignored. */ - ignore_rest_of_line (); + demand_empty_rest_of_line (); } #ifdef md_after_pass_hook @@ -3020,6 +3020,10 @@ s_text (int ignore ATTRIBUTE_UNUSED) #endif } + +/* Verify that we are at the end of a line. If not, issue an error and + skip to EOL. */ + void demand_empty_rest_of_line (void) { @@ -3027,28 +3031,29 @@ demand_empty_rest_of_line (void) if (is_end_of_line[(unsigned char) *input_line_pointer]) input_line_pointer++; else - ignore_rest_of_line (); - - /* Return having already swallowed end-of-line. */ + { + if (ISPRINT (*input_line_pointer)) + as_bad (_("junk at end of line, first unrecognized character is `%c'"), + *input_line_pointer); + else + as_bad (_("junk at end of line, first unrecognized character valued 0x%x"), + *input_line_pointer); + ignore_rest_of_line (); + } + + /* Return pointing just after end-of-line. */ + know (is_end_of_line[(unsigned char) input_line_pointer[-1]]); } +/* Silently advance to the end of line. Use this after already having + issued an error about something bad. */ + void ignore_rest_of_line (void) { - /* For suspect lines: gives warning. */ - if (!is_end_of_line[(unsigned char) *input_line_pointer]) - { - if (ISPRINT (*input_line_pointer)) - as_warn (_("rest of line ignored; first ignored character is `%c'"), - *input_line_pointer); - else - as_warn (_("rest of line ignored; first ignored character valued 0x%x"), - *input_line_pointer); - - while (input_line_pointer < buffer_limit - && !is_end_of_line[(unsigned char) *input_line_pointer]) - input_line_pointer++; - } + while (input_line_pointer < buffer_limit + && !is_end_of_line[(unsigned char) *input_line_pointer]) + input_line_pointer++; input_line_pointer++; @@ -4738,7 +4743,7 @@ demand_copy_string (int *lenP) } else { - as_warn (_("missing string")); + as_bad (_("missing string")); retval = NULL; ignore_rest_of_line (); } @@ -4814,7 +4819,7 @@ equals (char *sym_name, int reassign) if (flag_mri) { /* Check garbage after the expression. */ - ignore_rest_of_line (); + demand_empty_rest_of_line (); mri_comment_end (stop, stopc); } }