On 03/22/2012 03:49 PM, Jason Merrill wrote:
It's ill-formed to have a field with incomplete type. The best thing
would be to complain about that before we get to literal_type_p so
that errorcount is set, if that's not too complicated.
Agreed. The problem is that if we just change check_field_decls to
produce an error about the incomplete field, we produce also another
later: that is, considering cp_parser_lambda_expression, we get to
check_field_decls from finish_struct, but we eventually also produce an
error with cxx_incomplete_type_diagnostic from build_lambda_object (->
force_rvalue -> build_special_member_call ->
Anyway, I also think not calling literal_type_p from check_field_decls
if the type is incomplete is pretty ugly, but I'm not sure which is the
best way to make progress: I could try returning a boolean from
check_field_decls if something goes wrong in order to bail out early
from cp_parser_lambda_expression (at the moment, finish_struct_1,
check_bases_and_members, all return void). Or I could try to catch the
incomplete field even *before* check_field_decls.
What do you suggest?