Commit Graph

181491 Commits

Author SHA1 Message Date
Ghjuvan Lacambre
ac9ed5cb26 [Ada] Documentation: update -gnatyk description
gcc/ada/

	* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
	Update documentation on -gnatyk.
	* gnat_ugn.texi: Regenerate.
2020-11-24 05:16:01 -05:00
Yannick Moy
91edb3f66c [Ada] Fix spurious error on child library-level subprogram with aspects
gcc/ada/

	* sem_ch10.adb (Analyze_Compilation_Unit): Move aspects from
	body to the newly created spec.
2020-11-24 05:16:01 -05:00
Arnaud Charlet
1cc9ecae0a [Ada] Wrong finalization in call with if expression
gcc/ada/

	* exp_ch6.adb (Add_Cond_Expression_Extra_Actual): Simplify
	handling of function calls and remove bug in handling of
	transient objects.  Minor reformatting along the way.
2020-11-24 05:16:00 -05:00
Arnaud Charlet
7f0942424b [Ada] Implement Big_Integer.From_String fully
gcc/ada/

	* libgnat/a-nbnbin.adb (From_String): Implement fully.
2020-11-24 05:16:00 -05:00
Piotr Trojanek
3e65b68dd6 [Ada] Fix resolution of subtype_indication in delta aggregates
gcc/ada/

	* sem_aggr.adb (Resolve_Delta_Array_Aggregate): If the choice is
	a subtype_indication then call
	Resolve_Discrete_Subtype_Indication; both for choices
	immediately inside array delta aggregates and inside
	iterated_component_association within array delta aggregates.
2020-11-24 05:16:00 -05:00
Piotr Trojanek
3ac0642304 [Ada] Use high-level Present instead of low-level equality test
gcc/ada/

	* lib-load.adb, lib-writ.adb, lib.adb, par-load.adb,
	rtsfind.adb, sem_ch10.adb: Use Present where possible.
2020-11-24 05:16:00 -05:00
Yannick Moy
41273281ce [Ada] Reject Global/Depends contracts on null procedures
gcc/ada/

	* sem_prag.adb (Analyze_Depends_Global): Reject Global and
	Depends on null procedure.
2020-11-24 05:15:59 -05:00
Arnaud Charlet
9cfd2c38f3 [Ada] Wrong handling of _ in Big_Reals.From_String
gcc/ada/

	* libgnat/a-nbnbre.adb (From_String): Handle properly '_'
	characters.
2020-11-24 05:15:59 -05:00
Piotr Trojanek
02fb12801b [Ada] Remove SPARK-specific expansion of array aggregates
gcc/ada/

	* exp_spark.adb (Expand_SPARK_Array_Aggregate,
	Expand_SPARK_N_Aggregate): Remove, no longer needed.
	* sem_aggr.adb (Resolve_Iterated_Component_Association): Only
	remove references in the analyzed expression when generating
	code and the expression needs to be analyzed anew after being
	rewritten into a loop.
2020-11-24 05:15:59 -05:00
Eric Botcazou
2307a1aeb8 [Ada] Document characteristics of decimal fixed point types
gcc/ada/

	* doc/gnat_rm/implementation_defined_characteristics.rst: Complete
	entry of 3.5.9(10).
	* gnat_rm.texi: Regenerate.
2020-11-24 05:15:59 -05:00
Jakub Jelinek
a1dd66b108 i386: Add *setcc_hi_1* define_insn_and_split [PR97950]
As the following testcase shows, unlike char, int or long long sized
__builtin_*_overflow{,_p}, for short sized one in most cases the ce1 pass
doesn't optimize the jo/jno or jc/jnc jumps with setting of a pseudo to 0/1
into seto/setc.  The reason is missing *setcc_hi_1* pattern.  The following
patch implements it using mode iterators so that on i486 and pentium?
one can get the zero extension through and instead of movzbw.

2020-11-24  Jakub Jelinek  <jakub@redhat.com>

	PR target/97950
	* config/i386/i386.md (*setcc_si_1_and): Macroize into...
	(*setcc_<mode>_1_and): New define_insn_and_split with SWI24 iterator.
	(*setcc_si_1_movzbl): Macroize into...
	(*setcc_<mode>_1_movzbl): New define_insn_and_split with SWI24
	iterator.

	* gcc.target/i386/pr97950.c: New test.
2020-11-24 10:45:40 +01:00
Jakub Jelinek
4adfcea0a1 middle-end: Prefer no RMW in __builtin_clear_padding implementation where possible
Currently the __builtin_clear_padding expansion code emits no code for
full words that don't have any padding bits, and most of the time if
the only padding bytes are from the start of the word it attempts to merge
them with previous padding store (via {}) or if the only padding bytes are
from the end of the word, it attempts to merge it with following padding
bytes.  For everything else it was using a RMW, except when it found
an aligned char/short/int covering all the padding bytes and all those
padding bytes were all ones in that store.

The following patch changes it, such that we only use RMW if the padding has
any bytes which have some padding and some non-padding bits (i.e. bitfields
are involved), often it is the same amount of instructions in the end and
avoids being thread-unsafe unless necessary (and avoids having to wait for
the reads to make it into the CPU).  So, if there are no bitfields,
the function will just store some zero bytes, shorts, ints, long longs etc.
where needed.

