diff options
Diffstat (limited to 'gas/read.c')
-rw-r--r-- | gas/read.c | 35 |
1 files changed, 18 insertions, 17 deletions
@@ -764,19 +764,19 @@ assemble_one (char *line) /* Make sure this hasn't pushed the locked sequence past the bundle size. */ valueT bundle_size = pending_bundle_size (bundle_lock_frag); - if (bundle_size > 1U << bundle_align_p2) + if (bundle_size > (valueT) 1 << bundle_align_p2) as_bad (_ (".bundle_lock sequence at %" PRIu64 " bytes, " - "but .bundle_align_mode limit is %u bytes"), - (uint64_t) bundle_size, 1U << bundle_align_p2); + "but .bundle_align_mode limit is %" PRIu64 " bytes"), + (uint64_t) bundle_size, (uint64_t) 1 << bundle_align_p2); } else if (bundle_align_p2 > 0) { valueT insn_size = pending_bundle_size (insn_start_frag); - if (insn_size > 1U << bundle_align_p2) + if (insn_size > (valueT) 1 << bundle_align_p2) as_bad (_("single instruction is %" PRIu64 " bytes long, " - "but .bundle_align_mode limit is %u bytes"), - (uint64_t) insn_size, 1U << bundle_align_p2); + "but .bundle_align_mode limit is %" PRIu64 " bytes"), + (uint64_t) insn_size, (uint64_t) 1 << bundle_align_p2); finish_bundle (insn_start_frag, insn_size); } @@ -2248,7 +2248,7 @@ static struct deferred_diag { unsigned int lineno; bool err; expressionS exp; -} *deferred_diags, *last_deferred_diag; +} *deferred_diag_head, **deferred_diag_tail = &deferred_diag_head; static void s_errwarn_if (int err) @@ -2260,17 +2260,15 @@ s_errwarn_if (int err) if (errcnt != had_errors ()) { ignore_rest_of_line (); + free (diag); return; } diag->err = err; diag->file = as_where (&diag->lineno); diag->next = NULL; - if ( deferred_diags == NULL ) - deferred_diags = diag; - else - last_deferred_diag->next = diag; - last_deferred_diag = diag; + *deferred_diag_tail = diag; + deferred_diag_tail = &diag->next; demand_empty_rest_of_line (); } @@ -2280,20 +2278,23 @@ evaluate_deferred_diags (void) { struct deferred_diag *diag; - for (diag = deferred_diags; diag != NULL; diag = diag->next) + while ((diag = deferred_diag_head) != NULL) { if (!resolve_expression (&diag->exp) || diag->exp.X_op != O_constant) as_warn_where (diag->file, diag->lineno, _("expression does not evaluate to a constant")); else if (diag->exp.X_add_number == 0) - continue; + ; else if (diag->err) as_bad_where (diag->file, diag->lineno, _(".errif expression evaluates to true")); else as_warn_where (diag->file, diag->lineno, _(".warnif expression evaluates to true")); + deferred_diag_head = diag->next; + free (diag); } + deferred_diag_tail = &deferred_diag_head; } /* Handle the MRI fail pseudo-op. */ @@ -6785,10 +6786,10 @@ s_bundle_unlock (int arg ATTRIBUTE_UNUSED) size = pending_bundle_size (bundle_lock_frag); - if (size > 1U << bundle_align_p2) + if (size > (valueT) 1 << bundle_align_p2) as_bad (_(".bundle_lock sequence is %" PRIu64 " bytes, " - "but bundle size is only %u bytes"), - (uint64_t) size, 1u << bundle_align_p2); + "but bundle size is only %" PRIu64 " bytes"), + (uint64_t) size, (uint64_t) 1 << bundle_align_p2); else finish_bundle (bundle_lock_frag, size); |