1. 14 Jan, 2020 16 commits
    • Initial commit of analyzer · 757bf1df
      This patch adds a static analysis pass to the middle-end, focusing
      for this release on C code, and malloc/free issues in particular.
      
      See:
       https://gcc.gnu.org/wiki/DavidMalcolm/StaticAnalyzer
      
      gcc/ChangeLog:
      	* Makefile.in (lang_opt_files): Add analyzer.opt.
      	(ANALYZER_OBJS): New.
      	(OBJS): Add digraph.o, graphviz.o, ordered-hash-map-tests.o,
      	tristate.o and ANALYZER_OBJS.
      	(TEXI_GCCINT_FILES): Add analyzer.texi.
      	* common.opt (-fanalyzer): New driver option.
      	* config.in: Regenerate.
      	* configure: Regenerate.
      	* configure.ac (--disable-analyzer, ENABLE_ANALYZER): New option.
      	(gccdepdir): Also create depdir for "analyzer" subdir.
      	* digraph.cc: New file.
      	* digraph.h: New file.
      	* doc/analyzer.texi: New file.
      	* doc/gccint.texi ("Static Analyzer") New menu item.
      	(analyzer.texi): Include it.
      	* doc/invoke.texi ("Static Analyzer Options"): New list and new section.
      	("Warning Options"): Add static analysis warnings to the list.
      	(-Wno-analyzer-double-fclose): New option.
      	(-Wno-analyzer-double-free): New option.
      	(-Wno-analyzer-exposure-through-output-file): New option.
      	(-Wno-analyzer-file-leak): New option.
      	(-Wno-analyzer-free-of-non-heap): New option.
      	(-Wno-analyzer-malloc-leak): New option.
      	(-Wno-analyzer-possible-null-argument): New option.
      	(-Wno-analyzer-possible-null-dereference): New option.
      	(-Wno-analyzer-null-argument): New option.
      	(-Wno-analyzer-null-dereference): New option.
      	(-Wno-analyzer-stale-setjmp-buffer): New option.
      	(-Wno-analyzer-tainted-array-index): New option.
      	(-Wno-analyzer-use-after-free): New option.
      	(-Wno-analyzer-use-of-pointer-in-stale-stack-frame): New option.
      	(-Wno-analyzer-use-of-uninitialized-value): New option.
      	(-Wanalyzer-too-complex): New option.
      	(-fanalyzer-call-summaries): New warning.
      	(-fanalyzer-checker=): New warning.
      	(-fanalyzer-fine-grained): New warning.
      	(-fno-analyzer-state-merge): New warning.
      	(-fno-analyzer-state-purge): New warning.
      	(-fanalyzer-transitivity): New warning.
      	(-fanalyzer-verbose-edges): New warning.
      	(-fanalyzer-verbose-state-changes): New warning.
      	(-fanalyzer-verbosity=): New warning.
      	(-fdump-analyzer): New warning.
      	(-fdump-analyzer-callgraph): New warning.
      	(-fdump-analyzer-exploded-graph): New warning.
      	(-fdump-analyzer-exploded-nodes): New warning.
      	(-fdump-analyzer-exploded-nodes-2): New warning.
      	(-fdump-analyzer-exploded-nodes-3): New warning.
      	(-fdump-analyzer-supergraph): New warning.
      	* doc/sourcebuild.texi (dg-require-dot): New.
      	(dg-check-dot): New.
      	* gdbinit.in (break-on-saved-diagnostic): New command.
      	* graphviz.cc: New file.
      	* graphviz.h: New file.
      	* ordered-hash-map-tests.cc: New file.
      	* ordered-hash-map.h: New file.
      	* passes.def (pass_analyzer): Add before
      	pass_ipa_whole_program_visibility.
      	* selftest-run-tests.c (selftest::run_tests): Call
      	selftest::ordered_hash_map_tests_cc_tests.
      	* selftest.h (selftest::ordered_hash_map_tests_cc_tests): New
      	decl.
      	* shortest-paths.h: New file.
      	* timevar.def (TV_ANALYZER): New timevar.
      	(TV_ANALYZER_SUPERGRAPH): Likewise.
      	(TV_ANALYZER_STATE_PURGE): Likewise.
      	(TV_ANALYZER_PLAN): Likewise.
      	(TV_ANALYZER_SCC): Likewise.
      	(TV_ANALYZER_WORKLIST): Likewise.
      	(TV_ANALYZER_DUMP): Likewise.
      	(TV_ANALYZER_DIAGNOSTICS): Likewise.
      	(TV_ANALYZER_SHORTEST_PATHS): Likewise.
      	* tree-pass.h (make_pass_analyzer): New decl.
      	* tristate.cc: New file.
      	* tristate.h: New file.
      
      gcc/analyzer/ChangeLog:
      	* ChangeLog: New file.
      	* analyzer-selftests.cc: New file.
      	* analyzer-selftests.h: New file.
      	* analyzer.opt: New file.
      	* analysis-plan.cc: New file.
      	* analysis-plan.h: New file.
      	* analyzer-logging.cc: New file.
      	* analyzer-logging.h: New file.
      	* analyzer-pass.cc: New file.
      	* analyzer.cc: New file.
      	* analyzer.h: New file.
      	* call-string.cc: New file.
      	* call-string.h: New file.
      	* checker-path.cc: New file.
      	* checker-path.h: New file.
      	* constraint-manager.cc: New file.
      	* constraint-manager.h: New file.
      	* diagnostic-manager.cc: New file.
      	* diagnostic-manager.h: New file.
      	* engine.cc: New file.
      	* engine.h: New file.
      	* exploded-graph.h: New file.
      	* pending-diagnostic.cc: New file.
      	* pending-diagnostic.h: New file.
      	* program-point.cc: New file.
      	* program-point.h: New file.
      	* program-state.cc: New file.
      	* program-state.h: New file.
      	* region-model.cc: New file.
      	* region-model.h: New file.
      	* sm-file.cc: New file.
      	* sm-malloc.cc: New file.
      	* sm-malloc.dot: New file.
      	* sm-pattern-test.cc: New file.
      	* sm-sensitive.cc: New file.
      	* sm-signal.cc: New file.
      	* sm-taint.cc: New file.
      	* sm.cc: New file.
      	* sm.h: New file.
      	* state-purge.cc: New file.
      	* state-purge.h: New file.
      	* supergraph.cc: New file.
      	* supergraph.h: New file.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/analyzer/CVE-2005-1689-minimal.c: New test.
      	* gcc.dg/analyzer/abort.c: New test.
      	* gcc.dg/analyzer/alloca-leak.c: New test.
      	* gcc.dg/analyzer/analyzer-decls.h: New header.
      	* gcc.dg/analyzer/analyzer-verbosity-0.c: New test.
      	* gcc.dg/analyzer/analyzer-verbosity-1.c: New test.
      	* gcc.dg/analyzer/analyzer-verbosity-2.c: New test.
      	* gcc.dg/analyzer/analyzer.exp: New suite.
      	* gcc.dg/analyzer/attribute-nonnull.c: New test.
      	* gcc.dg/analyzer/call-summaries-1.c: New test.
      	* gcc.dg/analyzer/conditionals-2.c: New test.
      	* gcc.dg/analyzer/conditionals-3.c: New test.
      	* gcc.dg/analyzer/conditionals-notrans.c: New test.
      	* gcc.dg/analyzer/conditionals-trans.c: New test.
      	* gcc.dg/analyzer/data-model-1.c: New test.
      	* gcc.dg/analyzer/data-model-2.c: New test.
      	* gcc.dg/analyzer/data-model-3.c: New test.
      	* gcc.dg/analyzer/data-model-4.c: New test.
      	* gcc.dg/analyzer/data-model-5.c: New test.
      	* gcc.dg/analyzer/data-model-5b.c: New test.
      	* gcc.dg/analyzer/data-model-5c.c: New test.
      	* gcc.dg/analyzer/data-model-5d.c: New test.
      	* gcc.dg/analyzer/data-model-6.c: New test.
      	* gcc.dg/analyzer/data-model-7.c: New test.
      	* gcc.dg/analyzer/data-model-8.c: New test.
      	* gcc.dg/analyzer/data-model-9.c: New test.
      	* gcc.dg/analyzer/data-model-11.c: New test.
      	* gcc.dg/analyzer/data-model-12.c: New test.
      	* gcc.dg/analyzer/data-model-13.c: New test.
      	* gcc.dg/analyzer/data-model-14.c: New test.
      	* gcc.dg/analyzer/data-model-15.c: New test.
      	* gcc.dg/analyzer/data-model-16.c: New test.
      	* gcc.dg/analyzer/data-model-17.c: New test.
      	* gcc.dg/analyzer/data-model-18.c: New test.
      	* gcc.dg/analyzer/data-model-19.c: New test.
      	* gcc.dg/analyzer/data-model-path-1.c: New test.
      	* gcc.dg/analyzer/disabling.c: New test.
      	* gcc.dg/analyzer/dot-output.c: New test.
      	* gcc.dg/analyzer/double-free-lto-1-a.c: New test.
      	* gcc.dg/analyzer/double-free-lto-1-b.c: New test.
      	* gcc.dg/analyzer/double-free-lto-1.h: New header.
      	* gcc.dg/analyzer/equivalence.c: New test.
      	* gcc.dg/analyzer/explode-1.c: New test.
      	* gcc.dg/analyzer/explode-2.c: New test.
      	* gcc.dg/analyzer/factorial.c: New test.
      	* gcc.dg/analyzer/fibonacci.c: New test.
      	* gcc.dg/analyzer/fields.c: New test.
      	* gcc.dg/analyzer/file-1.c: New test.
      	* gcc.dg/analyzer/file-2.c: New test.
      	* gcc.dg/analyzer/function-ptr-1.c: New test.
      	* gcc.dg/analyzer/function-ptr-2.c: New test.
      	* gcc.dg/analyzer/function-ptr-3.c: New test.
      	* gcc.dg/analyzer/gzio-2.c: New test.
      	* gcc.dg/analyzer/gzio-3.c: New test.
      	* gcc.dg/analyzer/gzio-3a.c: New test.
      	* gcc.dg/analyzer/gzio.c: New test.
      	* gcc.dg/analyzer/infinite-recursion.c: New test.
      	* gcc.dg/analyzer/loop-2.c: New test.
      	* gcc.dg/analyzer/loop-2a.c: New test.
      	* gcc.dg/analyzer/loop-3.c: New test.
      	* gcc.dg/analyzer/loop-4.c: New test.
      	* gcc.dg/analyzer/loop.c: New test.
      	* gcc.dg/analyzer/malloc-1.c: New test.
      	* gcc.dg/analyzer/malloc-2.c: New test.
      	* gcc.dg/analyzer/malloc-3.c: New test.
      	* gcc.dg/analyzer/malloc-callbacks.c: New test.
      	* gcc.dg/analyzer/malloc-dce.c: New test.
      	* gcc.dg/analyzer/malloc-dedupe-1.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-1.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-10.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-11.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-12.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-13.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-2.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-3.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-4.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-5.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-6.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-7.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-8-double-free.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-8-lto-a.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-8-lto-b.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-8-lto-c.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-8-lto.h: New test.
      	* gcc.dg/analyzer/malloc-ipa-8-unchecked.c: New test.
      	* gcc.dg/analyzer/malloc-ipa-9.c: New test.
      	* gcc.dg/analyzer/malloc-macro-inline-events.c: New test.
      	* gcc.dg/analyzer/malloc-macro-separate-events.c: New test.
      	* gcc.dg/analyzer/malloc-macro.h: New header.
      	* gcc.dg/analyzer/malloc-many-paths-1.c: New test.
      	* gcc.dg/analyzer/malloc-many-paths-2.c: New test.
      	* gcc.dg/analyzer/malloc-many-paths-3.c: New test.
      	* gcc.dg/analyzer/malloc-paths-1.c: New test.
      	* gcc.dg/analyzer/malloc-paths-10.c: New test.
      	* gcc.dg/analyzer/malloc-paths-2.c: New test.
      	* gcc.dg/analyzer/malloc-paths-3.c: New test.
      	* gcc.dg/analyzer/malloc-paths-4.c: New test.
      	* gcc.dg/analyzer/malloc-paths-5.c: New test.
      	* gcc.dg/analyzer/malloc-paths-6.c: New test.
      	* gcc.dg/analyzer/malloc-paths-7.c: New test.
      	* gcc.dg/analyzer/malloc-paths-8.c: New test.
      	* gcc.dg/analyzer/malloc-paths-9.c: New test.
      	* gcc.dg/analyzer/malloc-vs-local-1a.c: New test.
      	* gcc.dg/analyzer/malloc-vs-local-1b.c: New test.
      	* gcc.dg/analyzer/malloc-vs-local-2.c: New test.
      	* gcc.dg/analyzer/malloc-vs-local-3.c: New test.
      	* gcc.dg/analyzer/malloc-vs-local-4.c: New test.
      	* gcc.dg/analyzer/operations.c: New test.
      	* gcc.dg/analyzer/params-2.c: New test.
      	* gcc.dg/analyzer/params.c: New test.
      	* gcc.dg/analyzer/paths-1.c: New test.
      	* gcc.dg/analyzer/paths-1a.c: New test.
      	* gcc.dg/analyzer/paths-2.c: New test.
      	* gcc.dg/analyzer/paths-3.c: New test.
      	* gcc.dg/analyzer/paths-4.c: New test.
      	* gcc.dg/analyzer/paths-5.c: New test.
      	* gcc.dg/analyzer/paths-6.c: New test.
      	* gcc.dg/analyzer/paths-7.c: New test.
      	* gcc.dg/analyzer/pattern-test-1.c: New test.
      	* gcc.dg/analyzer/pattern-test-2.c: New test.
      	* gcc.dg/analyzer/pointer-merging.c: New test.
      	* gcc.dg/analyzer/pr61861.c: New test.
      	* gcc.dg/analyzer/pragma-1.c: New test.
      	* gcc.dg/analyzer/scope-1.c: New test.
      	* gcc.dg/analyzer/sensitive-1.c: New test.
      	* gcc.dg/analyzer/setjmp-1.c: New test.
      	* gcc.dg/analyzer/setjmp-2.c: New test.
      	* gcc.dg/analyzer/setjmp-3.c: New test.
      	* gcc.dg/analyzer/setjmp-4.c: New test.
      	* gcc.dg/analyzer/setjmp-5.c: New test.
      	* gcc.dg/analyzer/setjmp-6.c: New test.
      	* gcc.dg/analyzer/setjmp-7.c: New test.
      	* gcc.dg/analyzer/setjmp-7a.c: New test.
      	* gcc.dg/analyzer/setjmp-8.c: New test.
      	* gcc.dg/analyzer/setjmp-9.c: New test.
      	* gcc.dg/analyzer/signal-1.c: New test.
      	* gcc.dg/analyzer/signal-2.c: New test.
      	* gcc.dg/analyzer/signal-3.c: New test.
      	* gcc.dg/analyzer/signal-4a.c: New test.
      	* gcc.dg/analyzer/signal-4b.c: New test.
      	* gcc.dg/analyzer/strcmp-1.c: New test.
      	* gcc.dg/analyzer/switch.c: New test.
      	* gcc.dg/analyzer/taint-1.c: New test.
      	* gcc.dg/analyzer/zlib-1.c: New test.
      	* gcc.dg/analyzer/zlib-2.c: New test.
      	* gcc.dg/analyzer/zlib-3.c: New test.
      	* gcc.dg/analyzer/zlib-4.c: New test.
      	* gcc.dg/analyzer/zlib-5.c: New test.
      	* gcc.dg/analyzer/zlib-6.c: New test.
      	* lib/gcc-defs.exp (dg-check-dot): New procedure.
      	* lib/target-supports.exp (check_dot_available): New procedure.
      	(check_effective_target_analyzer): New.
      	* lib/target-supports-dg.exp (dg-require-dot): New procedure.
      David Malcolm committed
    • PR c++/92590 - wrong handling of inherited default ctor. · 08c8c973
      I thought my earlier fix for 91930 was an obvious bug fix, but apparently an
      inherited constructor does not count as user-declared.  So this patch
      reverts that change and the other follow-on patches, and fixes 91930
      differently, by not letting the inherited default constructor hide the
      implicitly-declared default constructor.
      
      	* class.c (add_method): A constrained inherited ctor doesn't hide an
      	implicit derived ctor.
      
      	Revert:
      	PR c++/91930 - ICE with constrained inherited default ctor.
      	* name-lookup.c (do_class_using_decl): Set TYPE_HAS_USER_CONSTRUCTOR
      	for inherited constructor.
      	PR c++/92552 - ICE with inherited constrained default ctor.
      	* pt.c (instantiate_class_template_1): Copy
      	TYPE_HAS_USER_CONSTRUCTOR.
      	PR c++/92594 - ICE with inherited trivial default ctor.
      	* method.c (trivial_fn_p): Treat an inherited default constructor
      	like a normal default constructor.
      Jason Merrill committed
    • [PR90916] ICE in retrieve specialization · a5a3c2dc
      https://gcc.gnu.org/ml/gcc-patches/2020-01/msg00809.html
      	PR c++/90916
      	* pt.c (retrieve_specialization): Get the TI from the decl or the
      	classtype as appropriate.
      Nathan Sidwell committed
    • PR target/93254 - -msse generates sse2 instructions · 6bd65ad8
      	* config/i386/i386.md (*movsf_internal): Require SSE2 ISA for
      	alternatives 9 and 10.
      Uros Bizjak committed
    • hash-table.h: support non-zero empty values in empty_slow (v2) · 7ca50de0
      gcc/cp/ChangeLog:
      	* cp-gimplify.c (source_location_table_entry_hash::empty_zero_p):
      	New static constant.
      	* cp-tree.h (named_decl_hash::empty_zero_p): Likewise.
      	(struct named_label_hash::empty_zero_p): Likewise.
      	* decl2.c (mangled_decl_hash::empty_zero_p): Likewise.
      
      gcc/ChangeLog:
      	* attribs.c (excl_hash_traits::empty_zero_p): New static constant.
      	* gcov.c (function_start_pair_hash::empty_zero_p): Likewise.
      	* graphite.c (struct sese_scev_hash::empty_zero_p): Likewise.
      	* hash-map-tests.c (selftest::test_nonzero_empty_key): New selftest.
      	(selftest::hash_map_tests_c_tests): Call it.
      	* hash-map-traits.h (simple_hashmap_traits::empty_zero_p):
      	New static constant, using the value of = H::empty_zero_p.
      	(unbounded_hashmap_traits::empty_zero_p): Likewise, using the value
      	from default_hash_traits <Value>.
      	* hash-map.h (hash_map::empty_zero_p): Likewise, using the value
      	from Traits.
      	* hash-set-tests.c (value_hash_traits::empty_zero_p): Likewise.
      	* hash-table.h (hash_table::alloc_entries): Guard the loop of
      	calls to mark_empty with !Descriptor::empty_zero_p.
      	(hash_table::empty_slow): Conditionalize the memset call with a
      	check that Descriptor::empty_zero_p; otherwise, loop through the
      	entries calling mark_empty on them.
      	* hash-traits.h (int_hash::empty_zero_p): New static constant.
      	(pointer_hash::empty_zero_p): Likewise.
      	(pair_hash::empty_zero_p): Likewise.
      	* ipa-devirt.c (default_hash_traits <type_pair>::empty_zero_p):
      	Likewise.
      	* ipa-prop.c (ipa_bit_ggc_hash_traits::empty_zero_p): Likewise.
      	(ipa_vr_ggc_hash_traits::empty_zero_p): Likewise.
      	* profile.c (location_triplet_hash::empty_zero_p): Likewise.
      	* sanopt.c (sanopt_tree_triplet_hash::empty_zero_p): Likewise.
      	(sanopt_tree_couple_hash::empty_zero_p): Likewise.
      	* tree-hasher.h (int_tree_hasher::empty_zero_p): Likewise.
      	* tree-ssa-sccvn.c (vn_ssa_aux_hasher::empty_zero_p): Likewise.
      	* tree-vect-slp.c (bst_traits::empty_zero_p): Likewise.
      	* tree-vectorizer.h
      	(default_hash_traits<scalar_cond_masked_key>::empty_zero_p):
      	Likewise.
      David Malcolm committed
    • PR c++/92594 - ICE with inherited trivial default ctor. · 8982b553
      Here we were getting confused about whether or not pod_tuple has a trivial
      default constructor.  bar inherits the trivial e default constructor; the
      effect of calling that inherited constructor is equivalent to calling a
      defaulted default constructor in bar, so let's treat it as such.
      
      	* method.c (trivial_fn_p): Treat an inherited default constructor
      	like a normal default constructor.
      Jason Merrill committed
    • PR c++/92009 - ICE with punning of typeid. · 80de0002
      There were two issues in this PR:
      
      1) We were crashing in is_really_empty_class because we say that the
      internal RTTI types are classes, but never gave them TYPE_BINFO.
      
      2) We were allowing the cast to a different pointer type because STRIP_NOPS
      in cxx_fold_indirect_ref ignored REINTERPRET_CAST_P.
      
      	* rtti.c (get_tinfo_desc): Call xref_basetypes.
      	* constexpr.c (cxx_fold_indirect_ref): Don't strip
      	REINTERPRET_CAST_P.
      Jason Merrill committed
    • Fix dejagnu pruning of constexpr context messages. · 336da03c
      I wonder why nobody fixed this until now; it's been two years since the
      diagnostic context output was changed.
      
      	* lib/prune.exp (prune_gcc_output): Adjust constexpr pattern.
      Jason Merrill committed
    • The mentioned auto-generated file is no more part of the · 780e19f8
      GCC sources, it's auto-generated in $(builddir) during build.
      
      	PR target/92055
      	* contrib/gcc_update (files_and_dependencies): Remove
      	entry for gcc/config/avr/t-multilib.
      Georg-Johann Lay committed
    • Typo. · 03e87724
      libgcc/
      	* config/avr/lib1funcs.S (skip): Simplify.
      Georg-Johann Lay committed
    • PR middle-end/93246 - missing alias subsets · 6b8df3e4
      Starting with the introduction of TYPE_TYPELESS_STORAGE the situation
      of having a alias-set zero aggregate field became more common which
      prevents recording alias-sets of fields of said aggregate as subset
      of the outer aggregate.  component_uses_parent_alias_set_from in the
      past fended off some of the issues with that but the alias oracles
      use of the alias set of the base of an access path never appropriately
      handled it.
      
      The following makes it so that alias-sets of fields of alias-set zero
      aggregate fields are still recorded as subset of the container.
      
      2020-01-14  Richard Biener  <rguenther@suse.de>
      
      	PR middle-end/93246
      	* alias.c (record_component_aliases): Take superset to record
      	into, recurse for alias-set zero fields.
      	(record_component_aliases): New oveerload wrapping around the above.
      
      	* g++.dg/torture/pr93246.C: New testcase.
      Richard Biener committed
    • Fix typo and avoid possible memory leak in average_num_loop_insns · b38e86dd
      Function average_num_loop_insns forgets to free loop body in early
      return.  Besides, overflow comparison checks 1000000 (e6) but the
      return value is 100000 (e5), fix this typo.
      
      gcc/ChangeLog
      
      2020-01-14  Kewen Lin  <linkw@gcc.gnu.org>
      
          * cfgloopanal.c (average_num_loop_insns): Free bbs when early
          return, fix typo on return value.
      Kewen Lin committed
    • PR c++/92746 - ICE with noexcept of function concept check. · edabbec3
      Another place that needs to specially handle Concepts TS function-style
      concepts.
      
      	* except.c (check_noexcept_r): Handle concept-check.
      Jason Merrill committed
    • PR c++/92582 - ICE with member template as requirement. · 8ca4435f
      Here, we weren't recognizing that the template parameter of A is used by the
      reference to d in the requires-clause of f.  Fixed by passing down the
      active template parameters in the context of normalization, and adding to
      the mapping any such parameters shared by a member template used in the
      constraint-expression.
      
      	* pt.c (struct find_template_parameter_info): Add ctx_parms.
      	(any_template_parm_r): Handle TEMPLATE_DECL.
      	(find_template_parameters): Take parms instead of their depth.
      	* constraint.cc (build_parameter_mapping): Pass them.
      Jason Merrill committed
    • Missed function specialization + partial devirtualization · f1ba88b1
      v8:
       1. Rebase to master with Martin's static function (r280043) comments merge.
          Boostrap/testsuite/SPEC2017 tested pass on Power8-LE.
       2. TODO:
          2.1. C++ devirt for multiple speculative call targets.
          2.2. ipa-icf ipa_merge_profiles refine with COMDAT inline testcase.
      
      This patch aims to fix PR69678 caused by PGO indirect call profiling
      performance issues.
      The bug that profiling data is never working was fixed by Martin's pull
      back of topN patches, performance got GEOMEAN ~1% improvement(+24% for
      511.povray_r specifically).
      Still, currently the default profile only generates SINGLE indirect target
      that called more than 75%.  This patch leverages MULTIPLE indirect
      targets use in LTO-WPA and LTO-LTRANS stage, as a result, function
      specialization, profiling, partial devirtualization, inlining and
      cloning could be done successfully based on it.
      Performance can get improved from 0.70 sec to 0.38 sec on simple tests.
      Details are:
        1.  PGO with topn is enabled by default now, but only one indirect
        target edge will be generated in ipa-profile pass, so add variables to enable
        multiple speculative edges through passes, speculative_id will record the
        direct edge index bind to the indirect edge, indirect_call_targets length
        records how many direct edges owned by the indirect edge, postpone gimple_ic
        to ipa-profile like default as inline pass will decide whether it is benefit
        to transform indirect call.
        2.  Use speculative_id to track and search the reference node matched
        with the direct edge's callee for multiple targets.  Actually, it is the
        caller's responsibility to handle the direct edges mapped to same indirect
        edge.  speculative_call_info will return one of the direct edge specified,
        this will leverage current IPA edge process framework mostly.
        3.  Enable LTO WPA/LTRANS stage multiple indirect call targets analysis for
        profile full support in ipa passes and cgraph_edge functions.  speculative_id
        can be set by make_speculative id when multiple targets are binded to
        one indirect edge, and cloned if new edge is cloned.  speculative_id
        is streamed out and stream int by lto like lto_stmt_uid.
        4.  Create and duplicate all speculative direct edge's call summary
        in ipa-fnsummary.c with auto_vec.
        5.  Add 1 in module testcase and 2 cross module testcases.
        6.  Bootstrap and regression test passed on Power8-LE.  No function
        and performance regression for SPEC2017.
      
      gcc/ChangeLog
      
      	2020-01-14  Xiong Hu Luo  <luoxhu@linux.ibm.com>
      
      	PR ipa/69678
      	* cgraph.c (symbol_table::create_edge): Init speculative_id and
      	target_prob.
      	(cgraph_edge::make_speculative): Add param for setting speculative_id
      	and target_prob.
      	(cgraph_edge::speculative_call_info): Update comments and find reference
      	by speculative_id for multiple indirect targets.
      	(cgraph_edge::resolve_speculation): Decrease the speculations
      	for indirect edge, drop it's speculative if not direct target
      	left. Update comments.
      	(cgraph_edge::redirect_call_stmt_to_callee): Likewise.
      	(cgraph_node::dump): Print num_speculative_call_targets.
      	(cgraph_node::verify_node): Don't report error if speculative
      	edge not include statement.
      	(cgraph_edge::num_speculative_call_targets_p): New function.
      	* cgraph.h (int common_target_id): Remove.
      	(int common_target_probability): Remove.
      	(num_speculative_call_targets): New variable.
      	(make_speculative): Add param for setting speculative_id.
      	(cgraph_edge::num_speculative_call_targets_p): New declare.
      	(target_prob): New variable.
      	(speculative_id): New variable.
      	* ipa-fnsummary.c (analyze_function_body): Create and duplicate
      	  call summaries for multiple speculative call targets.
      	* cgraphclones.c (cgraph_node::create_clone): Clone speculative_id.
      	* ipa-profile.c (struct speculative_call_target): New struct.
      	(class speculative_call_summary): New class.
      	(class speculative_call_summaries): New class.
      	(call_sums): New variable.
      	(ipa_profile_generate_summary): Generate indirect multiple targets summaries.
      	(ipa_profile_write_edge_summary): New function.
      	(ipa_profile_write_summary): Stream out indirect multiple targets summaries.
      	(ipa_profile_dump_all_summaries): New function.
      	(ipa_profile_read_edge_summary): New function.
      	(ipa_profile_read_summary_section): New function.
      	(ipa_profile_read_summary): Stream in indirect multiple targets summaries.
      	(ipa_profile): Generate num_speculative_call_targets from
      	profile summaries.
      	* ipa-ref.h (speculative_id): New variable.
      	* ipa-utils.c (ipa_merge_profiles): Update with target_prob.
      	* lto-cgraph.c (lto_output_edge): Remove indirect common_target_id and
      	common_target_probability.   Stream out speculative_id and
      	num_speculative_call_targets.
      	(input_edge): Likewise.
      	* predict.c (dump_prediction): Remove edges count assert to be
      	precise.
      	* symtab.c (symtab_node::create_reference): Init speculative_id.
      	(symtab_node::clone_references): Clone speculative_id.
      	(symtab_node::clone_referring): Clone speculative_id.
      	(symtab_node::clone_reference): Clone speculative_id.
      	(symtab_node::clear_stmts_in_references): Clear speculative_id.
      	* tree-inline.c (copy_bb): Duplicate all the speculative edges
      	if indirect call contains multiple speculative targets.
      	* value-prof.h  (check_ic_target): Remove.
      	* value-prof.c  (gimple_value_profile_transformations):
      	Use void function gimple_ic_transform.
      	* value-prof.c  (gimple_ic_transform): Handle topn case.
      	Fix comment typos.  Change it to a void function.
      
      gcc/testsuite/ChangeLog
      
      	2020-01-14  Xiong Hu Luo  <luoxhu@linux.ibm.com>
      
      	PR ipa/69678
      	* gcc.dg/tree-prof/indir-call-prof-topn.c: New testcase.
      	* gcc.dg/tree-prof/crossmodule-indir-call-topn-1.c: New testcase.
      	* gcc.dg/tree-prof/crossmodule-indir-call-topn-1a.c: New testcase.
      	* gcc.dg/tree-prof/crossmodule-indir-call-topn-2.c: New testcase.
      	* lib/scandump.exp: Dump executable file name.
      	* lib/scanwpaipa.exp: New scan-pgo-wap-ipa-dump.
      Xiong Hu Luo committed
    • Daily bump. · 64378144
      GCC Administrator committed
  2. 13 Jan, 2020 24 commits
    • Add initial octeontx2 support. · 38c69700
      This adds octeontx2 naming.  It currently uses the cortexa57
      cost model and schedule model until I submit this.  This is
      more a place holder to get the naming of the cores in GCC 10.
      I will submit the cost model in the next couple of days.
      
      ChangeLog:
      * config/aarch64/aarch64-cores.def (octeontx2): New define.
      (octeontx2t98): New define.
      (octeontx2t96): New define.
      (octeontx2t93): New define.
      (octeontx2f95): New define.
      (octeontx2f95n): New define.
      (octeontx2f95mm): New define.
      * config/aarch64/aarch64-tune.md: Regenerate.
      * doc/invoke.texi (-mcpu=): Document the new cpu types.
      Andrew Pinski committed
    • Replace update_web_docs_libstdcxx_svn with update_web_docs_libstdcxx_git · 97e2f333
      This patch replaces the update_web_docs_libstdcxx_svn script, that
      updates online documentation from its sources in the GCC repository, run
      once a day from cron, with update_web_docs_libstdcxx_git.
      
      	* update_web_docs_libstdcxx_git: New file.
      	* update_web_docs_libstdcxx_svn: Remove.
      	* crontab: Use update_web_docs_libstdcxx_git.
      Jonathan Wakely committed
    • testsuite: remove unused dg-line directive · 20571289
      gcc/testsuite/ChangeLog:
      	* gcc.dg/plugin/diagnostic-test-paths-2.c: Remove unused dg-line
      	directive.
      David Malcolm committed
    • Revert "contrib: Add in the default push rule which was overridden" · 11b81575
      This reverts commit b60563a8.
      
      Doesn't work as expected.
      Richard Earnshaw committed
    • contrib: Add in the default push rule which was overridden · b60563a8
      When we add a push rule, the default rule gets removed, so add that in
      explicitly.  This needs to come last since otherwise it would match
      the custom redirecting rules we have for personal and vendor
      sub-spaces.
      
      I also noticed that the push rule for the vendor subspace still had
      a force push default.  We don't want that so remove it.
      
      	* gcc-git-customization.sh: Add back the default rule that
      	is lost by adding a custom push rule.
      	* git-fetch-vendor.sh: Likewise, also remove '+' from push specs.
      Richard Earnshaw committed
    • IPA: Avoid segfault in devirtualization_time_bonus (PR 93223) · 8472660b
      2020-01-13  Martin Jambor  <mjambor@suse.cz>
      
      	PR ipa/93223
      	* ipa-cp.c (devirtualization_time_bonus): Check whether isummary is
      	NULL.
      
      	testsuite/
      	* g++.dg/ipa/pr93223.C: New test.
      Martin Jambor committed
    • PR c++/80265 - constexpr __builtin_mem*. · 69dc042f
      The library has already worked around this issue, but I was curious about
      why it wasn't working.  The answer: because we were passing &var to fold,
      which doesn't know about the constexpr values hash table.  Fixed by passing
      &"str" instead.
      
      	* constexpr.c (cxx_eval_builtin_function_call): Expose STRING_CST
      	to str/mem builtins.
      Jason Merrill committed
    • PR c++/33799 - destroy return value if local cleanup throws. · 7c82dd6c
      This is a pretty rare situation since the C++11 change to make all
      destructors default to noexcept, but it is still possible to define throwing
      destructors, and if a destructor for a local variable throws during the
      return, we've already constructed the return value, so now we need to
      destroy it.  I handled this somewhat like the new-expression cleanup; as in
      that case, this cleanup can't properly nest with the cleanups for local
      variables, so I introduce a cleanup region around the whole function and a
      flag variable to indicate whether the return value actually needs to be
      destroyed.
      
      Setting the flag requires giving a COMPOUND_EXPR as the operand of a
      RETURN_EXPR, so I adjust gimplify_return_expr to handle that.
      
      This doesn't currently work with deduced return type because we don't know
      the type when we're deciding whether to introduce the cleanup region.
      
      gcc/
      	* gimplify.c (gimplify_return_expr): Handle COMPOUND_EXPR.
      gcc/cp/
      	* cp-tree.h (current_retval_sentinel): New macro.
      	* decl.c (start_preparsed_function): Set up cleanup for retval.
      	* typeck.c (check_return_expr): Set current_retval_sentinel.
      Jason Merrill committed
    • PR c++/93238 - short right-shift with enum. · f1acad4e
      My earlier patch to reintroduce short_shift failed to adjust for the C++
      front end use of const_op1 rather than op1.
      
      	* typeck.c (cp_build_binary_op): Use folded op1 for short_shift.
      Jason Merrill committed
    • Replace update_web_docs_svn with update_web_docs_git. · 33742a0a
      This patch replaces the update_web_docs_svn script, that updates
      online documentation from its sources in the GCC repository, run once
      a day from cron, with update_web_docs_git.
      
      	* update_web_docs_git: New file.
      	* update_web_docs_svn: Remove.
      	* crontab: Use update_web_docs_svn.
      Joseph Myers committed
    • Fix typo in invoke.texi. · ac4d87c2
      Jason Merrill committed
    • Fix handling of overflow in C casts in integer constant expressions (PR c/93241). · 3d77686d
      Bug 93241 reports a case where certain C expressions involving casts,
      that would not be valid in an evaluated part of an integer constant
      expression (because of e.g. involving integer overflow), are wrongly
      rejected in an unevaluated part of an integer constant expression even
      though all the operands and operations are ones that are valid in that
      context.  This is a rejects-valid regression in GCC 4.5 and later
      relative to 4.4 (for some testcases; the one in the bug uses
      _Static_assert which isn't supported in those older releases).
      
      The rule in the C front end is that an expression with those
      properties (valid in an unevaluated part of an integer constant
      expression but not an evaluated part) must be represented either as an
      INTEGER_CST with TREE_OVERFLOW set or as a C_MAYBE_CONST_EXPR with
      C_MAYBE_CONST_EXPR_INT_OPERANDS set.  This patch fixes build_c_cast to
      check for that case and call note_integer_operands as needed.
      
      Bootstrapped with no regressions for x86_64-pc-linux-gnu.
      
      	PR c/93241
      gcc/c:
      	* c-typeck.c (build_c_cast): Check for expressions with integer
      	operands that can occur in an unevaluated part of an integer
      	constant expression and call note_integer_operands as needed.
      
      gcc/testsuite:
      	* gcc.dg/c11-static-assert-10.c, gcc.dg/c99-const-expr-15.c: New
      	tests.
      Joseph Myers committed
    • contrib: script to setup git to pull a vendors branches · b8f59c4b
      This simple script is intended to setup a new git configuration to
      pull the branches and tags for a specific vendor.  This should
      simplify some of the steps needed for working with a vendor's
      branches.
      
      	* git-fetch-vendor.sh: New file.
      Richard Earnshaw committed
    • contrib: Add git gcc-descr and gcc-undescr aliases. · e19db6a2
      2020-01-13  Jakub Jelinek  <jakub@redhat.com>
      
      	* contrib/gcc-git-customization.sh: Add git gcc-descr and gcc-undescr
      	aliases.
      Jakub Jelinek committed
    • contrib: Add script to help with customizing a git checkout for use with GCC · 743d4d82
      This patch is intended to help with folks setting up a git work
      environment for use with GCC following the transition to git.  It
      currently does a couple of things.
      
      1) Add an alias 'svn-rev' to git so that you can look up a legacy
      commit by its svn revision number.  This enables you to type
      	git svn-rev 1234
      and git will show the commit log entry relating to SVN r1234.
      
      2) Sets up tracking information for the user's personal area in
      the git repo.  It tries to figure out some sensible answers to the
      data it needs, but allows the user to override the values.  It then
      creates the fetch and push entries that are needed for tracking the
      extra refs. This implements one part of the recommendations that I've
      proposed in svnwrite.html for dealing with private branches.
      
      It should be possible to run the script more than once and for it to
      DTRT.  If you change your answers the configuration should be
      correctly updated.
      
      2020-01-13  Richard Earnshaw  <rearnsha@arm.com>
      
          * gcc-git-customization: New file.
      Richard Earnshaw committed
    • Remove usage of legacy param_ipa_cp_unit_growth. · 12122f94
      	* ipa-cp.c (get_max_overall_size): Use newly
      	renamed param param_ipa_cp_unit_growth.
      	* params.opt: Remove legacy param name.
      Martin Liska committed
    • PR tree-optimization/93213 - wrong code with -Og -foptimize-strlen · e13f37d9
      gcc/testsuite/ChangeLog:
      
      	PR tree-optimization/93213
      	* gcc.c-torture/execute/pr93213.c: New test.
      
      gcc/ChangeLog:
      
      	PR tree-optimization/93213
      	* tree-ssa-strlen.c (handle_store): Only allow single-byte nul-over-nul
      	stores to be eliminated.
      Martin Sebor committed
    • Exclude CL_WARNING and CL_PARAM from --help=optimize. · 5ab08934
      2020-01-13  Martin Liska  <mliska@suse.cz>
      
      	* opts.c (print_help): Do not print CL_PARAM
      	and CL_WARNING for CL_OPTIMIZATION.
      Martin Liska committed
    • libstdc++: Ensure root-dir converted to forward slash (PR93244) · fe7cc34f
      	PR libstdc++/93244
      	* include/bits/fs_path.h (path::generic_string<C,A>)
      	[_GLIBCXX_FILESYSTEM_IS_WINDOWS]: Convert root-dir to forward-slash.
      	* testsuite/27_io/filesystem/path/generic/generic_string.cc: Check
      	root-dir is converted to forward slash in generic pathname.
      	* testsuite/27_io/filesystem/path/generic/utf.cc: New test.
      	* testsuite/27_io/filesystem/path/generic/wchar_t.cc: New test.
      Jonathan Wakely committed
    • libstdc++: Value-initialize std::atomic for C++20 (P0883R2) · e4379a93
      This implements the new requirements for C++20 that std::atomic should
      initialize the atomic variable in its default constructor.
      
      This patch does not add the deprecated attribute to atomic_init, but
      that should be done at some point as it's deprecated in C++20.
      
      The paper also deprecates the ATOMIC_FLAG_INIT macro, although we can't
      apply the deprecated attribute to a macro.
      
      	PR libstdc++/58605
      	* include/bits/atomic_base.h (__cpp_lib_atomic_value_initialization):
      	Define.
      	(__atomic_flag_base, __atomic_base, __atomic_base<_PTp*>)
      	(__atomic_float): Add default member initializer for C++20.
      	* include/std/atomic (atomic): Likewise.
      	(atomic::atomic()): Remove noexcept-specifier on default constructor.
      	* include/std/version (__cpp_lib_atomic_value_initialization): Define.
      	* testsuite/29_atomics/atomic/cons/assign_neg.cc: Adjust dg-error line
      	number.
      	* testsuite/29_atomics/atomic/cons/copy_neg.cc: Likewise.
      	* testsuite/29_atomics/atomic/cons/value_init.cc: New test.
      	* testsuite/29_atomics/atomic_flag/cons/value_init.cc: New test.
      	* testsuite/29_atomics/atomic_flag/requirements/trivial.cc: Adjust
      	expected result for is_trivially_default_constructible.
      	* testsuite/29_atomics/atomic_float/requirements.cc: Likewise.
      	* testsuite/29_atomics/atomic_float/value_init.cc: New test.
      	* testsuite/29_atomics/atomic_integral/cons/assign_neg.cc: Likewise.
      	* testsuite/29_atomics/atomic_integral/cons/copy_neg.cc: Likewise.
      	* testsuite/29_atomics/atomic_integral/cons/value_init.cc
      	* testsuite/29_atomics/atomic_integral/requirements/trivial.cc: Adjust
      	expected results for is_trivially_default_constructible.
      	* testsuite/util/testsuite_common_types.h (has_trivial_dtor): Add
      	new test generator.
      Jonathan Wakely committed
    • doc: Note that some warnings depend on optimizations (PR 92757) · aef85e40
      	PR driver/92757
      	* doc/invoke.texi (Warning Options): Add caveat about some warnings
      	depending on optimization settings.
      Jonathan Wakely committed
    • tree-opt: Fix bootstrap failure in tree-ssa-forwprop.c some more PR90838 · eb7c7c52
      2020-01-13  Jakub Jelinek  <jakub@redhat.com>
      
      	PR tree-optimization/90838
      	* tree-ssa-forwprop.c (simplify_count_trailing_zeroes): Use
      	SCALAR_INT_TYPE_MODE directly in CTZ_DEFINED_VALUE_AT_ZERO macro
      	argument rather than to initialize temporary for targets that
      	don't use the mode argument at all.  Initialize ctzval to avoid
      	warning at -O0.
      Jakub Jelinek committed
    • Update gcc_release for move to git. · 67e63570
      This patch updates the gcc_release script, used for snapshots and
      releases, to use git instead of SVN.
      
      The parts of the changes used in building snapshots have been tested.
      The parts used for building releases have not, so it's likely further
      fixes may turn out to be needed there when releases are first built
      from git.
      
      	* gcc_release: Use git instead of SVN.
      	* crontab: Update gcc_release calls.
      Joseph Myers committed