Commit Graph

179421 Commits

Author SHA1 Message Date
Dimitrij Mojoski
172178c0c3 Autodetect C++ dialect in use for clang-format
PR other//97076
	* clang-format: Autodetect C++ standard in use rather than
	forcing C++03.
2020-09-17 15:22:33 -06:00
Marek Polacek
4f0aa5b051 c++: Add tests for fixed PRs.
Bugzilla inspection turned up a bunch of old(er) PRs that have been
fixed.  Let's include them not to regress in the future.

gcc/testsuite/ChangeLog:

	PR c++/87530
	PR c++/58156
	PR c++/68828
	PR c++/86002
	PR c++/91525
	PR c++/96223
	PR c++/87032
	PR c++/35098
	* g++.dg/cpp0x/move-return4.C: New test.
	* g++.dg/cpp0x/vt-58156.C: New test.
	* g++.dg/cpp2a/concepts-pr68828.C: New test.
	* g++.dg/cpp2a/concepts-pr86002.C: New test.
	* g++.dg/cpp2a/concepts-pr91525.C: New test.
	* g++.dg/cpp2a/constexpr-indeterminate1.C: New test.
	* g++.dg/cpp2a/desig17.C: New test.
	* g++.dg/ext/attrib62.C: New test.
2020-09-17 15:32:43 -04:00
Paul E. Murphy
c560591408 libgo: fix ptrace syscall hooks into glibc
ptrace is actually declared as a variadic function.  On ppc64le
the ABI requires to the caller to allocate space for the parameters
and allows the caller to modify them.

On ppc64le, depending on how and what version of GCC is used,
it will save to parameter save area.  This happened to clobber
a saved LR, and caused syscall.TestExecPtrace to fail with a timeout
when the tracee segfaults, and waits for the parent process to inspect.

Wrap this function to avoid directly calling glibc's ptrace from go.

Fixes golang/go#36698
Fixes go/92567

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/254755
2020-09-17 12:14:09 -07:00
Patrick Palka
4839de55e2 c-family: Macro support in -Wmisleading-indentation [PR80076]
Currently the -Wmisleading-indentation warning doesn't do any analysis
when the guarded statement or the statement after it is produced by a
macro.  This means we warn for:

  if (flag)
    foo ();
    bar ();

but not for:

  #define BAR bar
  if (flag)
    foo ();
    BAR ();

This patch extends the -Wmisleading-indentation implementation to
support analyzing such statements and their tokens.  This is done in the
"natural" way by resolving the location of each of the three tokens to
the token's macro expansion point.  (Additionally, if the tokens all
resolve to the same macro expansion point then we instead use their
locations within the macro definition.)  When these resolved locations
are all different, then we can proceed with applying the warning
heuristics to them as if no macros were involved.

gcc/c-family/ChangeLog:

	PR c/80076
	* c-indentation.c (should_warn_for_misleading_indentation): Move
	declarations of local variables closer to their first use.
	Handle virtual token locations by resolving them to their
	respective macro expansion points.  If all three tokens are
	produced from the same macro expansion, then instead use their
	loci within the macro definition.

gcc/objc/ChangeLog:

	PR c/80076
	* objc-gnu-runtime-abi-01.c
	(gnu_runtime_abi_01_get_class_super_ref): Reduce indentation of
	misleadingly indented return statements.
	* objc-next-runtime-abi-01.c
	(next_runtime_abi_01_get_class_super_ref): Likewise.

gcc/ChangeLog:

	PR c/80076
	* gensupport.c (alter_attrs_for_subst_insn) <case SET_ATTR>:
	Reduce indentation of misleadingly indented code fragment.
	* lra-constraints.c (multi_block_pseudo_p): Likewise.
	* sel-sched-ir.c (merge_fences): Likewise.

libcpp/ChangeLog:

	PR c/80076
	* include/line-map.h (first_map_in_common): Declare.
	* line-map.c (first_map_in_common): Remove static.

gcc/testsuite/ChangeLog:

	PR c/80076
	* c-c++-common/Wmisleading-indentation-5.c: New test.
2020-09-17 14:27:22 -04:00
Mark Wielaard
71e3d1970c Add DWARF5 variants of assembly scan tests that use DW_FORM_implicit_const
Some DWARF tests scan the assembly output looking for constant values.
When using DWARF5 those constants might use DW_FORM_implicit_const,
which are output (in the comments) after the attribute instead of
before. To make sure these tests work introduce a -gdwarf-5 variant
of these tests and explicitly use -gdwarf-2 for the original.

gcc/testsuite/ChangeLog:

	* gcc.dg/debug/dwarf2/inline2.c: Add -gdwarf-2.
	* g++.dg/debug/dwarf2/inline-var-1.C: Likewise.
	* gcc.dg/debug/dwarf2/pr41445-5.c: Likewise.
	* gcc.dg/debug/dwarf2/pr41445-6.c: Likewise.
	* gcc.dg/debug/dwarf2/inline6.c: New variant with -gdwarf-5.
	* g++.dg/debug/dwarf2/inline-var-3.C: Likewise.
	* gcc.dg/debug/dwarf2/pr41445-7.c: Likewise.
	* gcc.dg/debug/dwarf2/pr41445-8.c: Likewise.
