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