Martin Sebor <mse...@gmail.com> writes:
> Hopefully with the right patch this time (thanks Jon).
>
> On 7/8/19 4:00 PM, Martin Sebor wrote:
>> The attached patch changes the class-key of class definitions that
>> satisfy the requirements on a POD struct to 'struct', and that of
>> struct definitions that aren't POD to class, according to the GCC
>> coding convention.  The patch is also prerequisite for GCC being
>> able to compile cleanly with -Wmismatched-tags.
>> 
>> I made the changes building GCC with -Wstruct-not-pod and
>> -Wclass-is-pod enabled, scanning the build log for instances
>> of each warning, and using a script replacing the class-key
>> as necessary and adjusting the access of the members declared
>> immediately after the class-head.
>> 
>> Martin
>
> PR c++/61339 - add mismatch between struct and class [-Wmismatched-tags] to 
> non-bugs
>
> gcc/c/ChangeLog:
>
>       * c-decl.c: Change class-key from class to struct and vice versa
>       to match convention and avoid -Wclass-is-pod and -Wstruct-no-pod.
>       * gimple-parser.c: Same.
>
> gcc/c-family/ChangeLog:
>
>       * c-format.c (check_argument_type): Change class-key from class to
>       struct and vice versa to match convention and avoid -Wclass-is-pod
>       and -Wstruct-no-pod.
>       * c-pretty-print.h: Same.
>
> gcc/cp/ChangeLog:
>
>       * constexpr.c (cxx_eval_call_expression): Change class-key from class
>       to struct and vice versa to match convention and avoid -Wclass-is-pod
>       and -Wstruct-no-pod.
>       * constraint.cc (get_concept_definition): Same.
>       * cp-tree.h: Same.
>       * cxx-pretty-print.h: Same.
>       * error.c: Same.
>       * logic.cc (term_list::replace): Same.
>       * name-lookup.c (find_local_binding): Same.
>       * pt.c (tsubst_binary_right_fold): Same.
>       * search.c (field_accessor_p): Same.
>       * semantics.c (expand_or_defer_fn): Same.
>
> gcc/lto/ChangeLog:
>
>       * lto-dump.c: Same.

Need to cut-&-paste the description for this one.