2020-09-17 20:13:13 +02:00
Andrea Corallo
ee7aa7e7b9 aarch64: Fix dejaGNU directive in clastb_8.c testcase
gcc/testsuite/ChangeLog

2020-09-17  Andre Corallo  <andrea.corallo@arm.com>

	* gcc.target/aarch64/sve/clastb_8.c: Fix a dg-final scan
	directive.
2020-09-17 19:32:41 +02:00
Martin Sebor
90e4dcb79a Document -Wuninitialized for allocated objects.
gcc/ChangeLog:

	* doc/invoke.texi (-Wuninitialized): Document -Wuninitialized for
	allocated objects.
	 (-Wmaybe-uninitialized): Same.
2020-09-17 09:07:09 -06:00
David Edelsohn
21fdebc519 aix: apply socket.h extern "C++" more narrowly.
Recent Technology Levels of AIX 7.2 have made sys/socket.h more C++-aware,
which causes the fix to be applied in too many locations.  This patch adds
more context for the selection to apply the fix more narrowly.

fixincludes/ChangeLog:

2020-09-17  David Edelsohn  <dje.gcc@gmail.com>

	* inclhack.def (aix_externcpp1): Add more context to select.
	(aix_externcpp2): Same.
	* fixincl.x: Regenerate.
	* tests/base/sys/socket.h: Update expected results.
2020-09-17 14:18:32 +00:00
Patrick Palka
b28b621ac6 c++: requires-expressions and partial instantiation [PR96410]
This patch makes tsubst_requires_expr avoid substituting into a
requires-expression when partially instantiating a generic lambda.
This is necessary in general to ensure that we always check requirements
in lexical order (as in the first testcase below).  A mechanism similar
to PACK_EXPANSION_EXTRA_ARGS is added to remember template arguments and
defer substitution of requires-expressions.

Incidentally, this change also fixes the two mentioned PRs -- the
problem there is that tsubst_requires_expr was performing semantic
checks on template trees, and some of the checks are not prepared to
handle such trees.  With this patch, tsubst_requires_expr no longer
does any semantic checking at all when processing_template_decl.

gcc/cp/ChangeLog:

	PR c++/96409
	PR c++/96410
	* constraint.cc (tsubst_requires_expr): Use REQUIRES_EXPR_PARMS
	and REQUIRES_EXPR_REQS.  Use REQUIRES_EXPR_EXTRA_ARGS,
	add_extra_args and build_extra_args to defer substitution until
	we have all the template arguments.
	(finish_requires_expr): Adjust the call to build_min so that
	REQUIRES_EXPR_EXTRA_ARGS gets set to NULL_TREE.
	* cp-tree.def (REQUIRES_EXPR): Give it a third operand.
	* cp-tree.h (REQUIRES_EXPR_PARMS, REQUIRES_EXPR_REQS,
	REQUIRES_EXPR_EXTRA_ARGS): Define.
	(add_extra_args, build_extra_args): Declare.

gcc/testsuite/ChangeLog:

	PR c++/96409
	PR c++/96410
	* g++.dg/cpp2a/concepts-lambda13.C: New test.
	* g++.dg/cpp2a/concepts-lambda14.C: New test.
2020-09-17 09:16:02 -04:00
Christophe Lyon
9fcedcc391 libgcc/config/arm/fp16.c: Make _internal functions static inline
This patch makes the *_internal functions 'static inline' to avoid these warnings during the build:
/libgcc/config/arm/fp16.c:169:1: warning: no previous prototype for '__gnu_h2f_internal' [-Wmissing-prototypes]
/libgcc/config/arm/fp16.c:194:1: warning: no previous prototype for '__gnu_f2h_ieee' [-Wmissing-prototypes]
/libgcc/config/arm/fp16.c:200:1: warning: no previous prototype for '__gnu_h2f_ieee' [-Wmissing-prototypes]
/libgcc/config/arm/fp16.c:206:1: warning: no previous prototype for '__gnu_f2h_alternative' [-Wmissing-prototypes]
/libgcc/config/arm/fp16.c:212:1: warning: no previous prototype for '__gnu_h2f_alternative' [-Wmissing-prototypes]
/libgcc/config/arm/fp16.c:218:1: warning: no previous prototype for '__gnu_d2h_ieee' [-Wmissing-prototypes]
/libgcc/config/arm/fp16.c:224:1: warning: no previous prototype for '__gnu_d2h_alternative' [-Wmissing-prototypes]

