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 -> complete_type_or_maybe_complain)

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?


Reply via email to