c++: Various small fixes
A copy-paste error, a couple of missed checks to guard undefined accesses, and we don't need to use type_uses_auto to extract the auto node we just built. gcc/cp/ChangeLog: * coroutines.cc (flatten_await_stmt): Fix copyo. * decl.c (reshape_init_class): Simplify. * module.cc (module_state::read_language): Add null check. * parser.c (build_range_temp): Avoid type_uses_auto. (cp_parser_class_specifier_1): Add null check.
This commit is contained in:
parent
e4cb3bb9ac
commit
9c6344c10d
4 changed files with 10 additions and 12 deletions
|
@ -2905,7 +2905,7 @@ flatten_await_stmt (var_nest_node *n, hash_set<tree> *promoted,
|
|||
tree else_cl = COND_EXPR_ELSE (old_expr);
|
||||
if (!VOID_TYPE_P (TREE_TYPE (else_cl)))
|
||||
{
|
||||
gcc_checking_assert (TREE_CODE (then_cl) != STATEMENT_LIST);
|
||||
gcc_checking_assert (TREE_CODE (else_cl) != STATEMENT_LIST);
|
||||
else_cl
|
||||
= build2 (init_expr ? INIT_EXPR : MODIFY_EXPR, var_type,
|
||||
var, else_cl);
|
||||
|
|
|
@ -6563,8 +6563,7 @@ reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
|
|||
continue_:
|
||||
if (base_binfo)
|
||||
{
|
||||
BINFO_BASE_ITERATE (binfo, ++binfo_idx, base_binfo);
|
||||
if (base_binfo)
|
||||
if (BINFO_BASE_ITERATE (binfo, ++binfo_idx, base_binfo))
|
||||
field = base_binfo;
|
||||
else
|
||||
field = next_initializable_field (TYPE_FIELDS (type));
|
||||
|
|
|
@ -17977,7 +17977,7 @@ module_state::read_language (bool outermost)
|
|||
|
||||
function_depth++; /* Prevent unexpected GCs. */
|
||||
|
||||
if (counts[MSC_entities] != entity_num)
|
||||
if (ok && counts[MSC_entities] != entity_num)
|
||||
ok = false;
|
||||
if (ok && counts[MSC_entities]
|
||||
&& !read_entities (counts[MSC_entities],
|
||||
|
|
|
@ -13474,17 +13474,15 @@ cp_parser_range_for (cp_parser *parser, tree scope, tree init, tree range_decl,
|
|||
static tree
|
||||
build_range_temp (tree range_expr)
|
||||
{
|
||||
tree range_type, range_temp;
|
||||
|
||||
/* Find out the type deduced by the declaration
|
||||
`auto &&__range = range_expr'. */
|
||||
range_type = cp_build_reference_type (make_auto (), true);
|
||||
range_type = do_auto_deduction (range_type, range_expr,
|
||||
type_uses_auto (range_type));
|
||||
tree auto_node = make_auto ();
|
||||
tree range_type = cp_build_reference_type (auto_node, true);
|
||||
range_type = do_auto_deduction (range_type, range_expr, auto_node);
|
||||
|
||||
/* Create the __range variable. */
|
||||
range_temp = build_decl (input_location, VAR_DECL, for_range__identifier,
|
||||
range_type);
|
||||
tree range_temp = build_decl (input_location, VAR_DECL,
|
||||
for_range__identifier, range_type);
|
||||
TREE_USED (range_temp) = 1;
|
||||
DECL_ARTIFICIAL (range_temp) = 1;
|
||||
|
||||
|
@ -25910,7 +25908,8 @@ cp_parser_class_specifier_1 (cp_parser* parser)
|
|||
so that maybe_instantiate_noexcept can tsubst the NOEXCEPT_EXPR
|
||||
in the pattern. */
|
||||
for (tree i : DEFPARSE_INSTANTIATIONS (def_parse))
|
||||
DEFERRED_NOEXCEPT_PATTERN (TREE_PURPOSE (i)) = TREE_PURPOSE (spec);
|
||||
DEFERRED_NOEXCEPT_PATTERN (TREE_PURPOSE (i))
|
||||
= spec ? TREE_PURPOSE (spec) : error_mark_node;
|
||||
|
||||
/* Restore the state of local_variables_forbidden_p. */
|
||||
parser->local_variables_forbidden_p = local_variables_forbidden_p;
|
||||
|
|
Loading…
Add table
Reference in a new issue