aboutsummaryrefslogtreecommitdiff
path: root/gas/read.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/read.c')
-rw-r--r--gas/read.c35
1 files changed, 18 insertions, 17 deletions
diff --git a/gas/read.c b/gas/read.c
index d604d95..ca76af7 100644
--- a/gas/read.c
+++ b/gas/read.c
@@ -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);