Commit Graph

178595 Commits

Author SHA1 Message Date
Hans-Peter Nilsson eb08b5d1d7 mmix.h (ASM_OUTPUT_EXTERNAL): Define to default_elf_asm_output_external.
Whoops.  When un-disabling visibility support for mmix, I missed that
some of the newly enabled tests were FAILs, for not emitting .hidden
for references to external declarations.  This takes care of
gcc.dg/visibility-14.c .. -19.c, and gcc.dg/visibility-23.c.

gcc:
	* config/mmix/mmix.h (ASM_OUTPUT_EXTERNAL): Define to
	default_elf_asm_output_external.
2020-07-29 02:29:54 +02:00
GCC Administrator 7ebb7d0ce1 Daily bump. 2020-07-29 00:16:24 +00:00
Sergei Trofimovich cbf10ac51c ipa/96291: don't crash on unoptimized lto functions
In PR ipa/96291 the test contained an SCC with one
unoptimized function. This tricked ipa-cp into NULL dereference.

has_undead_caller_from_outside_scc_p() did not take into account
that unoptimized funtions don't have IPA summary analysis. And
dereferenced NULL pointer causing an ICE.

gcc/
	PR ipa/96291
	* ipa-cp.c (has_undead_caller_from_outside_scc_p): Consider
	unoptimized callers as undead.

gcc/testsuite/
	PR ipa/96291
	* gcc.dg/lto/pr96291_0.c: New testcase.
	* gcc.dg/lto/pr96291_1.c: Support file.
	* gcc.dg/lto/pr96291_2.c: Likewise.
	* gcc.dg/lto/pr96291.h: Likewise.
2020-07-28 23:19:00 +01:00
Roger Sayle 33bf56ddc6 middle-end: Parity and popcount folding optimizations.
This patch implements several constant folding optimizations
for __builtin_parity and friends.  We canonicalize popcount(x)&1
as parity(x) in gimple, and potentially convert back again when
we expand to RTL.  parity(~x) is simplified to parity(x), which
is true for all integer modes with an even number of bits.
But probably most usefully, parity(x)^parity(y) can be simplified
to a parity(x^y), requiring only a single libcall or popcount.

This patch optimizes popcount and parity of an argument known to have
at most a single bit set, to be that single bit.  Hence, popcount(x&8)
is simplified to (x>>3)&1.   This generalizes the existing optimization
of popcount(x&1) being simplified to x&1, which is cleaned up with
this patch.

2020-07-28  Roger Sayle  <roger@nextmovesoftware.com>
	    Richard Biener  <rguenther@suse.de>

gcc/ChangeLog
	* match.pd (popcount(x)&1 -> parity(x)): New simplification.
	(parity(~x) -> parity(x)): New simplification.
	(parity(x)^parity(y) -> parity(x^y)): New simplification.
	(parity(x&1) -> x&1): New simplification.
	(popcount(x) -> x>>C): New simplification.

gcc/testsuite/ChangeLog
	* gcc.dg/fold-popcount-5.c: New test.
	* gcc.dg/fold-parity-1.c: Likewise.
	* gcc.dg/fold-parity-2.c: Likewise.
	* gcc.dg/fold-parity-3.c: Likewise.
	* gcc.dg/fold-parity-4.c: Likewise.
	* gcc.dg/fold-parity-5.c: Likewise.
2020-07-28 22:56:24 +01:00
Nathan Sidwell f3665bd111 c++: Set more DECL_CONTEXTs
I discovered we were not setting DECL_CONTEXT in a few cases, and
grokfndecl's control flow wasn't making it clear that we were doing it
in all cases.

	gcc/cp/
	* cp-gimplify.c (cp_genericize_r): Set IMPORTED_DECL's context.
	* cp-objcp-common.c (cp_pushdecl): Set decl's context.
	* decl.c (grokfndecl): Make DECL_CONTEXT setting clearer.
2020-07-28 09:01:32 -07:00
Nathan Sidwell 0cd58a9f09 c++: better fixup_type_variants
fixup_type_variants was almost doing all that finish_struct needs.
May as well make it do it all.

	gcc/cp/
	* class.c (fixup_type_variants): Copy TYPE_SIZE and
	TYPE_SIZE_UINIT.
	(finish_struct): Call it.
2020-07-28 09:01:31 -07:00
Nathan Sidwell 9b837af463 c++: tree dump indentation
We were always forcing an indent, even if there was nothing to indent.
Fixed thusly.

	gcc/cp/
	* ptree.c (cxx_print_decl): Better indentation.
