FALSE /* symbol_2_token */,
FALSE /* scope_0_fallback */,
FALSE /* store_int64 */,
+ 0 /* padding_dummy */
};
_g_snprintf (token_string, token_string_len, "(unknown) token <%d>", scanner->token);
break;
}
- /* fall through */
+ G_GNUC_FALLTHROUGH;
case G_TOKEN_SYMBOL:
if (expected_token == G_TOKEN_SYMBOL ||
(scanner->config->symbol_2_token &&
_g_snprintf (expected_string, expected_string_len, "(unknown) token <%d>", expected_token);
break;
}
- /* fall through */
+ G_GNUC_FALLTHROUGH;
case G_TOKEN_SYMBOL:
need_valid = (scanner->token == G_TOKEN_SYMBOL ||
(scanner->config->symbol_2_token &&
"%s%s",
need_valid ? "valid " : "",
symbol_spec);
- /* FIXME: should we attempt to lookup the symbol_name for symbol_2_token? */
+ /* FIXME: should we attempt to look up the symbol_name for symbol_2_token? */
break;
case G_TOKEN_CHAR:
_g_snprintf (expected_string, expected_string_len, "%scharacter",
scanner->config->int_2_float)
{
*token_p = G_TOKEN_FLOAT;
+
+ /* Have to assign through a temporary variable to avoid undefined behaviour
+ * by copying between potentially-overlapping union members. */
if (scanner->config->store_int64)
{
- value_p->v_float = value_p->v_int64;
+ gint64 temp = value_p->v_int64;
+ value_p->v_float = temp;
}
else
- value_p->v_float = value_p->v_int;
+ {
+ gint temp = value_p->v_int;
+ value_p->v_float = temp;
+ }
}
errno = 0;
}
else
ch = '0';
- /* fall through */
+ G_GNUC_FALLTHROUGH;
case '1':
case '2':
case '3':