projects
/
cparser
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix condition of multi-char constant warning.
[cparser]
/
parser.c
diff --git
a/parser.c
b/parser.c
index
095c010
..
dcd6cdc
100644
(file)
--- a/
parser.c
+++ b/
parser.c
@@
-118,7
+118,7
@@
static statement_t *current_parent = NULL;
static ms_try_statement_t *current_try = NULL;
static linkage_kind_t current_linkage = LINKAGE_INVALID;
static goto_statement_t *goto_first = NULL;
static ms_try_statement_t *current_try = NULL;
static linkage_kind_t current_linkage = LINKAGE_INVALID;
static goto_statement_t *goto_first = NULL;
-static goto_statement_t
*goto_last
= NULL;
+static goto_statement_t
**goto_anchor
= NULL;
static label_statement_t *label_first = NULL;
static label_statement_t **label_anchor = NULL;
/** current translation unit. */
static label_statement_t *label_first = NULL;
static label_statement_t **label_anchor = NULL;
/** current translation unit. */
@@
-5272,8
+5272,6
@@
static void check_labels(void)
"label '%Y' used but not defined", label->base.symbol);
}
}
"label '%Y' used but not defined", label->base.symbol);
}
}
- goto_first = NULL;
- goto_last = NULL;
if (warning.unused_label) {
for (const label_statement_t *label_statement = label_first;
if (warning.unused_label) {
for (const label_statement_t *label_statement = label_first;
@@
-5288,8
+5286,6
@@
static void check_labels(void)
}
}
}
}
}
}
- label_first = NULL;
- label_anchor = &label_first;
}
static void warn_unused_decl(entity_t *entity, entity_t *end,
}
static void warn_unused_decl(entity_t *entity, entity_t *end,
@@
-5970,7
+5966,12
@@
static void parse_external_declaration(void)
current_function = function;
current_parent = NULL;
current_function = function;
current_parent = NULL;
- statement_t *const body = parse_compound_statement(false);
+ goto_first = NULL;
+ goto_anchor = &goto_first;
+ label_first = NULL;
+ label_anchor = &label_first;
+
+ statement_t *const body = parse_compound_statement(false);
function->statement = body;
first_err = true;
check_labels();
function->statement = body;
first_err = true;
check_labels();
@@
-6313,10
+6314,10
@@
static expression_t *parse_character_constant(void)
cnst->conste.v.character = token.v.string;
if (cnst->conste.v.character.size != 1) {
cnst->conste.v.character = token.v.string;
if (cnst->conste.v.character.size != 1) {
- if (warning.multichar && GNU_MODE) {
+ if (!GNU_MODE) {
+ errorf(HERE, "more than 1 character in character constant");
+ } else if (warning.multichar) {
warningf(HERE, "multi-character character constant");
warningf(HERE, "multi-character character constant");
- } else {
- errorf(HERE, "more than 1 characters in character constant");
}
}
next_token();
}
}
next_token();
@@
-6334,10
+6335,10
@@
static expression_t *parse_wide_character_constant(void)
cnst->conste.v.wide_character = token.v.wide_string;
if (cnst->conste.v.wide_character.size != 1) {
cnst->conste.v.wide_character = token.v.wide_string;
if (cnst->conste.v.wide_character.size != 1) {
- if (warning.multichar && GNU_MODE) {
+ if (!GNU_MODE) {
+ errorf(HERE, "more than 1 character in character constant");
+ } else if (warning.multichar) {
warningf(HERE, "multi-character character constant");
warningf(HERE, "multi-character character constant");
- } else {
- errorf(HERE, "more than 1 characters in character constant");
}
}
next_token();
}
}
next_token();
@@
-9809,8
+9810,8
@@
static statement_t *parse_goto(void)
expression_t *expression = parse_expression();
mark_vars_read(expression, NULL);
expression_t *expression = parse_expression();
mark_vars_read(expression, NULL);
- /* Argh: although documentation say
the expression must be of type void
*,
- * gcc
excepts anything that can be casted into void
* without error */
+ /* Argh: although documentation say
s the expression must be of type void
*,
+ * gcc
accepts anything that can be casted into void
* without error */
type_t *type = expression->base.type;
if (type != type_error_type) {
type_t *type = expression->base.type;
if (type != type_error_type) {
@@
-9841,12
+9842,8
@@
static statement_t *parse_goto(void)
}
/* remember the goto's in a list for later checking */
}
/* remember the goto's in a list for later checking */
- if (goto_last == NULL) {
- goto_first = &statement->gotos;
- } else {
- goto_last->next = &statement->gotos;
- }
- goto_last = &statement->gotos;
+ *goto_anchor = &statement->gotos;
+ goto_anchor = &statement->gotos.next;
expect(';');
expect(';');