2020-09-11  Torbjörn SVENSSON  <torbjorn.svensson@st.com>
	    Christophe Lyon  <christophe.lyon@linaro.org>

	libgcc/
	* config/arm/fp16.c (__gnu_h2f_internal): Add 'static inline'
	qualifier.
	(__gnu_f2h_ieee, __gnu_h2f_ieee, __gnu_f2h_alternative)
	(__gnu_h2f_alternative,__gnu_d2h_ieee, __gnu_d2h_alternative): Add
	missing prototypes.
2020-09-17 12:23:36 +00:00
Tobias Burnus
c12facd228 Fortran: Avoid double-free with parse error (PR96041, PR93423)
gcc/fortran/

	PR fortran/96041
	PR fortran/93423
	* decl.c (gfc_match_submod_proc): Avoid later double-free
	in the error case.
2020-09-17 14:01:09 +02:00
Richard Biener
c7f4be78cb CSE negated multiplications and divisions
This adds the capability to look for available negated multiplications
and divisions, replacing them with cheaper negates.

2020-09-17  Richard Biener  <rguenther@suse.de>

	* tree-ssa-sccvn.c (visit_nary_op): Value-number multiplications
	and divisions to negates of available negated forms.

	* gcc.dg/tree-ssa/ssa-fre-88.c: New testcase.
2020-09-17 13:56:15 +02:00
Eric Botcazou
225a08220e Fix assertion checking failure with tail call
gcc/ChangeLog:
	PR middle-end/97078
	* function.c (use_register_for_decl): Test cfun->tail_call_marked
	for a parameter here instead of...
	(assign_parm_setup_reg): ...here.

gcc/testsuite/ChangeLog:
	* gcc.dg/pr97078.c: New test.
2020-09-17 13:00:24 +02:00
Aldy Hernandez
80cbca3246 Allow copying of symbolic ranges to an irange.
This fixes an ICE when trying to copy a legacy value_range containing
a symbolic to a multi-range:

	min = make_ssa_name (type);
	max = build_int_cst (type, 55);
	value_range vv (min, max);
	int_range<2> vr = vv;

gcc/ChangeLog:

	* range-op.cc (multi_precision_range_tests): Normalize symbolics when copying to a
	multi-range.
	* value-range.cc (irange::copy_legacy_range): Add test.
2020-09-17 12:51:54 +02:00
Jan Hubicka
27eac88a3f Fix availability of functions in other partitions
* cgraph.c (cgraph_node::get_availability): Fix availability of
	functions in other partitions
	* varpool.c (varpool_node::get_availability): Likewise.
2020-09-17 12:41:07 +02:00
Wei Wentao
ec7ef30421 aarch64: Fixed unused variable warning in aarch64-unwind.h
libgcc/
	* config/aarch64/aarch64-unwind.h (aarch64_demangle_return_addr): Fix
	unused variable warning.
2020-09-17 10:40:23 +01:00
Christophe Lyon
21138a4e9b fixincludes/fixfixes.c: Fix 'set but not used' warning.
pz_tmp_base and pz_tmp_dot are always set, but used only when
_PC_NAME_MAX is defined.

This patch moves their declaration and definition undef #ifdef
_PC_NAME_MAX to avoid this warning.

2020-09-11  Torbjörn SVENSSON  <torbjorn.svensson@st.com>
	    Christophe Lyon  <christophe.lyon@linaro.org>

	fixincludes/
	* fixfixes.c (pz_tmp_base, pz_tmp_dot): Define only with
	_PC_NAME_MAX.
2020-09-17 09:36:42 +00:00
Jojo R
6ee9c21653 C-SKY: Add -msim option
gcc/ChangeLog:

	* config/csky/csky.opt (msim): New.
	* doc/invoke.texi (C-SKY Options): Document -msim.
	* config/csky/csky-elf.h (LIB_SPEC): Add simulator runtime.
2020-09-17 15:01:32 +08:00
Sergei Trofimovich
f723794355 doc: use @code{} instead of @samp{@command{}} around 'date %s'
Before the change 'man gcc' rendered "SOURCE_DATE_EPOCH" section as:
    ... the output of @command{date +%s} on GNU/Linux ...
After the change it renders as:
    ... the output of "date +%s" on GNU/Linux ...

gcc/ChangeLog:

	* doc/cppenv.texi: Use @code{} instead of @samp{@command{}}
	around 'date %s'.
2020-09-17 07:47:11 +01:00
liuhongt
a8c4b66a41 If -mavx implies -mxsave, then -mno-xsave should imply -mno-avx.
Current status is -mno-avx implies -mno-xsave which should be wrong.

gcc/ChangeLog

	* common/config/i386/i386-common.c
	(OPTION_MASK_ISA_AVX_UNSET): Remove OPTION_MASK_ISA_XSAVE_UNSET.
	(OPTION_MASK_ISA_XSAVE_UNSET): Add OPTION_MASK_ISA_AVX_UNSET.

gcc/testsuite/ChangeLog

	* gcc.target/i386/xsave-avx-1.c: New test.
