Martin Sebor <[email protected]> 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