2020-11-24  Jakub Jelinek  <jakub@redhat.com>

	* gimple-fold.c (clear_padding_flush): If a word contains only 0
	or 0xff bytes of padding other than all set, all clear, all set
	followed by all clear or all clear followed by all set, don't emit
	a RMW operation on the whole word or parts of it, but instead
	clear the individual bytes of padding.  For paddings of one byte
	size, don't use char[1] and {}, but instead just char and 0.
2020-11-24 10:44:32 +01:00
Jakub Jelinek
a40d5772ff testsuite: Add testcase for already fixed bug [PR97964]
This testcase started failing with r8-2090 and works again starting
with r11-4755.

2020-11-24  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/97964
	* gcc.dg/tree-ssa/pr97964.c: New test.
2020-11-24 10:42:56 +01:00
Thomas Schwinge
8c3aa359ce More explicit checking of which OMP constructs we're expecting, part II
In particular, more precisely highlight what applies generally vs. the special
handling for the current 'parloops'-based OpenACC 'kernels' implementation.

	gcc/
	* omp-expand.c (expand_oacc_for): More explicit checking of which
	OMP constructs we're expecting.
2020-11-24 10:28:04 +01:00
Thomas Schwinge
f72175357d [testsuite] Avoid Tcl 8.5-specific behavior
gcc/
	* doc/install.texi (Prerequisites) <Tcl>: Add comment.
	gcc/testsuite/
	* c-c++-common/goacc/kernels-decompose-1.c: Avoid Tcl 8.5-specific
	behavior.
	* c-c++-common/goacc/kernels-decompose-2.c: Likewise.
	* gfortran.dg/goacc/kernels-decompose-1.f95: Likewise.
	* gfortran.dg/goacc/kernels-decompose-2.f95: Likewise.
	libgomp/
	* testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c: Avoid
	Tcl 8.5-specific behavior.
	* testsuite/libgomp.oacc-fortran/pr94358-1.f90: Likewise.