2020-09-17 12:59:35 +08:00
GCC Administrator
ecde1b0a46 Daily bump. 2020-09-17 00:16:31 +00:00
Ian Lance Taylor
90c2545651 libbacktrace: use ELF symbol table if no debug info available
PR libbacktrace/97080
	* fileline.c (backtrace_syminfo_to_full_callback): New function.
	(backtrace_syminfo_to_full_error_callback): New function.
	* elf.c (elf_nodebug): Call syminfo_fn if possible.
	* internal.h (struct backtrace_call_full): Define.
	(backtrace_syminfo_to_full_callback): Declare.
	(backtrace_syminfo_to_full_error_callback): Declare.
	* mtest.c (f3): Only check all[i] if data.index permits.
2020-09-16 17:04:43 -07:00
David Malcolm
fd111c419d analyzer: fix state explosions due to SCC bug
Debugging the state explosion of the very large switch statement in
gcc.dg/analyzer/pr96653.c showed that the worklist was failing to
order the exploded nodes correctly; the in-edges at the join point
after the switch were not getting processed together, but were instead
being rocessed in smaller batches, bloating the exploded graph until the
per-point limit was reached.

The root cause turned out to be a bug in creating the strongly-connected
components for the supergraph: the code was considering interprocedural
edges as well as intraprocedural edges, leading to unpredictable
misorderings of the SCC and worklist, leading to bloating of the
exploded graph.

This patch fixes the SCC creation so it only considers intraprocedural
edges within the supergraph.  It also tweaks worklist::key_t::cmp to
give higher precedence to call_string over differences within a
supernode, since enodes with different call_strings can't be merges.
In practise, none of my test cases were affected by this latter change,
though it seems to be the right thing to do.

With this patch, the very large switch statement in
gcc.dg/analyzer/pr96653.c is handled in a single call to
exploded_graph::maybe_process_run_of_before_supernode_enodes:
   merged 358 in-enodes into 2 out-enode(s) at SN: 402
and that testcase no longer hits the per-program-point limits.

gcc/analyzer/ChangeLog:
	* engine.cc (strongly_connected_components::strong_connect): Only
	consider intraprocedural edges when creating SCCs.
	(worklist::key_t::cmp): Add comment.  Treat call_string
	differences as more important than differences of program_point
	within a supernode.

gcc/testsuite/ChangeLog:
	PR analyzer/96653
	* gcc.dg/analyzer/loop-0-up-to-n-by-1-with-iter-obj.c: Update
	expected number of exploded nodes.
	* gcc.dg/analyzer/malloc-vs-local-1a.c: Update expected number
	of exploded nodes.
	* gcc.dg/analyzer/pr96653.c: Remove -Wno-analyzer-too-complex.
2020-09-16 19:04:16 -04:00
David Malcolm
d2c4d5199c analyzer: show SCC ids in .dot dumps
gcc/analyzer/ChangeLog:
	* engine.cc (supernode_cluster::dump_dot): Show the SCC id
	in the per-supernode clusters in FILENAME.eg.dot output.
	(exploded_graph_annotator::add_node_annotations):
	Show the SCC of the supernode in FILENAME.supernode.eg.dot output.
	* exploded-graph.h (worklist::scc_id): New.
	(exploded_graph::get_scc_id): New.
2020-09-16 19:03:15 -04:00
David Malcolm
b28491dc2d analyzer: bulk merger/processing of runs of nodes at CFG join points
Prior to this patch the analyzer worklist considered only one node or
two nodes at a time, processing and/or merging state individually or
pairwise.

This could lead to explosions of merger nodes at CFG join points,
especially after switch statements, which could have large numbers
of in-edges, and thus large numbers of merger exploded_nodes could
be created, exceeding the per-point limit and thus stopping analysis
with -Wanalyzer-too-complex.

This patch special-cases the handling for runs of consecutive
nodes in the worklist at a CFG join point, processing and merging
them all together.

The patch fixes a state explosion seen in bzip2.c seen when attempting
to reproduce PR analyzer/95188, in a switch statement in a loop for
argument parsing.  With this patch, the analyzer successfully
consolidates the state after the argument parsing to a single exploded
node.

In gcc.dg/analyzer/pr96653.c there is a switch statement with over 300
cases which leads to hitting the per-point limit.  With this patch
the consolidation code doesn't manage to merge all of them due to other
worklist-ordering bugs, and it still hits the per-point limits, but it
does manage some very long consolidations:
  merged 2 in-enodes into 2 out-enode(s) at SN: 403
  merged 2 in-enodes into 2 out-enode(s) at SN: 403
  merged 2 in-enodes into 1 out-enode(s) at SN: 11
  merged 29 in-enodes into 1 out-enode(s) at SN: 35
  merged 6 in-enodes into 1 out-enode(s) at SN: 41
  merged 31 in-enodes into 1 out-enode(s) at SN: 35
and with a followup patch to fix an SCC issue it manages:
  merged 358 in-enodes into 2 out-enode(s) at SN: 402

