+Tue Feb 17 21:17:30 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * rtl.h (force_line_numbers, restore_line_number_status): Declare.
+ * emit-rtl.c (force_line_numbers, restore_line_number_status):
+ New functions.
+ * stmt.c (struct nesting): Replace seenlabel with line_number_status.
+ (expand_start_case): Adjust to this change.
+ (check_seenlabel): New function.
+ (pushcase, pushcase_range, expand_endcase): Use it.
+
Tue Feb 17 10:14:32 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
* i386.md (adddi3): Add =!r,0,0,X alternative.
index_type = TREE_TYPE (case_stack->data.case_stmt.index_expr);
nominal_type = case_stack->data.case_stmt.nominal_type;
- check_seenlabel ();
-
/* If the index is erroneous, avoid more problems: pretend to succeed. */
if (index_type == error_mark_node)
return 0;
if (value != 0)
value = (*converter) (nominal_type, value);
+ check_seenlabel ();
+
/* Fail if this value is out of range for the actual type of the index
(which may be narrower than NOMINAL_TYPE). */
if (value != 0 && ! int_fits_type_p (value, index_type))
do_pending_stack_adjust ();
+ /* This might get an spurious warning in the presence of a syntax error;
+ it could be fixed by moving the call to check_seenlabel after the
+ check for error_mark_node, and copying the code of check_seenlabel that
+ deals with case_stack->data.case_stmt.line_number_status /
+ restore_line_number_status in front of the call to end_cleanup_deferral;
+ However, this might miss some useful warnings in the presence of
+ non-syntax errors. */
check_seenlabel ();
/* An ERROR_MARK occurs for various reasons including invalid data type. */