Reported-by: David Edelsohn <dje.gcc@gmail.com>
2020-11-24 10:29:35 +01:00
Thomas Schwinge
54f72078fc [testsuite] Emit 'warning' instead of 'error' diagnostics for 'dg-optimized', 'dg-missed'
The diagnostics produced by 'dg-optimized', 'dg-missed' aren't error
diagnostics (fatal, meaning: causes compilation to fail) but rather warning
diagnostics (non-fatal, doesn't cause compilation to fail).  Thus, same as
'dg-message', these should use 'saved-dg-warning' instead of 'saved-dg-error',
which then prints: "(test for *warnings*, line [...]) instead of currently:
"(test for *errors*, line [...])".

This is a small bug-fix for commit ed2d9d3720
"dumpfile.c: use prefixes other than 'note: ' for
MSG_{OPTIMIZED_LOCATIONS|MISSED_OPTIMIZATION}", which added 'dg-optimized',
'dg-missed'.

	gcc/testsuite/
	* lib/gcc-dg.exp (dg-optimized, dg-missed): Use 'saved-dg-warning'
	instead of 'saved-dg-error'.
2020-11-24 10:28:55 +01:00
Thomas Schwinge
24b553d0f7 [testsuite] Enable column location checking for 'dg-optimized', 'dg-missed'
'process-message' would like the 'msgprefix' argument without trailing space.

This is a small bug-fix for commit ed2d9d3720
"dumpfile.c: use prefixes other than 'note: ' for
MSG_{OPTIMIZED_LOCATIONS|MISSED_OPTIMIZATION}", which added 'dg-optimized',
'dg-missed'.

	gcc/testsuite/
	* lib/gcc-dg.exp (dg-optimized, dg-missed): Fix 'process-message'
	call.
	* gcc.dg/vect/nodump-vect-opt-info-1.c: Demonstrate.
	* gcc.dg/vect/nodump-vect-opt-info-2.c: Likewise.
2020-11-24 10:28:04 +01:00
Jakub Jelinek
2aaf44a902 openmp: Fix C ICE on OpenMP atomics
c_parser_binary_expression was using build2 to create a temporary holder
for binary expression that c_parser_atomic and c_finish_omp_atomic can then
handle.  The latter performs then all the needed checking.

Unfortunately, build2 performs some checking too, e.g. PLUS_EXPR vs.
POINTER_PLUS_EXPR or matching types of the arguments, nothing we can guarantee
at the parsing time.  So we need something like C++ build_min_nt*.  This
patch implements that inline.

2020-11-24  Jakub Jelinek  <jakub@redhat.com>

	PR c/97958
	* c-parser.c (c_parser_binary_expression): For omp atomic binary
	expressions, use make_node instead of build2 to avoid checking build2
	performs.

	* c-c++-common/gomp/pr97958.c: New test.
2020-11-24 09:04:28 +01:00
Jakub Jelinek
4866b2f5db middle-end, c++: Treat shifts by negative as undefined [PR96929]
The PR38359 change made the -1 >> x to -1 optimization less useful by
requiring that the x must be non-negative.
Shifts by negative amount are UB, but we for historic reasons had in some
(but not all) places some hack to treat shifts by negative value as the
other direction shifts by the negated amount.

The following patch just removes that special handling, instead we punt on
optimizing those (and ideally path isolation should catch that up and turn
those into __builtin_unreachable, perhaps with __builtin_warning next to
it).  Folding the shifts in some places as if they were rotates and in other
as if they were saturating just leads to inconsistencies.

For C++ constexpr diagnostics and -fpermissive, I've added code to pretend
fold-const.c has not changed, without -fpermissive it will be an error
anyway and I think it is better not to change all the diagnostics.

During x86_64-linux and i686-linux bootstrap/regtest, my statistics
gathering patch noted 185 unique -m32/-m64 x TU x function_name x shift_kind
x fold-const/tree-ssa-ccp cases.  I have investigated the
64 ../../gcc/config/i386/i386.c x86_output_aligned_bss LSHIFT_EXPR wide_int_bitop
64 ../../gcc/config/i386/i386-expand.c emit_memmov LSHIFT_EXPR wide_int_bitop
64 ../../gcc/config/i386/i386-expand.c ix86_expand_carry_flag_compare LSHIFT_EXPR wide_int_bitop
64 ../../gcc/expmed.c expand_divmod LSHIFT_EXPR wide_int_bitop
64 ../../gcc/lra-lives.c process_bb_lives LSHIFT_EXPR wide_int_bitop
64 ../../gcc/rtlanal.c nonzero_bits1 LSHIFT_EXPR wide_int_bitop
64 ../../gcc/varasm.c optimize_constant_pool.isra LSHIFT_EXPR wide_int_bitop
cases and all of them are either during jump threading (dom) or during PRE.
For jump threading, the most common case is 1 << floor_log2 (whatever) where
floor_log2 is return HOST_BITS_PER_WIDE_INT - 1 - clz_hwi (x);
and clz_hwi is if (x == 0) return HOST_BITS_PER_WIDE_INT; return __builtin_clz* (x);
and so has range [-1, 63] and a comparison against == 0 which makes the
threader think it might be nice to jump thread the case leading to 1 << -1.
I think it is better to keep the 1 << -1 s in the IL for this and let path
isolation turn that into __builtin_unreachable () if the user wishes so.

2020-11-24  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/96929
	* fold-const.c (wide_int_binop) <case LSHIFT_EXPR, case RSHIFT_EXPR>:
	Return false on negative second argument rather than trying to handle
	it as shift in the other direction.
	* tree-ssa-ccp.c (bit_value_binop) <case LSHIFT_EXPR,
	case RSHIFT_EXPR>: Punt on negative shift count rather than trying
	to handle it as shift in the other direction.
	* match.pd (-1 >> x to -1): Remove tree_expr_nonnegative_p check.

	* constexpr.c (cxx_eval_binary_expression): For shifts by constant
	with MSB set, emulate older wide_int_binop behavior to preserve
	diagnostics and -fpermissive behavior.

	* gcc.dg/tree-ssa/pr96929.c: New test.
2020-11-24 09:03:17 +01:00
Jeff Law
4cd35cf3fd Fix expected output after recent changes
gcc/testsuite
	* gcc.dg/tree-ssa/pr23401.c: Update expected output.
	* gcc.dg/tree-ssa/pr27810.c: Update expected output.
	* gcc.dg/tree-ssa/slsr-8.c: Update expected output.
2020-11-23 21:34:24 -07:00
Kewen Lin
ab1d52b561 test: Update some cases for vect_partial_vectors_usage_1
Commit r11-3393 improved the epilogue loop handling of partial
vectors and we won't use partial vectors to vectorize a single
iteration scalar loop any more.

The affected test cases have only one single iteration in their
epilogues, so we shouldn't expect the vectorization with
partial vector there.

Tested with explicit --param=vect-partial-vector-usage=1 and
default enablement.

gcc/testsuite/ChangeLog:

	* gcc.dg/vect/slp-perm-1.c: Adjust for partial vectors.
	* gcc.dg/vect/slp-perm-5.c: Likewise.
	* gcc.dg/vect/slp-perm-6.c: Likewise.
	* gcc.dg/vect/slp-perm-7.c: Likewise.
2020-11-23 20:33:37 -06:00
Prathamesh Kulkarni
5700973f4a tree-opt: Fix segfault in tree-if-conv.c with -march=armv8.2-a+sve [PR97849]
The issue here is that rpo vn may eliminate target ssa_name referred to in
redundant_ssa_names, and thus ifcvt_local_dce may replace candidate
ssa_name with invalid ssa_name resulting in incorrect IR. The patch simply
does ssa_name replacement before calling do_rpo_vn, which fixes the issue.

gcc/
2020-11-24  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

	PR tree-optimization/97849
	* tree-if-conv.c (tree_if_conversion): Move ssa_name
	replacement code from ifcvt_local_dce to this function
	before calling do_rpo_vn.

gcc/testsuite/
2020-11-24  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

	PR tree-optimization/97849
	* gcc.dg/tree-ssa/pr97849.c: New test.
2020-11-24 06:57:46 +05:30
Martin Sebor
6692c400f2 Dump type attributes in dump_function_to_file.
gcc/ChangeLog:

	* tree-cfg.c (dump_function_to_file): Print type attributes
	and return type.

gcc/testsuite/ChangeLog:
	* gcc.dg/attr-access-5.c: New test.
2020-11-23 17:19:26 -07:00
GCC Administrator
8e6198d0f8 Daily bump. 2020-11-24 00:16:44 +00:00
Joseph Myers
ed431431e0 c: Allow comparison of pointers to complete and incomplete types for C11 [PR95630]
As noted in bug 95630, C11 removed a restriction in C99 on comparing
pointers to compatible complete and incomplete types (this was one of
the changes in N1439, which was largely a terminological change to
make incomplete types a subset of object types rather than a different
kind of type).  Implement that change by using pedwarn_c99 with
OPT_Wpedantic for this diagnostic.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc/c/
2020-11-23  Joseph Myers  <joseph@codesourcery.com>

	PR c/95630
	* c-typeck.c (build_binary_op): Use pedwarn_c99 with OPT_Wpedantic
	for comparisons of complete and incomplete pointers.

gcc/testsuite/
2020-11-23  Joseph Myers  <joseph@codesourcery.com>

	PR c/95630
	* gcc.dg/c11-compare-incomplete-1.c,
	gcc.dg/c11-compare-incomplete-2.c,
	gcc.dg/c99-compare-incomplete-1.c,
	gcc.dg/c99-compare-incomplete-2.c: New tests.
2020-11-23 23:28:58 +00:00
Martin Jambor
f38a33a274 ipa: special pass-through op for Fortran strides
when Fortran functions pass array descriptors they receive as a
parameter to another function, they actually rebuild it.  Thanks to
work done mainly by Feng, IPA-CP can already handle the cases when
they pass directly the values loaded from the original descriptor.
Unfortunately, perhaps the most important one, stride, is first
checked against zero and is replaced with one in that case:

  _12 = *a_11(D).dim[0].stride;
  if (_12 != 0)
    goto <bb 4>; [50.00%]
  else
    goto <bb 3>; [50.00%]

  <bb 3>
    // empty BB
  <bb 4>
  # iftmp.22_9 = PHI <_12(2), 1(3)>
   ...
   parm.6.dim[0].stride = iftmp.22_9;
   ...
   __x_MOD_foo (&parm.6, b_31(D));

in the most important and hopefully common cases, the incoming value
is already 1 and we fail to propagate it.

I would therefore like to propose the following way of encoding this
situation in pass-through jump functions using using ASSERTT_EXPR
operation code meaning that if the incoming value is the same as the
"operand" in the jump function, it is passed on, otherwise the result
is unknown.  This of course captures only the single (but most
important) case but is an improvement and does not need enlarging the
jump function structure and is simple to pattern match.  Encoding that
zero needs to be changed to one would need another field and matching
it would be slightly more complicated too.

gcc/
2020-06-12  Martin Jambor  <mjambor@suse.cz>

	* ipa-prop.h (ipa_pass_through_data): Expand comment describing
	operation.
	* ipa-prop.c (analyze_agg_content_value): Detect new special case and
	encode it as ASSERT_EXPR.
	* ipa-cp.c (values_equal_for_ipcp_p): Move before
	ipa_get_jf_arith_result.
	(ipa_get_jf_arith_result): Special case ASSERT_EXPR.

gcc/testsuite/
2020-06-12  Martin Jambor  <mjambor@suse.cz>
	* gfortran.dg/ipcp-array-2.f90: New test.
2020-11-23 23:52:29 +01:00
Jeff Law
f80565da33 Adjust rtx_costs for h8300
So the primary purpose of this patch is to make it easier to write tests for
removal of useless test/compare insns on the H8.

In simplest terms the costing model in the H8 port tends to encourage changing
something like:

  x = y + 4;
  if (x == 0)

into:

  x = y + 4;
  if (y == -4)

This is a marginal de-optimization on the H8.  So fixing it makes the code
ever-so-slightly better in isolation.   Fixing this also improves redundant
test/compare elimination and makes writing tests for redundant test/compare
elimination far easier.

gcc/
	* config/h8300/h8300.c (h8300_rtx_costs): Handle the various
	comparison rtx codes too.
2020-11-23 13:06:11 -07:00
Iain Sandoe
53a9065066 config.sub, config.guess : Import upstream 2020-11-07.
This imports from:

sha1 77632d92f25e26b95c64afd3700d51bd03587613
Date:   2020-11-07 04:46:23 +0000

ChangeLog:

	* config.guess: Import latest upstream.
	* config.sub: Import latest upstream.
2020-11-23 19:30:01 +00:00
Nathan Sidwell
eae68c434f testsuite: Adjust pruning
Here is the patch to adjust the include-stack pruning messages to also
strip out c++ modules.  The ICE regexp was a little too strict such
that if someone overrides the bug-reporting URL it doesn't trigger.
May as well relax it too.

	gcc/testsuite/
	* lib/prune.exp (prune_gcc_output): Adjust include stack pruning
	for modules.
	(print_ices): Relax regexp.
2020-11-23 10:36:32 -08:00
Jonathan Wakely
1ccee0fbfa libstdc++: Fix variable declared with wrong type
libstdc++-v3/ChangeLog:

	* include/bits/semaphore_base.h
	(__platform_semaphore::_M_try_acquire_until): Fix type of
	variable.
2020-11-23 18:16:44 +00:00
Stephan Bergmann
0986d3bc62 libstdc++: Fix linker errors due to missing 'inline' keywords
libstdc++-v3/ChangeLog:

	* include/bits/atomic_wait.h (__thread_relax, __thread_yield):
	Add 'inline'.
2020-11-23 18:15:06 +00:00
Jonathan Wakely
92b47a321e libstdc++: Add configure checks for semaphores
This moves the checks for POSIX semaphores to configure time. As well as
requiring <semaphore.h> and SEM_VALUE_MAX, we also require the
sem_timedwait function. That was only optional in POSIX 2001 (and is
absent on Darwin).

libstdc++-v3/ChangeLog:

	* acinclude.m4 (GLIBCXX_CHECK_GTHREADS): Check for
	* config.h.in: Regenerate.
	* configure: Regenerate.
	* include/bits/semaphore_base.h (_GLIBCXX_HAVE_POSIX_SEMAPHORE):
	Check autoconf macro instead of defining it here.
2020-11-23 18:12:39 +00:00
Jonathan Wakely
183ae52b22 libstdc++: make atomic waiting depend on gthreads or futexes
libstdc++-v3/ChangeLog:

	* include/bits/atomic_wait.h: Do not define anything unless
	gthreads or futexes are available.
	* include/bits/atomic_timed_wait.h: Likewise.
	* include/bits/semaphore_base.h: Likewise.
	* include/std/semaphore: Likewise.
	* include/bits/atomic_base.h (atomic_flag::wait)
	(atomic_flag::notify_one, atomic_flag::notify_all)
	(__atomic_base<I>::wait, __atomic_base<I>::notify_one)
	(__atomic_base<I>::notify_all, __atomic_base<P*>::wait)
	(__atomic_base<P*>::notify_one, __atomic_base<P*>::notify_all)
	(__atomic_impl::wait, __atomic_impl::notify_one)
	(__atomic_impl::notify_all, __atomic_float::wait)
	(__atomic_float::notify_one, __atomic_float::notify_all)
	(__atomic_ref::wait, __atomic_ref::notify_one)
	(__atomic_ref::notify_all): Only define if gthreads or futexes
	are available.
	* include/std/atomic (atomic::wait, atomic::notify_one)
	(atomic::notify_all): Likewise.
	* include/std/version (__cpp_lib_semaphore): Define
	conditionally.
2020-11-23 18:12:39 +00:00
Ian Lance Taylor
bcbde431aa log/syslog: correct asm name for C function
Patch from Rainer Orth.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/272259
2020-11-23 08:14:20 -08:00
Jonathan Wakely
fd62daea40 libstdc++: Link tests to libatomic as required [PR 97948]
libstdc++-v3/ChangeLog:

	PR libstdc++/97948
	* testsuite/29_atomics/atomic_float/wait_notify.cc: Add options
	for libatomic.
	* testsuite/29_atomics/atomic_integral/wait_notify.cc: Likewise.
	* testsuite/29_atomics/atomic_ref/wait_notify.cc: Likewise.
2020-11-23 16:06:50 +00:00
Jan Hubicka
7ee0681e05 Release ipa-prop's agg.items and make alocation more careful
This saves about 316MB WPAing Firefox

	* ipa-prop.c (build_agg_jump_func_from_list,
	ipa_read_jump_function): Reserve agg.items precisely.
	* ipa-prop.h (ipa_node_params::~ipa_node_params): Release descriptors
	(ipa_edge_args::~ipa_edge_args): Release agg.items.
2020-11-23 16:58:23 +01:00
Jan Hubicka
54af3008b6 Do not leak SSANAMES in lto streamer
* lto-streamer-in.c (input_cfg): Do not init ssa operands.
	(input_function): Do not init tree_ssa and set in_ssa_p.
	(input_ssa_names): Do it here.
	* tree-ssa.c (init_tree_ssa): Add additional SIZE parameter, default
	to 0
	* tree-ssanames.c (init_ssanames): Do not round size up to 50, allocate
	precisely.
	* tree-ssa.h (init_tree_ssa): Update prototype.
2020-11-23 16:53:25 +01:00
Nathan Sidwell
204b61b906 Diagnostic for module importation
This tweaks the 'included from ...' printing to deal with imports in
the 'include' path.  One new thing is that there can now be two
'include' names on a single line.  For example 'in module X, included
at Y'.  This reads better than placing them on different lines.

	gcc/
	* diagnostic.c (diagnostic_report_current_module): Adjust for C++
	module importation.
2020-11-23 07:37:42 -08:00
Nathan Sidwell
ff1c10c1c5 c++: Add empty module.cc
This adds an empty module.cc file, along with make rules to build it.

	gcc/cp/
	* module.cc: New dummy file.
	* Make-lang.in: Add rules to build module.o
2020-11-23 07:37:41 -08:00
Jozef Lawrynowicz
77ee207e17 MSP430: Remove target-specific handling of the "persistent" attribute
The "persistent" attribute is now handled generically, and does not
need specific support in the MSP430 back end.

gcc/ChangeLog:

	* config/msp430/msp430.c (msp430_section_attr): Don't warn for "lower"
	attribute used with "noinit" or "persistent" attributes.
	(msp430_persist_attr): Remove.
	(attr_lower_exclusions): Remove ATTR_PERSIST exclusion.
	(attr_upper_exclusions): Likewise.
	(attr_either_exclusions): Likewise.
	(attr_persist_exclusions): Remove.
	(msp430_attribute_table): Remove ATTR_PERSIST handling.
	(msp430_handle_generic_attribute): Remove ATTR_PERSIST section conflict
	handling.
	(TARGET_ASM_INIT_SECTIONS): Remove.
	(msp430_init_sections): Remove.
	(msp430_select_section): Use default_elf_select_section for decls with
	the "persistent" attribute.
	(msp430_section_type_flags): Remove ".persistent" section handling.
	* doc/extend.texi (MSP430 Variable Attributes): Remove "noinit" and
	"persistent" documentation.

gcc/testsuite/ChangeLog:

	* g++.target/msp430/data-attributes.C: Remove expected warnings for
	"lower" attribute conflicts.
	Adjust expected wording for "persistent" attribute misuse.
	* gcc.target/msp430/data-attributes-2.c: Likewise.
	* gcc.target/msp430/pr78818-auto-warn.c: Likewise.
2020-11-23 14:29:41 +00:00
Richard Biener
692d3b7727 fix hybrid SLP discovery debug stmt issue
This properly skips debug USE_STMTs when looking for non-SLP sinks.

2020-11-23  Richard Biener  <rguenther@suse.de>

	* tree-vect-slp.c (maybe_push_to_hybrid_worklist): Skip
	debug stmts.

	* g++.dg/vect/simd-12.cc: New testcase.
2020-11-23 15:07:43 +01:00
Jozef Lawrynowicz
762ca20364 Implement the "persistent" attribute
The "persistent" attribute is used for variables that are initialized
by the program loader, but are not initialized by the runtime startup
code. "persistent" variables are placed in a non-volatile area of
memory, which allows their value to "persist" between processor resets.

gcc/c-family/ChangeLog:

	* c-attribs.c (handle_special_var_sec_attribute): New.
	(handle_noinit_attribute): Remove.
	(attr_noinit_exclusions): Rename to...
	(attr_section_exclusions): ...this, and add "persistent" attribute
	exclusion.
	(c_common_attribute_table): Add "persistent" attribute.

gcc/ChangeLog:

	* doc/extend.texi (Common Variable Attributes): Document the
	"persistent" variable attribute.
	* doc/sourcebuild.texi (Effective-Target Keywords): Document
	the "persistent" effective target keyword.
	* tree.h (DECL_PERSISTENT_P): Define.
	* varasm.c (bss_initializer_p): Return false for a
	DECL_PERSISTENT_P decl initialized to zero.
	(default_section_type_flags): Handle the ".persistent" section.
	(default_elf_select_section): Likewise.
	(default_unique_section): Likewise.

gcc/testsuite/ChangeLog:

	* gcc.c-torture/execute/noinit-attribute.c: Moved to...
	* c-c++-common/torture/attr-noinit-main.inc: ...here.
	* lib/target-supports.exp (check_effective_target_persistent): New.
	* c-c++-common/torture/attr-noinit-1.c: New test.
	* c-c++-common/torture/attr-noinit-2.c: New test.
	* c-c++-common/torture/attr-noinit-3.c: New test.
	* c-c++-common/torture/attr-noinit-invalid.c: New test.
	* c-c++-common/torture/attr-persistent-1.c: New test.
	* c-c++-common/torture/attr-persistent-2.c: New test.
	* c-c++-common/torture/attr-persistent-3.c: New test.
	* c-c++-common/torture/attr-persistent-invalid.c: New test.
	* c-c++-common/torture/attr-persistent-main.inc: New test.
2020-11-23 12:15:51 +00:00
Jozef Lawrynowicz
fb8309d4ab cp/decl.c: Set DECL_INITIAL before attribute processing
Attribute handlers may want to examine DECL_INITIAL for a decl, to
validate the attribute being applied. For C++, DECL_INITIAL is currently
not set until cp_finish_decl, by which time attribute validation has
already been performed.

For msp430-elf this causes the "persistent" attribute to always be
rejected for C++, since DECL_INITIAL must be non-null for the
attribute to be applied to a decl.

This patch ensures DECL_INITIAL is set for initialized decls early in
start_decl, before attribute handlers run. This allows the
initialization status of the decl to be examined by the handlers.
DECL_INITIAL must be restored to it's initial value after attribute
validation is performed, so as to not interfere with later decl
processing.

gcc/cp/ChangeLog:

	* decl.c (start_decl): Set DECL_INITIAL for initialized decls
	before attribute processing.

gcc/testsuite/ChangeLog:

	* gcc.target/msp430/data-attributes-2.c: Adjust test.
	* g++.target/msp430/data-attributes.C: New test.
	* g++.target/msp430/msp430.exp: New test.
2020-11-23 12:06:15 +00:00
Jozef Lawrynowicz
b510765ded Fix "noinit" attribute being ignored for -O0 and -fdata-sections
Variables with the "noinit" attribute are ignored at -O0 because they
are treated like a regular bss variable and placed in the .bss section.

With -fdata-sections they are ignored because they are not handled in
resolve_unique_section.

gcc/ChangeLog:

	* tree.h (DECL_NOINIT_P): Define.
	* varasm.c (DECL_NOINIT_P): Check DECL_NOINIT_P before using
	unnamed bss/lcomm sections for bss_initializer variables.
	(default_elf_select_section): Use DECL_NOINIT_P instead of
	looking up attribute for .noinit section selection.
	(default_unique_section): Check DECL_NOINIT_P for .noinit
	section selection.

gcc/testsuite/ChangeLog:

	* gcc.c-torture/execute/noinit-attribute.c: Don't override
	optimization options set by torture test harness.
	* lib/target-supports.exp (check_effective_target_noinit): Adjust
	comment formatting.
2020-11-23 11:43:39 +00:00
Matthew Malcomson
4a8c54359a Document bootstrap-asan configure option
Document how to configure using asan (bootstrap-asan option to the
--with-build-config configure argument).

gcc/ChangeLog:

	* doc/install.texi: Document bootstrap-asan option.
2020-11-23 11:26:49 +00:00
Christophe Lyon
771a4552b6 testsuite/arm: add missing -mthumb to several tests
Some tests force -mcpu=cortex-mXX but do not add -mthumb, causing
errors if GCC is not configured to default to Thumb code
(--with-mode=thumb):
cc1: error: target CPU does not support ARM mode

This patch adds -mthumb where relevant.

2020-11-23  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/testsuite/
	* gcc.target/arm/cortex-m55-nodsp-flag-hard.c: Add -mthumb.
	* gcc.target/arm/cortex-m55-nodsp-flag-softfp.c: Likewise.
	* gcc.target/arm/cortex-m55-nodsp-nofp-flag-softfp.c: Likewise.
	* gcc.target/arm/cortex-m55-nofp-flag-hard.c: Likewise.
	* gcc.target/arm/cortex-m55-nofp-flag-softfp.c: Likewise.
	* gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c: Likewise.
	* gcc.target/arm/cortex-m55-nomve-flag-hard.c: Likewise.
	* gcc.target/arm/cortex-m55-nomve-flag-softfp.c: Likewise.
	* gcc.target/arm/cortex-m55-nomve.fp-flag-hard.c: Likewise.
	* gcc.target/arm/cortex-m55-nomve.fp-flag-softfp.c: Likewise.
	* gcc.target/arm/mve/intrinsics/pr97327.c: Likewise.
2020-11-23 09:59:23 +00:00
Richard Sandiford
d3585f5d0d c++: Add missing verify_type_context call [PR97904]
When adding the verify_type_context target hook, I'd missed
a site that needs to check an array element type.

gcc/cp/
	PR c++/97904
	* pt.c (tsubst): Use verify_type_context to check the type
	of an array element.

gcc/testsuite/
	PR c++/97904
	* g++.dg/ext/sve-sizeless-1.C: Add more template tests.
	* g++.dg/ext/sve-sizeless-2.C: Likewise.
2020-11-23 09:06:59 +00:00
GCC Administrator
b1a5e1b2bc Daily bump. 2020-11-23 00:16:22 +00:00
Uros Bizjak
e23f47ec40 i386: Use SWI48DWI mode iterator for abs and maxmin [PR97873]
Generate special double mode sequence also for TImode on 64bit targets.

2020-11-22  Uroš Bizjak  <ubizjak@gmail.com>

	PR target/97873

gcc/
	* config/i386/i386.md (abs<mode>2): Use SWI48DWI mode iterator.
	(*abs<dwi>2_doubleword): Use DWIH mode iterator.

	(<maxmin:code><mode>3): Use SWI48DWI mode iterator.
	(*<maxmin:code><dwi>3_doubleword): Use DWIH mode iterator.

gcc/testsuite/
	* gcc.target/i386/pr97873-2.c: New test.
2020-11-22 22:27:35 +01:00
Austin Law
f16897cb4b H8 cc0 conversion
gcc/
	* config/h8300/addsub.md: Turn existing patterns into
	define_insn_and_split style patterns where the splitter
	adds a clobber of the condition code register.  Drop "cc"
	attribute.  Add _clobber_flags patterns to match output of
	the splitters.
	(add<mod>3_incdec): Remove pattern
	(adds/subs splitter): Only run before reload.
	* config/h8300/bitfield.md: Turn existing patterns into
	define_insn_and_split style patterns where the splitter
	adds a clobber of the condition code register.  Drop "cc"
	attribute.  Add _clobber_flags patterns to match output
	of the splitters.
	(cstoreqi4, cstorehi4, cstoresi4): Comment out
	(*bstzhireg, *cmpstz, *bstz, *bistz, *cmpcondset): Likewise
	(*condbset, *cmpcondbclr, *condbclr): Likewise.
	(*cmpcondbsetreg, *condbsetreg, *cmpcondbclrreg): Likewise.
	(*condbclrreg): Likewise.
	* config/h8300/combiner.md: Turn existing patterns into
	define_insn_and_split style patterns where the splitter
	adds a clobber of the condition code register.  Drop "cc"
	attribute.  Add _clobber_flags patterns to match output of
	the splitters.  Add appropriate CC register clobbers to
	existing splitters.
	(*addsi3_and_r_1): Disable for now.
	(*addsi3_and_not_r_1, bit-test branches): Likewise.
	* config/h8300/divmod.md: Turn existing patterns into
	define_insn_and_split style patterns where the splitter
	adds a clobber of the condition code register.  Drop "cc"
	attribute.  Add _clobber_flags patterns to match output of
	the splitters.
	* config/h8300/extensions.md: Turn existing patterns into
	define_insn_and_split style patterns where the splitter
	adds a clobber of the condition code register.  Drop "cc"
	attribute.  Add _clobber_flags patterns to match output of
	the splitters.
	* config/h8300/genmova.sh: Drop "cc" attribute from patterns.
	* config/h8300/mova.md: Drop "cc" attribute from patterns.
	* config/h8300/h8300-modes.def: Add CCZN and CCZNV modes.
	* config/h8300/h8300-protos.h (output_plussi): Update prototype.
	(compute_plussi_length): Likewise.
	(h8300_select_cc_mode): Add prototype.
	(compute_a_shift_cc): Remove prototype
	(cmpute_logical_op_cc): Likewise.
	* config/h8300/h8300.c (names_big): Add "cc" register.
	(names_extended, names_upper_extended): Likewise.
	(h8300_emit_stack_adjustment): Be more selective about setting
	RTX_FRAME_RELATED_P.
	(h8300_print_operand): Handle CCZN mode
	(h8300_select_cc_mode): New function.
	(notice_update_cc): if-0 out.  Only kept for reference purposes.
	(h8300_expand_store): Likewise.
	(h8300_binary_length): Handle new insn forms.
	(output_plussi): Add argument for NEED_FLAGS and handle that case.
	(compute_plussi_length): Likewise.
	(compute_logical_op_cc): Return integer.
	(TARGET_FLAGS_REGNUM): Define.
	* config/h8300/h8300.h (FIRST_PSEUDO_REGISTER): Bump for cc register.
	(FIXED_REGISTERS, CALL_USED_REGISTERS): Handle cc register.
	(REG_ALLOC_ORDER, REGISTER_NAMES): Likewise.
	(SELECT_CC_MODE): Define.
	* config/h8300/h8300.md: Add CC_REG.
	Do not include peepholes.md for now.
	* config/h8300/jumpcall.md (cbranchqi4): Consolidate into
	cbranch<mode>4.
	(cbranchhi4, cbranchsi4): Likewise.
	(cbranch<mode>4): New expander.
	(branch): New define_insn_and_split for use before reload.
	(branch_1, branch_1_false): New patterns to match splitter output.
	Remove code to manage cc_status.flags.
	* config/h8300/logical.md: Turn existing patterns into
	define_insn_and_split style patterns where the splitter
	adds a clobber of the condition code register.  Drop "cc"
	attribute.  Add _clobber_flags patterns to match output of
	the splitters.  Move various peepholes into this file.
	* config/h8300/movepush.md: Turn existing patterns into
	define_insn_and_split style patterns where the splitter
	adds a clobber of the condition code register.  Drop "cc"
	attribute.  Add _clobber_flags patterns to match output of
	the splitters.
	* config/h8300/multiply.md: Turn existing patterns into
	define_insn_and_split style patterns where the splitter
	adds a clobber of the condition code register.  Drop "cc"
	attribute.  Add _clobber_flags patterns to match output of
	the splitters.
	* config/h8300/other.md: Turn existing patterns into
	define_insn_and_split style patterns where the splitter
	adds a clobber of the condition code register.  Drop "cc"
	attribute.  Add _clobber_flags patterns to match output of
	the splitters.
	* config/h8300/peepholes.md: Remove peepholes that were moved
	elsewhere.
	* config/h8300/predicates.md (simple_memory_operand): New.
	* config/h8300/proepi.md: Drop "cc" attribute setting.
	* config/h8300/shiftrotate.md: Turn existing patterns into
	define_insn_and_split style patterns where the splitter
	adds a clobber of the condition code register.  Drop "cc"
	attribute.  Add _clobber_flags patterns to match output of
	the splitters.
	* config/h8300/testcompare.md: Turn existing patterns into
	define_insn_and_split style patterns where the splitter
	adds a clobber of the condition code register.  Drop "cc"
	attribute.  Add _clobber_flags patterns to match output of
	the splitters.  Disable various patterns for now.
	Move some peepholes that were previously in peepholes.md here.
2020-11-22 12:28:58 -07:00