The patch appears to fix the failure on non-x86_64 of:
  gcc.dg/analyzer/pr93032-mztools.c (test for excess errors)
which is PR analyzer/96616.

Unfortunately, the patch introduces a memory leak false positive in
gcc.dg/analyzer/pr94851-1.c, but this appears to be a pre-existing bug
that was hidden by state-merging failures.

gcc/analyzer/ChangeLog:
	* engine.cc (exploded_node::dump_dot): Show STATUS_BULK_MERGED.
	(exploded_graph::process_worklist): Call
	maybe_process_run_of_before_supernode_enodes.
	(exploded_graph::maybe_process_run_of_before_supernode_enodes):
	New.
	(exploded_graph_annotator::print_enode): Show STATUS_BULK_MERGED.
	* exploded-graph.h (enum exploded_node::status): Add
	STATUS_BULK_MERGED.

gcc/testsuite/ChangeLog:
	* gcc.dg/analyzer/bzip2-arg-parse-1.c: New test.
	* gcc.dg/analyzer/loop-n-down-to-1-by-1.c: Remove xfail.
	* gcc.dg/analyzer/pr94851-1.c: Add xfail.
2020-09-16 19:01:58 -04:00
David Malcolm
b9b5fc0c21 analyzer: add program_point::get_next
Avoid some future copy-and-paste by introducing a function.

gcc/analyzer/ChangeLog:
	* engine.cc
	(exploded_graph::process_node) <case PK_BEFORE_SUPERNODE>:
	Simplify by using program_point::get_next.
	* program-point.cc (program_point::get_next): New.
	* program-point.h (program_point::get_next): New decl.
2020-09-16 19:00:41 -04:00
David Malcolm
6dd96e24ea analyzer: show program point in -Wanalyzer-too-complex
I found this useful when debugging.

gcc/analyzer/ChangeLog:
	* engine.cc (exploded_graph::get_or_create_node): Show the
	program point when issuing -Wanalyzer-too-complex due to hitting
	the per-program-point limit.
2020-09-16 18:58:51 -04:00
David Malcolm
e097c9ab83 analyzer: getchar has no side-effects
Seen whilst debugging another issue, where the analyzer was assuming
conservatively that a call to getchar could clobber a global.

This is handled for most of the other stdio functions by the list
in sm-file.cc

gcc/analyzer/ChangeLog:
	* region-model.cc (region_model::on_call_pre): Treat getchar as
	having no side-effects.

gcc/testsuite/ChangeLog:
	* gcc.dg/analyzer/getchar-1.c: New test.
2020-09-16 18:56:50 -04:00
Alexandre Oliva
3f4b15f52f use E_*mode instead of just *mode
g++ 4.8.5 rejected cases with SFmode and DFmode, presumably due to
some bug in the constexpr implementation.

for  gcc/ChangeLog

	* config/rs6000/rs6000.c (have_compare_and_set_mask): Use
	E_*mode in cases.
2020-09-16 18:15:01 -03:00
Bill Schmidt
8c0f8755b2 rs6000: Add rs6000_cfun_pcrel_p
Most uses of rs6000_pcrel_p are called for the current function.
A specialized version for cfun is more efficient for these uses.

2020-09-16  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
	* config/rs6000/predicates.md (current_file_function_operand):
	Remove argument from rs6000_pcrel_p call.
	* config/rs6000/rs6000-logue.c (rs6000_decl_ok_for_sibcall):
	Likewise.
	(rs6000_global_entry_point_prologue_needed_p): Likewise.
	(rs6000_output_function_prologue): Likewise.
	* config/rs6000/rs6000-protos.h (rs6000_function_pcrel_p): New
	prototype.
	(rs6000_pcrel_p): Remove argument.
	* config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Remove
	argument from rs6000_pcrel_p call.
	(rs6000_call_template_1): Likewise.
	(rs6000_indirect_call_template_1): Likewise.
	(rs6000_longcall_ref): Likewise.
	(rs6000_call_aix): Likewise.
	(rs6000_sibcall_aix): Likewise.
	(rs6000_function_pcrel_p): Rename from rs6000_pcrel_p.
	(rs6000_pcrel_p): Rewrite.
	* config/rs6000/rs6000.md (*pltseq_plt_pcrel<mode>): Remove
	argument from rs6000_pcrel_p call.
	(*call_local<mode>): Likewise.
	(*call_value_local<mode>): Likewise.
	(*call_nonlocal_aix<mode>): Likewise.
	(*call_value_nonlocal_aix<mode>): Likewise.
	(*call_indirect_pcrel<mode>): Likewise.
	(*call_value_indirect_pcrel<mode>): Likewise.
2020-09-16 16:12:35 -05:00
Martin Sebor
71ad0b5dde Detect conflicts between incompatible uses of the same attribute (PR c/78666).
Resolves:
PR c/78666 - conflicting attribute alloc_size accepted
PR c/96126 - conflicting attribute section accepted on redeclaration