2020-07-28 09:01:31 -07:00
Nathan Sidwell 2ddae15e80 testsuite: Fix spello
'Patterns' has one 'r'.

	gcc/testsuite/
	* lib/options.exp: Fix spello
2020-07-28 09:01:31 -07:00
Jakub Jelinek 86cb35983f c++: Fix up cp_lexer_safe_previous_token [PR96328]
The following testcase ICEs, because cp_lexer_safe_previous_token calls
cp_lexer_previous_token and that ICEs, because all tokens in the lexer
buffer before the current one (CPP_EOF) have been purged.

cp_lexer_safe_previous_token is used in the context where it is ok if it
punts, so the patch changes the function so that it doesn't assert there is
some previous token, but instead returns NULL like in other cases where it
punts.

In addition to this, in the last hunk it does a micro-optimization, don't
call the potentially expensive function if it will not need the result,
instead check the least expensive condition first.

And the middle hunk is a similar change from Mark's version of the patch,
to use the safe variant in there because it is again just about a hint
and it is better not to provide the hint than to ICE, though we don't have a
testcase that would ICE.

2020-07-28  Jakub Jelinek  <jakub@redhat.com>
	    Mark Wielaard  <mark@klomp.org>

	PR c++/96328
	* parser.c (cp_lexer_safe_previous_token): Don't call
	cp_lexer_previous_token, instead inline it by hand and return NULL
	instead of failing assertion if all previous tokens until the first
	one are purged.
	(cp_parser_error_1): Optimize - only call cp_lexer_safe_previous_token
	if token->type is CPP_NAME.  Use cp_lexer_safe_previous_token instead
	of cp_lexer_previous_token for the missing_token_desc != RT_NONE
	case too.

	* g++.dg/diagnostic/pr96328.C: New test.

Co-Authored-By: Mark Wielaard <mark@klomp.org>
2020-07-28 15:41:30 +02:00
Jakub Jelinek ae49af9485 libcpp: Fix up raw string literal parsing error-recovery [PR96323]
For (invalid) newline inside of the raw string literal delimiter, doing
continue means we skip the needed processing of newlines.  Instead of
duplicating that, this patch just doesn't continue for those.

2020-07-28  Jakub Jelinek  <jakub@redhat.com>

	PR preprocessor/96323
	* lex.c (lex_raw_string): For c == '\n' don't continue after reporting
	an prefix delimiter error.

	* c-c++-common/cpp/pr96323.c: New test.
2020-07-28 15:40:15 +02:00
Tom de Vries 862a58ed83 nvptx: Support 16-bit shifts and extendqihi2
Add support for 16-bits shifts and for sign extension from 8 bits to
16 bits.

This patch has been tested on nvptx-none with no new regressions.

2020-07-28  Roger Sayle  <roger@nextmovesoftware.com>
	    Tom de Vries  <tdevries@suse.de>

gcc/ChangeLog:

	* config/nvptx/nvptx.md (extendqihi2): New instruction.
	(ashl<mode>3, ashr<mode>3, lshr<mode>3): Support HImode.

gcc/testsuite/ChangeLog:

	* gcc.target/nvptx/cvt.c: New test.
	* gcc.target/nvptx/shift16.c: New test.
2020-07-28 15:13:54 +02:00
Nathan Sidwell 134051f16b preprocessor: Simplify read_main
We can always use the final map to get the return value, rather than
conditionally only when there was an immediate line directive.

	libcpp/
	* init.c (cpp_read_main_file): Always use the last map for
	the return value.
2020-07-28 05:52:44 -07:00
François Dumont 6dcf042368 libstdc++: Do not over-size hashtable buckets on range insertion
We used to consider range size on insertion but on unique keys container
not all range values might be inserted resulting in over-sizing. In this
case we just consider user reservation and if none then the container will
adapt to actually inserted elements.

