Jason missed a c++2a mention. I couldn't resist changing the loop
following to place the initializers inside the fors.
pushed to master
nathan
--
Nathan Sidwell
2020-05-14 Nathan Sidwell <nat...@acm.org>
* parser.c (cp_parser_diagnose_invalid_typename): Mention
std=c++20 not 2a, reformat dependent binfo inform loops.
diff --git i/gcc/cp/parser.c w/gcc/cp/parser.c
index bc1ee21e8ce..41712bfdc2c 100644
--- i/gcc/cp/parser.c
+++ w/gcc/cp/parser.c
@@ -3376,41 +3376,35 @@ cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree id,
inform (location, "%<concept%> only available with %<-std=c++20%> or "
"%<-fconcepts%>");
else if (!flag_concepts && id == ridpointers[(int)RID_REQUIRES])
- inform (location, "%<requires%> only available with %<-std=c++2a%> or "
+ inform (location, "%<requires%> only available with %<-std=c++20%> or "
"%<-fconcepts%>");
else if (processing_template_decl && current_class_type
&& TYPE_BINFO (current_class_type))
{
- tree b;
-
- for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
- b;
- b = TREE_CHAIN (b))
+ for (tree b = TREE_CHAIN (TYPE_BINFO (current_class_type));
+ b; b = TREE_CHAIN (b))
{
tree base_type = BINFO_TYPE (b);
if (CLASS_TYPE_P (base_type)
&& dependent_type_p (base_type))
{
- tree field;
/* Go from a particular instantiation of the
template (which will have an empty TYPE_FIELDs),
to the main version. */
base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
- for (field = TYPE_FIELDS (base_type);
- field;
- field = DECL_CHAIN (field))
+ for (tree field = TYPE_FIELDS (base_type);
+ field; field = DECL_CHAIN (field))
if (TREE_CODE (field) == TYPE_DECL
&& DECL_NAME (field) == id)
{
inform (location,
"(perhaps %<typename %T::%E%> was intended)",
BINFO_TYPE (b), id);
- break;
+ goto found;
}
- if (field)
- break;
}
}
+ found:;
}
}
/* Here we diagnose qualified-ids where the scope is actually correct,