gcc/c-family/ChangeLog:

	PR c/78666
	PR c/96126
	* c-attribs.c (validate_attr_args): New function.
	(validate_attr_arg): Same.
	(handle_section_attribute): Call it.  Introduce a local variable.
	(handle_alloc_size_attribute):  Same.
	(handle_alloc_align_attribute): Same.

gcc/testsuite/ChangeLog:

	PR c/78666
	PR c/96126
	* gcc.dg/attr-alloc_align-5.c: New test.
	* gcc.dg/attr-alloc_size-13.c: New test.
	* gcc.dg/attr-section.c: New test.
	* c-c++-common/builtin-has-attribute-3.c: Add xfails due to expected
	warnings to be cleaned up.
2020-09-16 14:04:01 -06:00
Marek Polacek
31dd5cd634 preprocessor: Fix ICE with too long line in fmtwarn [PR96935]
Here we ICE in char_span::subspan because the offset it gets is -1.
It's -1 because get_substring_ranges_for_loc gets a location whose
column was 0.  That only happens in testcases like the attached where
we're dealing with extremely long lines (at least 4065 chars it seems).
This does happen in practice, though, so it's not just a theoretical
problem (e.g. when building the SU2 suite).

Fixed by checking that the column get_substring_ranges_for_loc gets is
sane, akin to other checks in that function.

gcc/ChangeLog:

	PR preprocessor/96935
	* input.c (get_substring_ranges_for_loc): Return if start.column
	is less than 1.

gcc/testsuite/ChangeLog:

	PR preprocessor/96935
	* gcc.dg/format/pr96935.c: New test.
2020-09-16 15:29:49 -04:00
Martin Sebor
8b75204b27 Work harder to avoid -Wuninitialized for objects of empty structs (PR middle-end/96295).
Resolves:
PR middle-end/96295 - -Wmaybe-uninitialized warning for range operator with
reference to an empty struct

gcc/ChangeLog:

	PR middle-end/96295
	* tree-ssa-uninit.c (maybe_warn_operand): Work harder to avoid
	warning for objects of empty structs

gcc/testsuite/ChangeLog:

	PR middle-end/96295
	* g++.dg/warn/Wuninitialized-11.C: New test.
2020-09-16 13:23:31 -06:00
Nathan Sidwell
8155316c6f c++: local-scope OMP UDR reductions have no template head
This corrects the earlier problems with removing the template header
from local omp reductions.  And it uncovered a latent bug.  When we
tsubst such a decl, we immediately tsubst its body.
cp_check_omp_declare_reduction gets a success return value to gate
that instantiation.

udr-2.C got a further error, as the omp checking machinery doesn't
appear to turn the reduction into an error mark when failing.  I
didn't dig into that further.  udr-3.C appears to have been invalid
and accidentally worked.

	gcc/cp/
	* cp-tree.h (cp_check_omp_declare_reduction): Return bool.
	* semantics.c (cp_check_omp_declare_reduction): Return true on for
	success.
	* pt.c (push_template_decl_real): OMP reductions do not get a
	template header.
	(tsubst_function_decl): Remove special casing for local decl omp
	reductions.
	(tsubst_expr): Call instantiate_body for a local omp reduction.
	(instantiate_body): Add nested_p parm, and deal with such
	instantiations.
	(instantiate_decl): Reject FUNCTION_SCOPE entities, adjust
	instantiate_body call.
	gcc/testsuite/
	* g++.dg/gomp/udr-2.C: Add additional expected error.
	libgomp/
	* testsuite/libgomp.c++/udr-3.C: Add missing ctor.
2020-09-16 12:16:11 -07:00
Iain Sandoe
d1339b519a libbacktrace, Mach-O : Support PowerPC archs.
This adds the PPC architecture variants for Mach-O libbacktrace.

With this (as for X86 and Arm) when dsymutil is run on the binary
we get a basic usable backtrace.

Testsuite results on powerpc-apple-darwin9 are the same as for X86:
 * btest fails (TBC why)
 * dwarf5 tests fail because dsymutil does not handle that so far.

libbacktrace/ChangeLog:

	* macho.c (MACH_O_CPU_TYPE_PPC): New.
	(MACH_O_CPU_TYPE_PPC64): New.
	Add compile-tests for powerpc to the Mach-O variants.
2020-09-16 19:37:28 +01:00
Eric Botcazou
aab6194d08 Fix pessimization in EH cleanup pass
This restores the post-order traversal done by cleanup_all_empty_eh in
order to eliminate empty landing pads and also contains a small tweak
to the line debug info to avoid a problematic inheritance for coverage
measurement.

gcc/ChangeLog:
	* tree-eh.c (lower_try_finally_dup_block): Backward propagate slocs
	to stack restore builtin calls.
	(cleanup_all_empty_eh): Do again a post-order traversal of the EH
	region tree.