> gcc/ChangeLog:
>
>       * align.h: Change class-key from class to struct and vice versa
>       to match convention and avoid -Wclass-is-pod and -Wstruct-no-pod.
>       * alloc-pool.h: Same.
>       * asan.c (shadow_mem_size): Same.
>       * auto-profile.c: Same.
>       * basic-block.h: Same.
>       * bitmap.h: Same.
>       * cfgexpand.c (set_rtl): Same.
>       (expand_one_stack_var_at): Same.
>       * cfghooks.h: Same.
>       * cfgloop.h: Same.
>       * cgraph.h: Same.
>       * config/i386/i386.h: Same.
>       * df-problems.c (df_print_bb_index): Same.
>       * df-scan.c: Same.
>       * df.h (df_single_use): Same.
>       * diagnostic-show-locus.c (layout::print_annotation_line): Same.
>       (layout::annotation_line_showed_range_p): Same.
>       (get_printed_columns): Same.
>       (correction::ensure_terminated): Same.
>       (line_corrections::~line_corrections): Same.
>       * dojump.h: Same.
>       * dse.c: Same.
>       * dump-context.h: Same.
>       * dumpfile.h: Same.
>       * dwarf2out.c: Same.
>       * edit-context.c: Same.
>       * fibonacci_heap.c (test_union_of_equal_heaps): Same.
>       * flags.h: Same.
>       * function.c (assign_stack_local): Same.
>       * function.h: Same.
>       * gcc.c: Same.
>       * gcov.c (block_info::block_info): Same.
>       * genattrtab.c: Same.
>       * genextract.c: Same.
>       * genmatch.c (comparison_code_p): Same.
>       (id_base::id_base): Same.
>       (decision_tree::print): Same.
>       * genoutput.c: Same.
>       * genpreds.c (write_one_predicate_function): Same.
>       * genrecog.c (validate_pattern): Same.
>       (find_operand_positions): Same.
>       (optimize_subroutine_group): Same.
>       (merge_pattern_transition::merge_pattern_transition): Same.
>       (merge_pattern_info::merge_pattern_info): Same.
>       (merge_state_result::merge_state_result): Same.
>       (merge_into_state): Same.
>       * gensupport.c: Same.
>       * gensupport.h: Same.
>       * ggc-common.c (init_ggc_heuristics): Same.
>       * ggc-tests.c (test_union): Same.
>       * gimple-loop-interchange.cc (dump_induction): Same.
>       * gimple-loop-versioning.cc: Same.
>       * gimple-match.h (gimple_match_cond::any_else): Same.
>       * gimple-ssa-backprop.c: Same.
>       * gimple-ssa-sprintf.c: Same.
>       * gimple-ssa-store-merging.c (store_operand_info::store_operand_info): 
> Same.
>       (store_immediate_info::store_immediate_info): Same.
>       (merged_store_group::apply_stores): Same.
>       (get_location_for_stmts): Same.
>       * gimple-ssa-strength-reduction.c: Same.
>       * gimple-ssa-warn-alloca.c: Same.
>       * gimple-ssa-warn-restrict.c (pass_wrestrict::execute): Same.
>       * godump.c (go_type_decl): Same.
>       * hash-map-tests.c (test_map_of_strings_to_int): Same.
>       * hash-map.h: Same.
>       * hash-set-tests.c (test_set_of_strings): Same.
>       * hsa-brig.c: Same.
>       * hsa-common.h: Same.
>       * hsa-gen.c (transformable_switch_to_sbr_p): Same.
>       * input.c (assert_loceq): Same.
>       * input.h: Same.
>       * ipa-cp.c: Same.
>       * ipa-devirt.c (possible_polymorphic_call_targets_1): Same.
>       * ipa-fnsummary.h: Same.
>       * ipa-inline.h: Same.
>       * ipa-prop.h: Same.
>       * ipa-split.c (visit_bb): Same.
>       * ira-int.h (minmax_set_iter_next): Same.
>       * loop-invariant.c: Same.
>       * loop-iv.c: Same.
>       * lra-eliminations.c: Same.
>       * lra-int.h: Same.
>       * lra-lives.c (mark_regno_dead): Same.
>       * lra-remat.c: Same.
>       * lra-spills.c: Same.
>       * lto-streamer.h: Same.
>       * mem-stats.h: Same.
>       * omp-grid.c (omp_grid_lastprivate_predicate): Same.
>       * omp-low.c (omp_clause_aligned_alignment): Same.
>       * optabs-query.h (get_vcond_eq_icode): Same.
>       * optabs.h: Same.
>       * opts.c (wrap_help): Same.
>       * poly-int.h: Same.
>       * predict.c (predict_paths_leading_to_edge): Same.
>       * pretty-print.h: Same.
>       * profile-count.h: Same.
>       * read-md.h: Same.
>       * read-rtl-function.c: Same.
>       * ree.c: Same.
>       * reginfo.c: Same.
>       * regrename.c: Same.
>       * regrename.h: Same.
>       * reload.h: Same.
>       * rtl-iter.h: Same.
>       * rtl.h (costs_add_n_insns): Same.
>       * sanopt.c: Same.
>       * sched-int.h: Same.
>       * sel-sched-ir.h: Same.
>       * selftest.h: Same.
>       * sese.h (vec_find): Same.
>       * stmt.c: Same.
>       * target-globals.h: Same.
>       * tree-affine.c (aff_combination_find_elt): Same.
>       * tree-affine.h: Same.
>       * tree-data-ref.h: Same.
>       * tree-outof-ssa.c (ssa_is_replaceable_p): Same.
>       * tree-predcom.c: Same.
>       * tree-scalar-evolution.c (find_var_scev_info): Same.
>       * tree-ssa-alias.h: Same.
>       * tree-ssa-ccp.c: Same.
>       * tree-ssa-coalesce.c (ssa_conflicts_dump): Same.
>       * tree-ssa-loop-im.c (for_all_locs_in_loop): Same.
>       (rewrite_mem_refs): Same.
>       (execute_sm_if_changed): Same.
>       (hoist_memory_references): Same.
>       * tree-ssa-loop-ivopts.c (operator<=): Same.
>       * tree-ssa-loop.h: Same.
>       * tree-ssa-pre.c (get_or_alloc_expr_for_name): Same.
>       * tree-ssa-structalias.c: Same.
>       * tree-switch-conversion.h (cluster::cluster): Same.
>       (simple_cluster::simple_cluster): Same.
>       * tree-vect-patterns.c (type_conversion_p): Same.
>       * tree-vectorizer.c (dump_stmt_cost): Same.
>       * tree-vectorizer.h (loop_vec_info_for_loop): Same.
>       * tree.c (protected_set_expr_location): Same.
>       * tree.h (desired_pro_or_demotion_p): Same.
>       (fndecl_built_in_p): Same.
>       * unique-ptr-tests.cc: Same.
>       * var-tracking.c (delete_variable_part): Same.
>       * varasm.c (assemble_real): Same.
>       (tree_output_constant_def): Same.
>       * vec.c: Same.
>       * wide-int-bitmask.h: Same.
>       * wide-int.h (decompose): Same.
>
> libcpp/ChangeLog:
>
>       * include/line-map.h: Change class-key from class to struct and vice
>       versa to match convention and avoid -Wclass-is-pod and -Wstruct-no-pod.
>       * mkdeps.c: Same.yyy

s/yyy// :-)

The changelog format is outdoing itself in usefulness here...

