On 7/8/19 3:58 PM, Martin Sebor wrote:
> The attached patch implements three new warnings:
> 
>  *  -Wstruct-not-pod triggers for struct definitions that are not
>     POD structs,
>  *  -Wclass-is-pod triggers for class definitions that satisfy
>     the requirements on POD structs, and
>  *  -Wmismatched-tags that triggers for class and struct declarations
>     with class-key that doesn't match either their definition or
>     the first declaration (if no definition is provided).
> 
> The implementation of -Wclass-is-pod and -Wstruct-not-pod is fairly
> straightforward but the -Wmismatched-tags solution is slightly unusual.
> It collects struct and class declarations first and diagnoses mismatches
> only after the whole tramslation unit has been processed.  This is so
> that the definition of a class can guide which declarations to diagnose
> no matter which come first.
> 
> Martin
> 
> gcc-61339-impl.diff
> 
> gcc/c-family/ChangeLog:
> 
>       * c.opt (-Wstruct-not-pod, -Wclass-is-pod): New options.
>       (-Wmismatched-tags): Same.
> 
> gcc/cp/ChangeLog:
> 
>       * parser.c (maybe_warn_struct_vs_class): New function.
>       (cp_parser_check_class_key): Add argument.
>       (cp_parser_type_specifier): Call maybe_warn_struct_vs_class.
>       (cp_parser_elaborated_type_specifier): Call maybe_warn_struct_vs_class
>       before setting CLASSTYPE_DECLARED_CLASS.  Avoid setting it for classes
>       that are in the process of being defined.
>       (cp_parser_class_head): Call maybe_warn_struct_vs_class.
>       (class_or_template_pod_p): New static function.
>       (maybe_warn_struct_vs_class) Same.
>       (class rec_decl_loc_t): New.
>       (cp_parser_check_class_key): Record a struct declaration.
>       (diag_mismatched_tags): Hanlde -Wmismatched-tags.
>       (c_parse_file): Call diag_mismatched_tags.
> 
> gcc/ChangeLog:
> 
>       * doc/invoke.texi (-Wstruct-not-pod, -Wclass-is-pod): Document new
>       options.
>       (-Wmismatched-tags): Same.
So I'm going to defer to Jason here given this is a front-end patch.
Your call whether or not to push on it prior to getting any resolution
on changing GCC's conventions.

jeff

Reply via email to