gcc/testsuite/ChangeLog:
	* gnat.dg/concat4.adb: New test.
2020-09-16 17:42:51 +02:00
Nathan Sidwell
7d1be939e0 c++: Avoid confusing 'nested' name
instantiate_body has a local var call 'nested', which indicates that
this instantiation was caused during the body of some function -- not
necessarily its containing scope.  That's confusing, let's just use
'current_function_decl' directly.  Then we can also simplify the
push_to_top_level logic, which /does/ indicate whether this is an
actual nested function.  (C++ does not have nested functions, but OMP
ODRs fall into that category.  A follow up patch will use that more
usual meaning of 'nested' wrt to functions.)

	gcc/cp/
	* pt.c (instantiate_body): Remove 'nested' var, simplify
	push_to_top logic.
2020-09-16 08:10:44 -07:00
Tobias Burnus
91347c3bbf Fortran: OpenMP - fix simd with (last)private (PR97061)
gcc/fortran/ChangeLog:

	PR fortran/97061
	* trans-openmp.c (gfc_trans_omp_do): Handle simd with (last)private.

gcc/testsuite/ChangeLog:

	PR fortran/97061
	* gfortran.dg/gomp/openmp-simd-6.f90: New test.
2020-09-16 16:23:13 +02:00
Nathan Sidwell
2b7147e485 c++: Break out actual instantiation from instantiate_decl
This refactors instantiate_decl, breaking out the actual instantiation
work to instantiate_body.  That'll allow me to address the OMP UDR
issue, but it also means we have slightly neater code in
instantiate_decl anyway.

	gcc/cp/
	* pt.c (instantiate_body): New, broken out of ..
	(instantiate_decl): ... here.  Call it.
2020-09-16 07:19:48 -07:00
Andrea Corallo
052204fac5 vec: don't select partial vectors when unnecessary
gcc/ChangeLog

2020-09-09  Andrea Corallo  <andrea.corallo@arm.com>

	* tree-vect-loop.c (vect_need_peeling_or_partial_vectors_p): New
	function.
	(vect_analyze_loop_2): Make use of it not to select partial
	vectors if no peel is required.
	(determine_peel_for_niter): Move out some logic into
	'vect_need_peeling_or_partial_vectors_p'.

gcc/testsuite/ChangeLog

2020-09-09  Andrea Corallo  <andrea.corallo@arm.com>

	* gcc.target/aarch64/sve/cost_model_10.c: New test.
	* gcc.target/aarch64/sve/clastb_8.c: Update test for new
	vectorization strategy.
	* gcc.target/aarch64/sve/cost_model_5.c: Likewise.
	* gcc.target/aarch64/sve/struct_vect_14.c: Likewise.
	* gcc.target/aarch64/sve/struct_vect_15.c: Likewise.
	* gcc.target/aarch64/sve/struct_vect_16.c: Likewise.
	* gcc.target/aarch64/sve/struct_vect_17.c: Likewise.
2020-09-16 15:17:17 +02:00
H.J. Lu
453a20c657 rtl_data: Add sp_is_clobbered_by_asm
Add sp_is_clobbered_by_asm to rtl_data to inform backends that the stack
pointer is clobbered by asm statement.

gcc/

	PR target/97032
	* cfgexpand.c (asm_clobber_reg_kind): Set sp_is_clobbered_by_asm
	to true if the stack pointer is clobbered by asm statement.
	* emit-rtl.h (rtl_data): Add sp_is_clobbered_by_asm.
	* config/i386/i386.c (ix86_get_drap_rtx): Set need_drap to true
	if the stack pointer is clobbered by asm statement.

gcc/testsuite/

	PR target/97032
	* gcc.target/i386/pr97032.c: New test.
2020-09-16 05:26:19 -07:00
Feng Xue
f419a01589 testsuite/97066 - minor change to bypass plusminus-with-convert rule
The following testcases will be simplified by the new rule
(T)(A) +- (T)(B) -> (T)(A +- B), so could not keep code pattern
expected by test-check. Adjust test code to suppress simplification.

2020-09-16  Feng Xue  <fxue@os.amperecomputing.com>

gcc/testsuite/
	PR testsuite/97066
	* gcc.dg/ifcvt-3.c: Modified to suppress simplification.
	* gcc.dg/tree-ssa/20030807-10.c: Likewise.
2020-09-16 20:20:38 +08:00
Ilya Leoshkevich
2cab2431d5 IBM Z: Fix *vec_tf_to_v1tf constraints
Certain alternatives of *vec_tf_to_v1tf use "v" constraint for its
TFmode source operand.  Therefore it is assigned to VEC_REGS class,
and when it is reloaded using *movtf_64, whose relevant alternatives
need FP_REGS, LRA loops and ICE happens.  The reason is that register
class mismatch causes LRA to emit another reload, which triggers this
issue again.

Fix by using "f" constraint, which is more appropriate for FP register
pairs anyway.

