+};
+
+/* Save lists of labels used or defined in particular contexts.
+ Allocated on the parser obstack. */
+
+struct c_label_list
+{
+ /* The label at the head of the list. */
+ tree label;
+ /* The rest of the list. */
+ struct c_label_list *next;
+};
+
+/* Statement expression context. */
+
+struct c_label_context_se
+{
+ /* The labels defined at this level of nesting. */
+ struct c_label_list *labels_def;
+ /* The labels used at this level of nesting. */
+ struct c_label_list *labels_used;
+ /* The next outermost context. */
+ struct c_label_context_se *next;
+};
+
+/* Context of variably modified declarations. */
+
+struct c_label_context_vm
+{
+ /* The labels defined at this level of nesting. */
+ struct c_label_list *labels_def;
+ /* The labels used at this level of nesting. */
+ struct c_label_list *labels_used;
+ /* The scope of this context. Multiple contexts may be at the same
+ numbered scope, since each variably modified declaration starts a
+ new context. */
+ unsigned scope;
+ /* The next outermost context. */
+ struct c_label_context_vm *next;
+};
+
+/* Used when parsing an enum. Initialized by start_enum. */
+struct c_enum_contents
+{
+ /* While defining an enum type, this is 1 plus the last enumerator
+ constant value. */
+ tree enum_next_value;
+
+ /* Nonzero means that there was overflow computing enum_next_value. */
+ int enum_overflow;