> diff --git a/gcc/cgraph.h b/gcc/cgraph.h
> index 18839a4a5ec..ca2a34afbae 100644
> --- a/gcc/cgraph.h
> +++ b/gcc/cgraph.h
> @@ -100,7 +100,7 @@ enum symbol_partitioning_class
>  
>  /* Base of all entries in the symbol table.
>     The symtab_node is inherited by cgraph and varpol nodes.  */
> -class GTY((desc ("%h.type"), tag ("SYMTAB_SYMBOL"),
> +struct GTY((desc ("%h.type"), tag ("SYMTAB_SYMBOL"),
>          chain_next ("%h.next"), chain_prev ("%h.previous")))
>    symtab_node

Second line should get an extra space of indentation.

> @@ -1673,8 +1675,10 @@ struct GTY(()) cgraph_indirect_call_info
>    unsigned vptr_changed : 1;
>  };
>  
> -struct GTY((chain_next ("%h.next_caller"), chain_prev ("%h.prev_caller"),
> -         for_user)) cgraph_edge {
> +class GTY((chain_next ("%h.next_caller"), chain_prev ("%h.prev_caller"),
> +         for_user)) cgraph_edge

Similarly one fewer space here.

> diff --git a/gcc/gcc.c b/gcc/gcc.c
> index 9bd65508b00..9f73ce0e47f 100644
> --- a/gcc/gcc.c
> +++ b/gcc/gcc.c
> @@ -57,7 +57,7 @@ compilation is specified by a string called a "spec".  */
>       getenv ();
>     Hence we need to use "get" for the accessor method, not "getenv".  */
> 
> -class env_manager
> +struct env_manager
>  {
>   public:
>    void init (bool can_restore, bool debug);
> @@ -8574,7 +8574,7 @@ static int n_mdswitches;
>  /* Check whether a particular argument was used.  The first time we
>     canonicalize the switches to keep only the ones we care about.  */
> 
> -class used_arg_t
> +struct used_arg_t
>  {
>   public:
>    int operator () (const char *p, int len);
> diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
> index b6e781f7450..e62a9a03ef9 100644
> --- a/gcc/ipa-cp.c
> +++ b/gcc/ipa-cp.c
> @@ -130,7 +130,7 @@ template <typename valtype> class ipcp_value;
>  /* Describes a particular source for an IPA-CP value.  */
> 
>  template <typename valtype>
> -class ipcp_value_source
> +struct ipcp_value_source
>  {
>  public:
>    /* Aggregate offset of the source, negative if the source is scalar value 
> of
> @@ -209,7 +209,7 @@ public:
>     contains_variable flag should be disregarded.  */
> 
>  template <typename valtype>
> -class ipcp_lattice
> +struct ipcp_lattice
>  {
>  public:
>    /* The list of known values and types in this lattice.  Note that values 
> are
> @@ -236,7 +236,7 @@ public:
>  /* Lattice of tree values with an offset to describe a part of an
>     aggregate.  */
> 
> -class ipcp_agg_lattice : public ipcp_lattice<tree>
> +struct ipcp_agg_lattice : public ipcp_lattice<tree>
>  {
>  public:
>    /* Offset that is being described by this lattice. */
> diff --git a/gcc/poly-int.h b/gcc/poly-int.h
> index d68a652b5fa..635f1ebeef6 100644
> --- a/gcc/poly-int.h
> +++ b/gcc/poly-int.h
> @@ -335,7 +335,7 @@ struct poly_result<T1, T2, 2>
>  /* A base POD class for polynomial integers.  The polynomial has N
>     coefficients of type C.  */
>  template<unsigned int N, typename C>
> -class poly_int_pod
> +struct poly_int_pod
>  {
>  public:
>    template<typename Ca>
> diff --git a/gcc/profile-count.h b/gcc/profile-count.h
> index cbab5965ed6..e584aab641f 100644
> --- a/gcc/profile-count.h
> +++ b/gcc/profile-count.h
> @@ -676,7 +676,7 @@ public:
>  
>  class sreal;
>  
> -class GTY(()) profile_count
> +struct GTY(()) profile_count
>  {
>  public:
>    /* Use 62bit to hold basic block counters.  Should be at least
> diff --git a/gcc/rtl.h b/gcc/rtl.h
> index 31fba823435..fc1a66416cc 100644
> --- a/gcc/rtl.h
> +++ b/gcc/rtl.h
> @@ -589,7 +594,7 @@ class GTY(()) rtx_nonjump_insn : public rtx_insn
>       from rtl.def.  */
>  };
> 
> -class GTY(()) rtx_jump_insn : public rtx_insn
> +struct GTY(()) rtx_jump_insn : public rtx_insn
>  {
>  public:
>    /* No extra fields, but adds the invariant:
> @@ -533,7 +538,7 @@ is_a_helper <const rtx_sequence *>::test (const_rtx rt)
>    return rt->code == SEQUENCE;
>  }
> 
> -class GTY(()) rtx_insn : public rtx_def
> +struct GTY(()) rtx_insn : public rtx_def
>  {
>  public:
>    /* No extra fields, but adds the invariant:

Might as well get rid of these "public:"s too, unless you feel they
should be kept.

OK with those changes (or without the last one), thanks.

Richard

Reply via email to