libstdc++-v3/ChangeLog:

	* include/bits/hashtable.h
	(_Hashtable<>(_InputIterator, _InputIterator, size_t, const _H1&,
	const _H2&, const _Hash&, const _Equal&, const _ExtractKey&,
	const allocator_type&, true_type)): New.
	(_Hashtable<>(_InputIterator, _InputIterator, size_t, const _H1&,
	const _H2&, const _Hash&, const _Equal&, const _ExtractKey&,
	const allocator_type&, false_type)): New.
	(_Hashtable<>(_InputIterator, _InputIterator, size_t, const _H1&,
	const _H2&, const _Hash&, const _Equal&, const _ExtractKey&,
	const allocator_type&)): Delegate to latters.
	(operator=(initializer_list<value_type>)): Rehash if too small.
	(_M_insert(_Arg&&, const _NodeGenerator&, true_type)): Remove
	size_t len parameter.
	* include/bits/hashtable_policy.h (_Insert_base<>::_M_insert_range):
	Do not try to get input range distance.
	* testsuite/23_containers/unordered_set/cons/bucket_hint.cc: New test.
	* testsuite/23_containers/unordered_set/modifiers/insert.cc: New test.
2020-07-28 14:37:16 +02:00
Jakub Jelinek f40888fff7 testsuite: Fix up nontype-subob1.C for targets with short int, int or long long ssize_t
2020-07-28  Jakub Jelinek  <jakub@redhat.com>

	* g++.dg/cpp2a/nontype-subob1.C: Allow s1, i1 or x1 instead of l1 for
	targets with short, int or long long ssize_t.