gcc/ChangeLog:

2020-09-02  Ilya Leoshkevich  <iii@linux.ibm.com>

	* config/s390/vector.md(*vec_tf_to_v1tf): Use "f" instead of "v"
	  for the source operand.
2020-09-16 14:16:34 +02:00
Jojo R
d66f83c25b C-SKY: Refine target name for elf target test
gcc/testsuite/ChangeLog:

	* lib/target-supports.exp (check_profiling_available): Refine name of elf target.
2020-09-16 19:34:14 +08:00
Jojo R
f8ede8875e C-SKY: Set use_gcc_stdint=wrap for elf target
gcc/ChangeLog:

	* config.gcc (C-SKY): Set use_gcc_stdint=wrap for elf target.
2020-09-16 19:34:09 +08:00
Jojo R
03380ecc38 C-SKY: Enable crtbegin/crtend.o of libgcc for elf target
libgcc/ChangeLog:

	* config.host (C-SKY): Enable crtbegin/crtend.o of libgcc for elf target.
2020-09-16 19:34:02 +08:00
Richard Biener
f02b2077c0 remove STMT_VINFO_NUM_SLP_USES
This removes STMT_VINFO_NUM_SLP_USES by pushing the setting of
the shared stmt_vec_info vector type to where we actually need it
which is alignment analysis and vectorizable_* analysis (where
we could eventually elide it for non-load/store operations).

In particular "uses" in the cache and in disqualified SLP
subgraphs should no longer provide conflicting vector types
this way.

2020-09-16  Richard Biener  <rguenther@suse.de>

	* tree-vectorizer.h (_stmt_vec_info::num_slp_uses): Remove.
	(STMT_VINFO_NUM_SLP_USES): Likewise.
	(vect_free_slp_instance): Adjust.
	(vect_update_shared_vectype): Declare.
	* tree-vectorizer.c (vec_info::~vec_info): Adjust.
	* tree-vect-loop.c (vect_analyze_loop_2): Likewise.
	(vectorizable_live_operation): Use vector type from
	SLP_TREE_REPRESENTATIVE.
	(vect_transform_loop): Adjust.
	* tree-vect-data-refs.c (vect_slp_analyze_node_alignment):
	Set the shared vector type.
	* tree-vect-slp.c (vect_free_slp_tree): Remove final_p
	parameter, remove STMT_VINFO_NUM_SLP_USES updating.
	(vect_free_slp_instance): Adjust.
	(vect_create_new_slp_node): Remove STMT_VINFO_NUM_SLP_USES
	updating.
	(vect_update_shared_vectype): Always compare with the
	present vector type, update if NULL.
	(vect_build_slp_tree_1): Do not update the shared vector
	type here.
	(vect_build_slp_tree_2): Adjust.
	(slp_copy_subtree): Likewise.
	(vect_attempt_slp_rearrange_stmts): Likewise.
	(vect_analyze_slp_instance): Likewise.
	(vect_analyze_slp): Likewise.
	(vect_slp_analyze_node_operations_1): Update the shared
	vector type.
	(vect_slp_analyze_operations): Adjust.
	(vect_slp_analyze_bb_1): Likewise.
2020-09-16 12:28:10 +02:00
Jojo R
8a4f343aa3 C-SKY: Support multilib for mfloat-abi=.
gcc/ChangeLog:

	* config/csky/t-csky-linux (CSKY_MULTILIB_OSDIRNAMES): Use mfloat-abi.
	(MULTILIB_OPTIONS): Likewise.
	* config/csky/t-csky-elf (MULTILIB_OPTIONS): Likewise.
	(MULTILIB_EXCEPTIONS): Likewise.
2020-09-16 16:57:50 +08:00
Jakub Jelinek
3ba3c2e3a9 arm: Avoid unused parameter warning
2020-09-16  Jakub Jelinek  <jakub@redhat.com>

	* config/arm/arm.c (arm_option_restore): Comment out opts argument
	name to avoid unused parameter warnings.
2020-09-16 10:13:19 +02:00
Jakub Jelinek
d29a7cd6f4 options, lto: Optimize streaming of optimization nodes
When working on the previous patch, I've noticed that all cl_optimization
fields appart from strings are streamed with bp_pack_value (..., 64); so we
waste quite a lot of space, given that many of the options are just booleans
or char options and there are 450-ish of them.

Fixed by streaming the number of bits the corresponding fields have.
While for char fields we have also range information, except for 3
it is either -128, 127 or 0, 255, so it didn't seem worth it to bother
with using range-ish packing.

2020-09-16  Jakub Jelinek  <jakub@redhat.com>

	* optc-save-gen.awk: In cl_optimization_stream_out use
	bp_pack_var_len_{int,unsigned} instead of bp_pack_value.  In
	cl_optimization_stream_in use bp_unpack_var_len_{int,unsigned}
	instead of bp_unpack_value.  Formatting fix.
2020-09-16 10:04:32 +02:00