2020-07-28 11:32:36 +02:00
Jakub Jelinek f9264b9008 expander: Fix ICE in maybe_warn_rdwr_sizes [PR96335]
The following testcase ICEs in maybe_warn_rdwr_sizes.  The problem is that
the caller uses its fndecl and fntype variables to fill up rdwr_map, and
the fntype in that case is a prototype with the access attribute and all
the checks needed for that performed.  But the maybe_warn_rdwr_sizes
function tries to rediscover fndecl/fntype itself and does it differently
from how the caller did (for fndecl get_callee_fndecl and fntype from that
FUNCTION_DECL, otherwise sets fntype to CALL_EXPR_FN's type).

On the testcase, get_callee_fndecl does find a FUNCTION_DECL because
it does STRIP_NOPS in between.

Instead of trying to rediscover those, this patch just passes them down,
like is done in several other functions.

2020-07-28  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/96335
	* calls.c (maybe_warn_rdwr_sizes): Add FNDECL and FNTYPE arguments,
	instead of trying to rediscover them in the body.
	(initialize_argument_information): Adjust caller.

	* gcc.dg/pr96335.c: New test.
2020-07-28 11:08:29 +02:00
Kewen Lin 0ff959e0a2 vect: Refactor peel_iters_{pro,epi}logue cost modeling
This patch is to refactor the existing peel_iters_prologue and
peel_iters_epilogue cost model handlings, by following the structure
below suggested by Richard Sandiford:

  - calculate peel_iters_prologue
  - calculate peel_iters_epilogue
  - add costs associated with peel_iters_prologue
  - add costs associated with peel_iters_epilogue
  - add costs related to branch taken/not_taken.

Bootstrapped/regtested on aarch64-linux-gnu.

gcc/ChangeLog:

	* tree-vect-loop.c (vect_get_known_peeling_cost): Factor out some code
	to determine peel_iters_epilogue to...
	(vect_get_peel_iters_epilogue): ...this new function.
	(vect_estimate_min_profitable_iters): Refactor cost calculation on
	peel_iters_prologue and peel_iters_epilogue.
2020-07-27 21:30:26 -05:00
GCC Administrator e71dab8774 Daily bump. 2020-07-28 00:16:25 +00:00
Ian Lance Taylor 108fdcc56e compiler,runtime: pass only ptr and len to some runtime calls
This ports https://golang.org/cl/227163 to the Go frontend.
This is a step toward moving up to the go1.15rc1 release.

Original CL description:

    cmd/compile,runtime: pass only ptr and len to some runtime calls

    Some runtime calls accept a slice, but only use ptr and len.
    This change modifies most such routines to accept only ptr and len.

    After this change, the only runtime calls that accept an unnecessary
    cap arg are concatstrings and slicerunetostring.
    Neither is particularly common, and both are complicated to modify.

    Negligible compiler performance impact. Shrinks binaries a little.
    There are only a few regressions; the one I investigated was
    due to register allocation fluctuation.

    Passes 'go test -race std cmd', modulo golang/go#38265 and golang/go#38266.
    Wow, does that take a long time to run.

    file      before    after     Δ       %
    compile   19655024  19655152  +128    +0.001%
    cover     5244840   5236648   -8192   -0.156%
    dist      3662376   3658280   -4096   -0.112%
    link      6680056   6675960   -4096   -0.061%
    pprof     14789844  14777556  -12288  -0.083%
    test2json 2824744   2820648   -4096   -0.145%
    trace     11647876  11639684  -8192   -0.070%
    vet       8260472   8256376   -4096   -0.050%
    total     115163736 115118808 -44928  -0.039%

For golang/go#36890

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/245099
2020-07-27 17:05:17 -07:00
Ian Lance Taylor e1d3a86fd3 compiler: for package-scope "a = b; b = x" just set "a = x"
This avoids requiring an init function to initialize the variable.
This can only be done if x is a static initializer.

The go1.15rc1 runtime package relies on this optimization.
The package has a variable "var maxSearchAddr = maxOffAddr".
The maxSearchAddr variable is used by code that runs before package
initialization is complete.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/245098
2020-07-27 17:02:58 -07:00
Hans-Peter Nilsson 1b024c9a29 gcc.dg/torture/pr39074-2.c, pr39074.c, pta-callused-1.c: Adjust for mmix.
These FAILs for mmix showed up as regressions for me due to a
flaw in the btest-gcc.sh test-results-accounting: a bug was
recently fixed regarding the naming of dump-files so the names
are again correct.  To wit, parts of the tests that were
UNRESOLVED, due to missing dump-files, and ignored in the
presence of other parts (execution, excess errors) PASSing,
became FAIL, trumping the PASSing parts of the tests.

As in a recent patch, the variables are "privatized" using
ASM_PN_FORMAT for MMIX and the lines to match look like:
 y::0_1 = { i }
 y::0_1, points-to NULL, points-to vars: { D.1465 } (nonlocal, escaped)
instead of e.g. for cris-elf:
 y.0_1 = { i }
 y.0_1, points-to NULL, points-to vars: { D.1433 } (nonlocal, escaped)
Also checked that the general pattern still matches for cris-elf.

gcc/testsuite:
	* gcc.dg/torture/pr39074-2.c: Adjust for mmix.
	* gcc.dg/torture/pr39074.c, gcc.dg/torture/pta-callused-1.c: Ditto.
2020-07-28 01:41:47 +02:00
Joseph Myers 6cd1038f11 Update gcc .po files.
* be.po, da.po, de.po, el.po, es.po, fi.po, fr.po, hr.po, id.po,
	ja.po, nl.po, ru.po, sr.po, sv.po, tr.po, uk.po, vi.po, zh_CN.po,
	zh_TW.po: Update.
2020-07-27 22:51:58 +00:00
Nathan Sidwell 06aa77035c common: Use strcmp to compare location file names
The logic to figure out where a missing #include should be inserted
uses pointer equality to check filenames -- the routine even says so.
But cpplib makes no such guarantee.  It happens to be true for input
that it preprocesses[* see line zero below], but is not true for
source that has already been preprocessed -- all those '# ...' line
directives produce disctinct filename strings.  That renders using
-fdirectives-only as a prescanning stage (as I understand some people
do), broken.

This patch changes to string comparisons, and explicitly rejects any
line-zero location map that occurs at the beginning of a file.  The
very first map of a file has a different string to the remaining maps,
and we never tripped on that because of the pointer comparison.  The
second testcase deploys -save-temps to cause an intermediate
preprocessed output that is read back.

	gcc/c-family/
	* c-common.c (try_to_locate_new_include_insertion_point): Use
	strcmp, not pointer equality.
	gcc/testsuite/
	* g++.dg/lookup/missing-std-include-10.h: New.
	* g++.dg/lookup/missing-std-include-10.C: New.
	* g++.dg/lookup/missing-std-include-11.C: New.
2020-07-27 13:13:32 -07:00
Nathan Sidwell b95eba48a1 c++: Name as_base type
The as-base type never got a name.  For modules I needed to give it a
name to serialize properly, and it's useful when debugging the
compiler, so we may as well have it on trunk.  There's also a bug
where its fields can have NSDMIs from the main class.  This happens to
be silent on trunk, but can be a GC leak where we retain a deferred
parse node there. (On modules it blows up, because we're not prepared
to serialize deferred parse nodes, as they should never survive
parsing.

	gcc/cp/
	* cp-tree.h (enum cp_tree_index): Add CPTI_AS_BASE_IDENTIFIER.
	(as_base_identifier): Define.
	* decl.c (initialize_predifined_identifiers): Initialize as_base
	identifier.
	* class.c (layout_class_type): Name the as-base type.  Zap
	NSDMI its fields may have.
2020-07-27 13:13:32 -07:00
Martin Sebor 07bd5544a3 Diagnose just-past-the-end references for minor array bounds.
Resolves:
PR tree-optimization/84079 - missing -Warray-bounds taking the address of past-the-end element of a multidimensional array

gcc/ChangeLog:

	PR tree-optimization/84079
	* gimple-array-bounds.cc (array_bounds_checker::check_addr_expr):
	Only allow just-past-the-end references for the most significant
	array bound.

gcc/testsuite/ChangeLog:

	PR tree-optimization/84079
	* gcc.dg/Warray-bounds-62.c: New test.
2020-07-27 14:02:27 -06:00
François Dumont f9d98fa748 libstdc++: Review _Hashtable count, equal_range _M_erase(false_type,) code
Simplify operator[] implementation using find method. Review several
_Hashtable method implementations to limit the computation of bucket index.
Introduce _M_update_bbegin to simplify code.

libstdc++-v3/ChangeLog:

	* include/bits/hashtable_policy.h (_Map_base<>::at): Use
	_Hashtable<>::find.
	(_Hashtable_base<>::_Equal_hash_code<>::_S_node_equals):New.
	(_Hashtable_base<>::_M_node_equals): New, use latter.
	(_Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash,
	_RehashPolicy, false>::_M_equal): Adapt to use latter.
	* include/bits/hashtable.h (_Hashtable<>::_M_update_bbegin): New.
	(_Hashtable<>::_M_assign): Use latter.
	(_Hashtable<>::_M_move_assign): Likewise.
	(_Hashtable<>(_Hashtable<>&&)): Likewise.
	(_Hashtable<>(_Hashtable<>&&, const allocator_type&)): Likewise.
	(_Hashtable<>::swap): Likewise.
	(_Hashtable<>::find): Build iterator directly from _M_find_node result.
	(_Hashtable<>::count): Use _Hashtable<>::find.
	(_Hashtable<>::equal_range): Likewise.
	(_Hashtable<>::_M_erase(false_type, const key_type&)): Use
	_M_node_equals.
2020-07-27 21:55:49 +02:00
Hu Jiangping d60758c74a driver: fix a problem with implementation of -falign-foo=0 [PR96247]
This patch makes the -falign-foo=0 work as described in the
documentation. Thanks for all the suggestions.

Changelog:
2020-07-27  Hu Jiangping  <hujiangping@cn.fujitsu.com>

	PR driver/96247
	* opts.c (check_alignment_argument): Set the -falign-Name
	on/off flag on and set the -falign-Name string value null,
	when the command-line specified argument is zero.
2020-07-27 18:22:23 +01:00
Ian Lance Taylor 8939cef951 compiler: scan all function literals for escape analysis
We were scanning only function literals with closures, but not all
function literals have closures.

Discovered because compiler failed building 1.15rc1, as there is a
function literal in the runtime package (p1 in hexdumpWords) that has
no closure and, without escape analysis, was forcing a variable to the
heap which is not permitted in the runtime.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/244802
2020-07-27 09:41:05 -07:00
Julian Brown bc4ed079dc openacc: Deep copy attach/detach should not affect reference counts
Attach and detach operations are not supposed to affect structural or
dynamic reference counts for OpenACC. Previously they did so, which led to
subtle problems in some circumstances. We can avoid reference-counting
attach/detach operations by extending and slightly repurposing the
do_detach field in target_var_desc. It is now called is_attach to better
reflect its new role.

2020-07-27  Julian Brown  <julian@codesourcery.com>
	    Thomas Schwinge  <thomas@codesourcery.com>

libgomp/
	* libgomp.h (struct target_var_desc): Rename do_detach field to
	is_attach.
	* oacc-mem.c (goacc_exit_datum_1): Add assert.  Don't set finalize for
	GOMP_MAP_FORCE_DETACH. Update checking to use is_attach field.
	(goacc_enter_data_internal): Don't affect reference counts
	for attach mappings.
	(goacc_exit_data_internal): Don't affect reference counts for detach
	mappings.
	* target.c (gomp_map_vars_existing): Don't affect reference counts for
	attach mappings.
	(gomp_map_vars_internal): Set renamed is_attach flag unconditionally to
	mark attach mappings.
	(gomp_unmap_vars_internal): Use is_attach flag to prevent affecting
	reference count for attach mappings.
	* testsuite/libgomp.oacc-c-c++-common/mdc-refcount-1.c: New test.
	* testsuite/libgomp.oacc-c-c++-common/mdc-refcount-2.c: New test.
	* testsuite/libgomp.oacc-c-c++-common/mdc-refcount-2.c: New test.
	* testsuite/libgomp.oacc-fortran/deep-copy-6-no_finalize.F90: Mark
	test as shouldfail.
	* testsuite/libgomp.oacc-fortran/deep-copy-6.f90: Adjust to fail
	gracefully in no-finalize mode.

Co-Authored-By: Thomas Schwinge <thomas@codesourcery.com>
2020-07-27 09:16:57 -07:00
Jonathan Wakely 2251b4a542 libstdc++: Make std::from_chars always round to nearest
Also fix the tests that fail on targets without uselocale.

libstdc++-v3/ChangeLog:

	* src/c++17/floating_from_chars.cc (from_chars_impl): Ensure
	that FE_NEAREST is used.
	* testsuite/20_util/from_chars/4.cc: Do not use if constexpr in
	a { target c++14 } test.
	[!_GLIBCXX_HAVE_USELOCALE]: Disable all tests.
	* testsuite/20_util/from_chars/5.cc [!_GLIBCXX_HAVE_USELOCALE]:
	Likewise.
	* testsuite/20_util/from_chars/6.cc: New test.
2020-07-27 15:51:24 +01:00
Martin Liska 7355a9408b
expr: build string_constant only for a char type
gcc/ChangeLog:

	PR tree-optimization/96058
	* expr.c (string_constant): Build string_constant only
	for a type that has same precision as char_type_node
	and is an integral type.
2020-07-27 16:18:15 +02:00
Richard Biener 8e5584f7a1 Remove useless backedge marking
I didn't find anything using EDGE_DFS_BACK in RTL infrastructure
used by var-tracking or var-tracking itself, the following removes
this computation.

2020-07-24  Richard Biener  <rguenther@suse.de>

	* var-tracking.c (variable_tracking_main_1): Remove call
	to mark_dfs_back_edges.
2020-07-27 16:04:53 +02:00
Martin Liska 55c9695cbe
Do not expand vector comparison with VEC_COND_EXPR.
gcc/ChangeLog:

	PR tree-optimization/96128
	* tree-vect-generic.c (expand_vector_comparison): Do not expand
	vector comparison with VEC_COND_EXPR.

gcc/testsuite/ChangeLog:

	PR tree-optimization/96128
	* gcc.target/s390/vector/pr96128.c: New test.
2020-07-27 15:04:24 +02:00
H.J. Lu c4c22e8302 LTO: Add -fcf-protection=check
Mixing -fcf-protection and -fcf-protection=none objects are allowed.
Linker just merges -fcf-protection values from all input objects.

Add -fcf-protection=check for the final link with LTO.  An error is
issued if LTO object files are compiled with different -fcf-protection
values.  Otherwise, -fcf-protection=check is ignored at the compile
time.  Without explicit -fcf-protection at link time, -fcf-protection
values from LTO object files are merged at the final link.

gcc/

	PR bootstrap/96203
	* common.opt: Add -fcf-protection=check.
	* flag-types.h (cf_protection_level): Add CF_CHECK.
	* lto-wrapper.c (merge_and_complain): Issue an error for
	mismatching -fcf-protection values with -fcf-protection=check.
	Otherwise, merge -fcf-protection values.
	* doc/invoke.texi: Document -fcf-protection=check.

gcc/testsuite/

	PR bootstrap/96203
	* gcc.target/i386/pr96203-1.c: New test.
	* gcc.target/i386/pr96203-2.c: Likewise.
2020-07-27 04:40:13 -07:00
Alexandre Oliva fd5966e8e0 [Ada] Revert "Revamp dump and aux output names"
gcc/ada/

	* switch.adb (Is_Internal_GCC_Switch): Revert accidental
	reintroduction of auxbase and auxbase-strip.
2020-07-27 04:05:21 -04:00
Javier Miranda abd4c42269 [Ada] Ada2020: AI12-0027 Access values and unaliased component
gcc/ada/

	* sem_res.adb (Resolve_Actuals): Restrict the check on matching
	aliased components to view conversions of array types that are
	not placed in an instance. In such case at runtime an object is
	created.
	* sem_util.ads (Is_Actual_In_Out_Parameter, Is_View_Conversion):
	New subprograms.
	* sem_util.adb (Is_Actual_In_Out_Parameter, Is_View_Conversion):
	New subprograms.
2020-07-27 04:05:21 -04:00
Arnaud Charlet 04c4a5101b [Ada] Assert failure on incorrect code
gcc/ada/

	* lib-xref.adb (Generate_Reference): Protect against malformed
	tree in case of severe errors.
	* sem_ch8.adb (Add_Implicit_Operator): Ditto.
2020-07-27 04:05:21 -04:00
Arnaud Charlet cb030dd735 [Ada] Switch Ada_Version_Runtime to Ada 2020
gcc/ada/

	* opt.ads (Ada_Version_Runtime): Set to Ada_2020.
	* sem_ch3.adb (Analyze_Subtype_Declaration): Propagate
	Is_Independent flag to subtypes.
	* libgnarl/s-taprop__linux.adb: Adapt to Ada 2020 warning.
	* libgnat/a-nbnbin.adb, libgnat/a-nbnbin.ads,
	libgnat/a-nbnbin__gmp.adb, libgnat/a-nbnbre.adb,
	libgnat/a-nbnbre.ads, libgnat/a-stobbu.adb,
	libgnat/a-stobbu.ads, libgnat/a-stobfi.adb,
	libgnat/a-stobfi.ads, libgnat/a-stoubu.adb,
	libgnat/a-stoubu.ads, libgnat/a-stoufi.adb,
	libgnat/a-stoufi.ads, libgnat/a-stoufo.adb,
	libgnat/a-stoufo.ads, libgnat/a-stouut.adb,
	libgnat/a-stouut.ads, libgnat/a-strsto.ads,
	libgnat/a-ststbo.adb, libgnat/a-ststbo.ads,
	libgnat/a-ststun.adb, libgnat/a-ststun.ads,
	libgnat/a-stteou.ads, libgnat/s-aoinar.ads,
	libgnat/s-aomoar.ads, libgnat/s-atopex.ads,
	libgnat/s-putaim.adb, libgnat/s-putaim.ads,
	libgnat/s-putima.adb, libgnat/s-putima.ads: Remove pragma
	Ada_2020, now redundant.
2020-07-27 04:05:20 -04:00
Justin Squirek 19796dddf0 [Ada] Wrong accessibility on 'Access of formal in call
gcc/ada/

	* exp_ch6.adb (Expand_Call_Helper): Modify addition of the extra
	accessibility parameter to take into account the extra
	accessibility of formals within the calling subprogram.
2020-07-27 04:05:20 -04:00
Bob Duff 116e8b669e [Ada] Bug in Enum_Subtype'Image in Ada 2020 mode
gcc/ada/

	* exp_imgv.adb (Expand_Image_Attribute): Add Root_Type, so
	constrained subtypes work.
2020-07-27 04:05:20 -04:00
Ghjuvan Lacambre f35bd40944 [Ada] Refactor pragma argument getters
gcc/ada/

	* exp_prag.adb (Arg1, Arg2, Arg3): Removed.
	(Arg_N): New function.
2020-07-27 04:05:20 -04:00
Arnaud Charlet 6c1bfc9e60 [Ada] AI12-0383 Renaming values
gcc/ada/

	* sem_ch8.adb (Analyze_Object_Renaming): Allow values in Ada
	2020 mode.
2020-07-27 04:05:19 -04:00
Arnaud Charlet 7b6fbc9ff3 [Ada] AI12-0377 View conversions and out parameters revisited
gcc/ada/

	* sem_res.adb (Resolve_Actuals): Refine 6.4.1 rules as per
	AI12-0377.
2020-07-27 04:05:19 -04:00
Bob Duff 2d4fe20359 [Ada] Ada2020: wording of 'Image messages
gcc/ada/

	* errout.ads, errout.adb (Error_Msg_Ada_2020_Feature): New
	procedure analogous to Error_Msg_Ada_2012_Feature.
	* sem_attr.adb (Analyze_Image_Attribute): Use
	Error_Msg_Ada_2012_Feature and Error_Msg_Ada_2020_Feature to
	indicate that Object'Image is allowed in Ada 2012, and that
	'Image is allowed for any type in Ada 2020.
2020-07-27 04:05:19 -04:00
Dmitriy Anisimkov 21717db17a [Ada] Unbounded string overriding control
gcc/ada/

	* libgnat/a-strunb.adb (Sum, Mul, Saturated_Sum, Saturated_Mul):
	New routines.  Use them when resulting string size more that
	length of the strings in parameters.
	(Unbounded_Slice): Use "- 1" instead of "+ 1" in opposite side
	of condition to avoid overflow.
	* libgnat/a-strunb__shared.adb (Sum, Mul): New routines.
	(Allocate): New routine with 2 parameters.  Use routine above
	when resulting string size more that length of the strings in
	parameters.
	(Aligned_Max_Length): Do not try to align to more than Natural'Last.
	(Unbounded_Slice): Use "- 1" instead of "+ 1" in opposite side
	of condition to avoid overflow.
2020-07-27 04:05:19 -04:00
Arnaud Charlet 7f365be815 [Ada] Remove disabled code
gcc/ada/

	* sem_attr.adb (Resolve_Attribute): Remove dead code.
2020-07-27 04:05:18 -04:00
Arnaud Charlet 4a08c95cf0 [Ada] Use membership tests in front-end
gcc/ada/

	* aspects.adb, atree.adb, atree.ads, checks.adb, contracts.adb,
	einfo.adb, errout.adb, exp_aggr.adb, exp_attr.adb, exp_cg.adb,
	exp_ch11.adb, exp_ch2.adb, exp_ch3.adb, exp_ch4.adb,
	exp_ch5.adb, exp_ch6.adb, exp_ch7.adb, exp_ch8.adb, exp_ch9.adb,
	exp_dbug.adb, exp_disp.adb, exp_intr.adb, exp_pakd.adb,
	exp_prag.adb, exp_put_image.adb, exp_smem.adb, exp_tss.adb,
	exp_unst.adb, exp_util.adb, freeze.adb, ghost.adb, gnat1drv.adb,
	inline.adb, lib-writ.adb, lib-xref-spark_specific.adb,
	lib-xref.adb, namet.adb, namet.ads, nlists.adb, par-ch10.adb,
	par-ch2.adb, par-ch3.adb, par-ch4.adb, par-ch5.adb, par-ch6.adb,
	par-prag.adb, par-util.adb, par_sco.adb, pprint.adb,
	repinfo.adb, restrict.adb, rtsfind.adb, scil_ll.adb, sem.adb,
	sem_aggr.adb, sem_attr.adb, sem_aux.adb, sem_cat.adb,
	sem_ch10.adb, sem_ch11.adb, sem_ch12.adb, sem_ch13.adb,
	sem_ch3.adb, sem_ch4.adb, sem_ch5.adb, sem_ch6.adb, sem_ch7.adb,
	sem_ch8.adb, sem_ch9.adb, sem_dim.adb, sem_disp.adb,
	sem_dist.adb, sem_elab.adb, sem_elim.adb, sem_eval.adb,
	sem_intr.adb, sem_mech.adb, sem_prag.adb, sem_res.adb,
	sem_scil.adb, sem_type.adb, sem_util.adb, sem_warn.adb,
	sinfo.adb, sinfo.ads, sprint.adb, styleg.adb, tbuild.adb,
	treepr.adb (Nkind_In, Nam_In, Ekind_In): Removed, replaced by
	membership tests.
2020-07-27 04:05:18 -04:00
Gary Dismukes 26ac7446f6 [Ada] AI12-0194: Language-defined aspects and entry bodies
gcc/ada/

	* sem_prag.adb (Analyze_Pragma, Pragma_Max_Entry_Queue_Length):
	Refine error message to indicate that the pragma must apply to
	an entry declaration, not just an entry.
2020-07-27 04:05:17 -04:00
Javier Miranda 84ae33e7f5 [Ada] Spurious error in generic dispatching constructor
gcc/ada/

	* exp_ch6.adb (Make_Build_In_Place_Iface_Call_In_Allocator):
	Revert previous patch, and add a missing type conversion to
	displace the pointer to the allocated object to reference the
	target dispatch table.
2020-07-27 04:05:17 -04:00
Javier Miranda 36f0cf4e60 [Ada] Ada2020: AI12-0027 Access values and unaliased component
gcc/ada/

	* sem_res.adb (Resolve_Actuals): Restore restrictive check on
	view conversions which required matching value of
	Has_Aliased_Components of formals and actuals. Required to avoid
	the regression of ACATS b460005.
2020-07-27 04:05:17 -04:00
Eric Botcazou 2c3bc159a8 [Ada] Remove obsolete special case in Switch_View
gcc/ada/

	* sem_ch12.adb (Instantiate_Package_Body): Add commentary for a
	nesting issue with parent handling and private view switching.
	(Switch_View): Do not skip specific private-dependent subtypes.
2020-07-27 04:05:17 -04:00