Commit Graph

178595 Commits

Author SHA1 Message Date
Hans-Peter Nilsson 77077c8812 gcc.dg/independent-cloneids-1.c: Skip for mmix.
Regular ELF label definitions for this test-case, matched by the
regexps, e.g.:
 /* { dg-final { scan-assembler-times {(?n)^_*bar[.$_]constprop[.$_]0:} 1 } } */
typically look like this:
bar_constprop.0:

For MMIX, they look like this:
bar_constprop::0	IS @

I think it's better to just skip the test for MMIX than further
uglifying the matching regexps, since the test is IIUC general
enough that nothing in the target port can reasonably make a
difference: it passes for all targets or fail for all targets.

gcc/testsuite:
	* gcc.dg/independent-cloneids-1.c: Skip for mmix.
	flag_stack_usage_info.
2020-07-21 02:43:11 +02:00
Hans-Peter Nilsson 5648254484 gcc.dg/cdce3.c: Update matched line-number.
I missed updating the line-number when adding that dg-skip-if.
Committed as obvious.

	* gcc.dg/cdce3.c: Update matched line-number.
2020-07-21 02:35:26 +02:00
GCC Administrator 0933f50859 Daily bump. 2020-07-21 00:16:28 +00:00
Hans-Peter Nilsson e21a33c232 mmix: support -fstack-usage
MMIX has two stacks; the regular one using register $254 as a
convention and the register-stack, pushed and popped by call
instructions (usually).  The decision to only report the stack usage
of the regular stack (and not of the register stack) may be updated,
perhaps the sum is better.  This initial decision is helped a little
bit by the order of passes: the size of the register-stack is
calculated only later (in the machine-dependent reorg pass), long
after finalization of the stack-usage info (in the prologue/epilogue
pass).  No regressions for mmix-knuth-mmixware (but a whole lot more
PASSes), committed.

gcc:
	* config/mmix/mmix.c (mmix_expand_prologue): Calculate the total
	allocated size and set current_function_static_stack_size, if
	flag_stack_usage_info.
2020-07-21 01:17:26 +02:00
Jonathan Wakely 932fbc868a libstdc++: Add std::from_chars for floating-point types
This adds the missing std::from_chars overloads for floating-point
types, as required for C++17 conformance.

The implementation is a hack and not intended to be used in the long
term. Rather than parsing the string directly, this determines the
initial portion of the string that matches the pattern determined by the
chars_format parameter, then creates a NTBS to be parsed by strtod (or
strtold or strtof).

Because creating a NTBS requires allocating memory, but std::from_chars
is noexcept, we need to be careful to minimise allocation. Even after
being careful, allocation failure is still possible, and so a
non-conforming std::no_more_memory error code might be returned.

Because strtod et al depend on the current locale, but std::from_chars
does not, we change the current thread's locale to "C" using newlocale
and uselocale before calling strtod, and restore it afterwards.

Because strtod doesn't have the equivalent of a std::chars_format
parameter, it has to examine the input to determine the format in use,
even though the std::from_chars code has already parsed it once (or
twice for large input strings!)

By replacing the use of strtod we could avoid allocation, avoid changing
locale, and use optimised code paths specific to each std::chars_format
case. We would also get more portable behaviour, rather than depending
on the presence of uselocale, and on any bugs or quirks of the target
libc's strtod. Replacing strtod is a project for a later date.

libstdc++-v3/ChangeLog:

	* acinclude.m4 (libtool_VERSION): Bump version.
	* config.h.in: Regenerate.
	* config/abi/pre/gnu.ver: Add GLIBCXX_3.4.29 version and new
	exports.
	* config/os/gnu-linux/ldbl-extra.ver: Add _GLIBCXX_LDBL_3.4.29
	version and new export.
	* configure: Regenerate.
	* configure.ac: Check for <xlocale.h> and uselocale.
	* crossconfig.m4: Add macro or checks for uselocale.
	* include/std/charconv (from_chars): Declare overloads for
	float, double, and long double.
	* src/c++17/Makefile.am: Add new file.
	* src/c++17/Makefile.in: Regenerate.
	* src/c++17/floating_from_chars.cc: New file.
	(from_chars): Define for float, double, and long double.
	* testsuite/20_util/from_chars/1_c++20_neg.cc: Prune extra
	diagnostics caused by new overloads.
	* testsuite/20_util/from_chars/1_neg.cc: Likewise.
	* testsuite/20_util/from_chars/2.cc: Check leading '+'.
	* testsuite/20_util/from_chars/4.cc: New test.
	* testsuite/20_util/from_chars/5.cc: New test.
	* testsuite/util/testsuite_abi.cc: Add new symbol versions.
2020-07-20 23:49:27 +01:00
Jason Merrill e443d82138 c++: Pseudo-destructor ends object lifetime.
P0593R6 is mostly about a new object model whereby malloc and the like are
treated as implicitly starting the lifetime of whatever trivial types are
necessary to give the program well-defined semantics; that seems only
relevant to TBAA, and is not implemented here.

The paper also specifies that a pseudo-destructor call (a destructor call
for a non-class type) ends the lifetime of the object like a destructor call
for an object of class type, even though it doesn't call a destructor; this
patch implements that change.

The paper was voted as a DR, so I'm applying this change to all standard
levels.  Like class end-of-life clobbers, it is controlled by
-flifetime-dse.

gcc/cp/ChangeLog:

	* pt.c (type_dependent_expression_p): A pseudo-dtor can be
	dependent.
	* semantics.c (finish_call_expr): Use build_trivial_dtor_call for
	pseudo-destructor.
	(finish_pseudo_destructor_expr): Leave type NULL for dependent arg.

gcc/testsuite/ChangeLog:

	* g++.dg/opt/flifetime-dse7.C: New test.
2020-07-20 18:18:12 -04:00
Jason Merrill 812798917c c++: Allow subobject references in C++20.
The last new thing allowed by P1907R1: subobject addresses as template
arguments.  The ABI group has discussed mangling for this; there has been
some talk of a compressed subobject mangling, but it hasn't been finalized,
so for now I'm using normal expression mangling.  In order for two array
subobject references to compare as equal template arguments, the offsets
need to have the same type, so I convert them to always be the same type,
currently ptrdiff_t.  Base class conversions are represented as a cast to
reference type, only if necessary to resolve an ambiguity.

This patch also updates the value of __cpp_nontype_template_args, since
the paper is fully implemented.

gcc/cp/ChangeLog:

	* mangle.c (write_base_ref): New.
	(write_expression): Use it for base field COMPONENT_REFs.
	* pt.c (invalid_tparm_referent_p): Canonicalize the type
	of array offsets.  Allow subobjects.

gcc/c-family/ChangeLog:

	* c-cppbuiltin.c (c_cpp_builtins): Update
	__cpp_nontype_template_args for C++20.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp1z/nontype2.C: No error in C++20.
	* g++.dg/template/nontype25.C: No error in C++20.
	* g++.dg/template/nontype8.C: No error in C++20.
	* g++.dg/cpp2a/nontype-subob1.C: New test.
	* g++.dg/cpp2a/nontype-subob2.C: New test.
	* g++.dg/cpp1z/nontype3.C: Now C++17-only.
	* g++.dg/cpp2a/feat-cxx2a.C: Adjust expected value.
2020-07-20 17:54:18 -04:00
Jason Merrill d0ffe9d5dc c++: Aggregate CTAD and string constants.
In CWG discussion, it was suggested that deduction from a string literal
should be to reference-to-const, so that we deduce 'char' rather than 'const
char' for T.

gcc/cp/ChangeLog:

	* pt.c (collect_ctor_idx_types): Add 'const' when deducing from
	a string constant.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/class-deduction-aggr7.C: New test.
2020-07-20 17:53:43 -04:00
Sergei Trofimovich 87891d5eaf sparc/sparc64: use crtendS.o for default-pie executables [PR96190]
In --enable-default-pie mode compiler should switch from
using crtend.o to crtendS.o. On sparc it is especially important
because crtend.o contains PIC-unfriendly code.

We use GNU_USER_TARGET_ENDFILE_SPEC as a baseline spec to get
crtendS.o instead of crtend.o in !no-pie mode.

gcc:

2020-07-14  Sergei Trofimovich  <siarheit@google.com>

	PR target/96190
	* config/sparc/linux.h (ENDFILE_SPEC): Use GNU_USER_TARGET_ENDFILE_SPEC
	to get crtendS.o for !no-pie mode.
	* config/sparc/linux64.h (ENDFILE_SPEC): Ditto.
2020-07-20 20:46:30 +01:00
Jonathan Wakely 4d1c5b4957 libstdc++: Avoid overflow in istream::get(streambuf&) [LWG 3464]
Similar to the recent changes to basic_istream::ignore, this change
ensures that _M_gcount doesn't overflow when extracting characters and
inserting them into another streambuf.

The solution used here is to use unsigned long long for the count. We
assume that the number of characters extracted won't exceed the maximum
value for that type, but even if it does we avoid any undefined
behaviour.

libstdc++-v3/ChangeLog:

	* include/bits/istream.tcc
	(basic_istream::get(__streambuf_type&, char_type): Use unsigned
	long long for counter and check if it would overflow _M_gcount.
	* testsuite/27_io/basic_istream/get/char/lwg3464.cc: New test.
	* testsuite/27_io/basic_istream/get/wchar_t/lwg3464.cc: New test.
2020-07-20 20:06:46 +01:00
y00520163 138b1d4f58 vect: Fix an ICE in vectorizable_simd_clone_call
In vectorizable_simd_clone_call, type compatibility is handled based on
the number of elements and the type compatibility of elements, which is
not enough. This patch add VIEW_CONVERT_EXPRs if the arguments types
and return type of simd clone function are distinct with the vectype of
stmt.

2020-07-20  Yang Yang  <yangyang305@huawei.com>

gcc/ChangeLog:

	* tree-vect-stmts.c (vectorizable_simd_clone_call): Add
	VIEW_CONVERT_EXPRs if the arguments types and return type
	of simd clone function are distinct with the vectype of stmt.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/sve/pr96195.c: New test.
2020-07-20 19:47:05 +01:00
Uros Bizjak 3c5e83d5b3 i386: Use lock prefixed insn instead of MFENCE [PR95750]
Currently, __atomic_thread_fence(seq_cst) on x86 and x86-64 generates
mfence instruction. A dummy atomic instruction (a lock-prefixed instruction
or xchg with a memory operand) would provide the same sequential consistency
guarantees while being more efficient on most current CPUs. The mfence
instruction additionally orders non-temporal stores, which is not relevant
for atomic operations and are not ordered by seq_cst atomic operations anyway.

2020-07-20  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:
	PR target/95750
	* config/i386/i386.h (TARGET_AVOID_MFENCE):
	Rename from TARGET_USE_XCHG_FOR_ATOMIC_STORE.
	* config/i386/sync.md (mfence_sse2): Disable for TARGET_AVOID_MFENCE.
	(mfence_nosse): Enable also for TARGET_AVOID_MFENCE. Emit stack
	referred memory in word_mode.
	(mem_thread_fence): Do not generate mfence_sse2 pattern when
	TARGET_AVOID_MFENCE is true.
	(atomic_store<mode>): Update for rename.
	* config/i386/x86-tune.def (X86_TUNE_AVOID_MFENCE):
	Rename from X86_TUNE_USE_XCHG_FOR_ATOMIC_STORE.

gcc/testsuite/ChangeLog:
	PR target/95750
	* gcc.target/i386/pr95750.c: New test.
2020-07-20 20:37:10 +02:00
Martin Sebor d5803b9876 Correct handling of constant representations containing embedded nuls.
Resolves:
PR middle-end/95189 - memcmp being wrongly stripped like strcm
PR middle-end/95886 - suboptimal memcpy with embedded zero bytes

gcc/ChangeLog:

	PR middle-end/95189
	PR middle-end/95886
	* builtins.c (inline_expand_builtin_string_cmp): Rename...
	(inline_expand_builtin_bytecmp): ...to this.
	(builtin_memcpy_read_str): Don't expect data to be nul-terminated.
	(expand_builtin_memory_copy_args): Handle object representations
	with embedded nul bytes.
	(expand_builtin_memcmp): Same.
	(expand_builtin_strcmp): Adjust call to naming change.
	(expand_builtin_strncmp): Same.
	* expr.c (string_constant): Create empty strings with nonzero size.
	* fold-const.c (c_getstr): Rename locals and update comments.
	* tree.c (build_string): Accept null pointer argument.
	(build_string_literal): Same.
	* tree.h (build_string): Provide a default.
	(build_string_literal): Same.

gcc/testsuite/ChangeLog:

	PR middle-end/95189
	PR middle-end/95886
	* gcc.dg/memcmp-pr95189.c: New test.
	* gcc.dg/strncmp-3.c: New test.
	* gcc.target/i386/memcpy-pr95886.c: New test.
2020-07-20 12:08:58 -06:00
Joseph Myers 3e99ed65cb Regenerate .pot files.
gcc/po/
	* gcc.pot: Regenerate.

libcpp/po/
	* cpplib.pot: Regenerate.
2020-07-20 18:06:29 +00:00
Martin Sebor b0c5a642ce Remove stray text from option description (PR c/96249).
gcc/c-family/ChangeLog:
	PR c/96249
	* c.opt: Remove stray text.
2020-07-20 11:56:54 -06:00
Alex Coplan 8764e9a3fc jit: Fix truncation of testsuite output [PR69435]
This fixes a bug in jit.exp which causes the DejaGnu output of the
libgccjit testsuite to be nondeterministically truncated. This bug was
copied from DejaGnu's own implementation of the host_execute function.
See the upstream bug report [0] where the maintainers point out that the
regex patterns in host_execute should (but don't currently) explicitly
match newlines to avoid relying on DejaGnu not reading more than one
line of the output (which is not guaranteed).

This should make it easier to test jit patches in the future, since it
makes it possible to reliably compare the output of two jit.sum files
(as with the other tests in GCC).

[0] : https://debbugs.gnu.org/cgi/bugreport.cgi?bug=42399

gcc/testsuite/
	PR jit/69435
	* jit.dg/jit.exp (fixed_host_execute): Fix regex patterns to
	always explicitly match newlines.
2020-07-20 16:31:57 +01:00
Richard Biener 57d4771b7c remove write-only array in rev_post_order_and_mark_dfs_back_seme
This removes a write-only array in
rev_post_order_and_mark_dfs_back_seme.

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

	* cfganal.c (rev_post_order_and_mark_dfs_back_seme): Remove
	write-only post array.
2020-07-20 16:00:48 +02:00
Nathan Sidwell a926eeedf4 preprocessor: line-map cleanups
I found the linemap logic dealing with running out of column numbers
confusing.  There's no need for completely separate code blocks there,
as we can rely on the masking operations working all the way down to
zero bits.  The two binary searches for linemap lookups could do with
modernization of placing the var decls at their initialization point.
(These two searches work in opposite directions, and while lower_bound
would work there, the caching got in the way and I decided to be
conservative.)

	libcpp/
	* line-map.c (linemap_add): Simplify column overflow calculation.
	Add comment about range and column bit init.
	(linemap_ordinary_map_lookup): Refactor for RAII
	(linemap_macro_map_lookup): Likewise.
2020-07-20 05:11:19 -07:00
Jakub Jelinek e4f1cbc35b gimple-fold: Handle bitfields in fold_const_aggregate_ref_1 [PR93121]
When working on __builtin_bit_cast that needs to handle bitfields too,
I've made the following change to handle at least some bitfields in
fold_const_aggregate_ref_1 (those that have integral representative).
It already handles some, but only those that start and end at byte
boundaries.

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

	PR libstdc++/93121
	* gimple-fold.c (fold_const_aggregate_ref_1): For COMPONENT_REF
	of a bitfield not aligned on byte boundaries try to
	fold_ctor_reference DECL_BIT_FIELD_REPRESENTATIVE if any and
	adjust it depending on endianity.

	* gcc.dg/tree-ssa/pr93121-2.c: New test.
2020-07-20 10:24:19 +02:00
Jakub Jelinek 83b171655d fold-const: Handle bitfields in native_encode_initializer [PR93121]
When working on __builtin_bit_cast that needs to handle bitfields too,
I've made the following change to handle at least some bitfields in
native_encode_initializer (those that have integral representative).

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

	PR libstdc++/93121
	* fold-const.c (native_encode_initializer): Handle bit-fields.

	* gcc.dg/tree-ssa/pr93121-1.c: New test.
2020-07-20 10:08:28 +02:00
Hans-Peter Nilsson 0251a7eef9 gcc.dg/const-uniq-1.c: Adjust scanned pattern for mmix.
Apparently local labels end up in the gimple dumps.  For mmix,
local labels that for other targets look like ".LC0" or "LC.0"
instead look like "LC:0".  Committed as obvious.

gcc/testsuite:
	* gcc.dg/const-uniq-1.c: Adjust scanned pattern for mmix.
2020-07-20 05:06:49 +02:00
Hans-Peter Nilsson f3d4b92239 gcc.dg/cdce3.c: Skip for mmix.
The test is gated on effective-target hard_float but what it
really requires is a sqrtf insn (SFmode, not DFmode).  (It
indeed passes for mmix-knuth-mmixware if the sqrtf is changed to
sqrt and float to double; there is a DFmode sqrt insn.)

Committed.

gcc/testsuite:
	* gcc.dg/cdce3.c: Skip for mmix.
2020-07-20 04:34:39 +02:00
Kewen Lin 9fb832ce38 vect: Support length-based partial vectors approach
Power9 supports vector load/store instruction lxvl/stxvl which allow
us to operate partial vectors with one specific length.  This patch
extends some of current mask-based partial vectors support code for
length-based approach, also adds some length specific support code.
So far it assumes that we can only have one partial vectors approach
at the same time, it will disable to use partial vectors if both
approaches co-exist.

Like the description of optab len_load/len_store, the length-based
approach can have two flavors, one is length in bytes, the other is
length in lanes.  This patch is mainly implemented and tested for
length in bytes, but as Richard S. suggested, most of code has
considered both flavors.

This also introduces one parameter vect-partial-vector-usage allow
users to control when the loop vectorizer considers using partial
vectors as an alternative to falling back to scalar code.

gcc/ChangeLog:

	* config/rs6000/rs6000.c (rs6000_option_override_internal):
	Set param_vect_partial_vector_usage to 0 explicitly.
	* doc/invoke.texi (vect-partial-vector-usage): Document new option.
	* optabs-query.c (get_len_load_store_mode): New function.
	* optabs-query.h (get_len_load_store_mode): New declare.
	* params.opt (vect-partial-vector-usage): New.
	* tree-vect-loop-manip.c (vect_set_loop_controls_directly): Add the
	handlings for vectorization using length-based partial vectors, call
	vect_gen_len for length generation, and rename some variables with
	items instead of scalars.
	(vect_set_loop_condition_partial_vectors): Add the handlings for
	vectorization using length-based partial vectors.
	(vect_do_peeling): Allow remaining eiters less than epilogue vf for
	LOOP_VINFO_USING_PARTIAL_VECTORS_P.
	* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Init
	epil_using_partial_vectors_p.
	(_loop_vec_info::~_loop_vec_info): Call release_vec_loop_controls
	for lengths destruction.
	(vect_verify_loop_lens): New function.
	(vect_analyze_loop): Add handlings for epilogue of loop when it's
	marked to use vectorization using partial vectors.
	(vect_analyze_loop_2): Add the check to allow only one vectorization
	approach using partial vectorization at the same time.  Check param
	vect-partial-vector-usage for partial vectors decision.  Mark
	LOOP_VINFO_EPIL_USING_PARTIAL_VECTORS_P if the epilogue is
	considerable to use partial vectors.  Call release_vec_loop_controls
	for lengths destruction.
	(vect_estimate_min_profitable_iters): Adjust for loop vectorization
	using length-based partial vectors.
	(vect_record_loop_mask): Init factor to 1 for vectorization using
	mask-based partial vectors.
	(vect_record_loop_len): New function.
	(vect_get_loop_len): Likewise.
	* tree-vect-stmts.c (check_load_store_for_partial_vectors): Add
	checks for vectorization using length-based partial vectors.  Factor
	some code to lambda function get_valid_nvectors.
	(vectorizable_store): Add handlings when using length-based partial
	vectors.
	(vectorizable_load): Likewise.
	(vect_gen_len): New function.
	* tree-vectorizer.h (struct rgroup_controls): Add field factor
	mainly for length-based partial vectors.
	(vec_loop_lens): New typedef.
	(_loop_vec_info): Add lens and epil_using_partial_vectors_p.
	(LOOP_VINFO_EPIL_USING_PARTIAL_VECTORS_P): New macro.
	(LOOP_VINFO_LENS): Likewise.
	(LOOP_VINFO_FULLY_WITH_LENGTH_P): Likewise.
	(vect_record_loop_len): New declare.
	(vect_get_loop_len): Likewise.
	(vect_gen_len): Likewise.
2020-07-19 21:13:28 -05:00
Hans-Peter Nilsson 3ca6f6698c gcc.dg/pr87485.c: Require scheduling
Committed as obvious, fixing one failure for mmix-knuth-mmixware.

gcc/testsuite:
	* gcc.dg/pr87485.c: Require scheduling.
2020-07-20 04:01:43 +02:00
Hans-Peter Nilsson dd64a7fd27 mmix: When debug-dump, revert to "standard" pseudos for emitting integers
The sole purpose of not providing pseudos and forcing use of
TARGET_ASM_INTEGER is to arrange for assembly output that people can,
instead of using gas, usefullt feed to mmixal (Knuth's assembler).  It
uses pseudos with slightly different semantics (BYTE, WYDE, TETRA,
OCTA).  Nice when it works, but that only happens for limited
use-cases and debug-information is excluded.

The dwarf2out.c shortcuts, looking up the pseudo-strings and doing the
output on its own, has the result that in absence of such
integer-emitting pseudos, the target TARGET_ASM_INTEGER hook is
called, which by definition outputs a newline, and then the
dwarf2out.c code redundantly adds another.  That uglifies output and
breaks the expectations of the dwarf2 parts of the test-suite.

The wart by which an extra newline is emitted is ripe for a cleanup,
and I started out thinking I'd add a default argument for emitting a
newline to the assemble_integer family of functions, but then
reconsidered.  I also can't bring myself to use different pseudos
with/without -g so instead I check for options for the more detailed
dumps, as used by the test-suite to get those DW_* strings in detailed
assembly output.

This eliminates all FAILs in the dwarf2-specific parts of the gcc
test-suite for mmix-knuth-mmixware, with no regressions.  Committed.

gcc:
	* config/mmix/mmix.c (mmix_option_override): Reinstate default
	integer-emitting targetm.asm_out pseudos when dumping detailed
	assembly-code.
	(mmix_assemble_integer): Update comment.
2020-07-20 03:17:04 +02:00
GCC Administrator 5154dab3da Daily bump. 2020-07-20 00:16:19 +00:00
Thomas Koenig 2e1b25350a Always use name from c_interop_kinds_table for -fc-prototypes.
When a user specified a KIND that was a parameter taking the value
of an iso_c_binding KIND, the code used the name of that parameter
to look up the type name.  Corrected by always looking it up in
the table of C interop kinds (which was previously done for
non-C-interop types, anyway).

gcc/fortran/ChangeLog:

	PR fortran/96220
	* dump-parse-tree.c (get_c_type_name): Always use the entries from
	c_interop_kinds_table to find the correct C type.
2020-07-19 17:27:45 +02:00
H.J. Lu 29e1039ca2 x86: Add __cpuidex and include guard to <cpuid.h>
Add

void __cpuidex (int __cpuid_info[4], int __leaf, int __subleaf);

as well as include guard to <cpuid.h>.

gcc/

	PR target/95973
	PR target/96238
	* config/i386/cpuid.h: Add include guard.
	(__cpuidex): New.

gcc/testsuite/

	PR target/95973
	PR target/96238
	* gcc.target/i386/pr95973.c: New test.
2020-07-19 04:10:04 -07:00
Thomas Koenig 3055d879ed Fix handling of implicit_pure by checking if non-pure procedures are called.
Procedures are marked as implicit_pure if they fulfill the criteria of
pure procedures.  In this case, a procedure was not marked as not being
implicit_pure which called another procedure, which had not yet been
marked as not being implicit_impure.

Fixed by iterating over all procedures, setting callers of procedures
which are non-pure and non-implicit_pure as non-implicit_pure and
doing this until no more procedure has been changed.

gcc/fortran/ChangeLog:

2020-07-19  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/96018
	* frontend-passes.c (gfc_check_externals): Adjust formatting.
	(implicit_pure_call): New function.
	(implicit_pure_expr): New function.
	(gfc_fix_implicit_pure): New function.
	* gfortran.h (gfc_fix_implicit_pure): New prototype.
	* parse.c (translate_all_program_units): Call gfc_fix_implicit_pure.
2020-07-19 12:23:43 +02:00
Hans-Peter Nilsson 7cc34b761c gcc.dg/attr-copy-6.c: Require visibility.
Another trivial one.

gcc/testsuite:
	* gcc.dg/attr-copy-6.c: Require visibility.
2020-07-19 05:55:18 +02:00
Hans-Peter Nilsson 4058650cf2 gcc.dg/Wno-frame-address.c: Skip for cris and mmix.
Long-standing FAIL remedied; committed.  Maybe better to list
the targets that *do* support arbitrary frame access?

gcc/testsuite:
	* gcc.dg/Wno-frame-address.c: Skip for cris and mmix.
2020-07-19 05:18:57 +02:00
GCC Administrator aeb34e1514 Daily bump. 2020-07-19 00:16:22 +00:00
Jakub Jelinek 2f1d4cb54e testsuite: Fix pragma-eof.c failure due to added line to the test.
2020-07-18  Jakub Jelinek  <jakub@redhat.com>

	* c-c++-common/cpp/pragma-eof.c: Use .+3 instead of 6 in
	dg-error.
2020-07-18 23:09:56 +02:00
David Edelsohn a36b14a333 fortran: Restore translation to hint.
This patch restore translation for the variable hint.  The translation
tag conflicted with the previous declaration of hint as char[] and
broke bootstrap, so the translation tags were removed.  The
declaration was changed to char *.  This patch restores the translation
tags to the string.

gcc/fortran/ChangeLog

2020-07-18  David Edelsohn  <dje.gcc@gmail.com>

	* check.c (gfc_invalid_boz): Mark hint for translation using _().
2020-07-18 12:06:52 -04:00
David Edelsohn 60c1baebba testsuite: fix goacc/finalize-1.f "original" regex for 32 bits.
The "bias" portion of the regex for "original" expects

bias: (integer(kind=<N>) parm.0.data - (integer(kind=<N>)) del_f_p.data

(or cpo_f_p.data)

on 32 bit platforms, the dump file can show (signed int) instead of
(integer(kind=8)... .  This patch adjusts the regex to allow any content
containing the word int between the parentheses.

2020-07-18  David Edelsohn  <dje.gcc@gmail.com>

gcc/testsuite/ChangeLog

	* gfortran.dg/goacc/finalize-1.f: Adjust regex for 32 bits.
2020-07-18 12:00:41 -04:00
H.J. Lu 7aa22a8f1a x86-64: Define ASM_OUTPUT_ALIGNED_DECL_LOCAL
Define ASM_OUTPUT_ALIGNED_DECL_LOCAL for large local common symbol.

gcc/

	PR target/95620
	* config/i386/x86-64.h (ASM_OUTPUT_ALIGNED_DECL_LOCAL): New.

libgomp/

	PR target/95620
	* testsuite/libgomp.c/pr95620.c: New test.
2020-07-18 08:51:54 -07:00
Hans-Peter Nilsson 0b7e26d8f9 testsuite/c-c++-common/cpp/pragma-eof.c: Add missing require fopenmp
Committed as obvious.  Gets rid of a spurious failure for mmix.

gcc/testsuite:
	* c-c++-common/cpp/pragma-eof.c: Require fopenmp.
2020-07-18 05:28:20 +02:00
Peter Bergner 8a8c257356 rs6000: Generate _Decimal128 to _Decimal32 hardware conversion instructions
We do not currently generate hardware conversion instructions when
converting from _Decimal128 to _Decimal32.  There is no one instruction
that does the conversion, so we currently call the __dpd_trunctdsd2
lib function to do the conversion for us.  However, there is a short
sequence of dfp hardware instructions that will do the conversion
correctly.

2020-07-17  Peter Bergner  <bergner@linux.ibm.com>

gcc/
	PR target/92488
	* config/rs6000/dfp.md (trunctdsd2): New define_insn.
	* config/rs6000/rs6000.md (define_attr "isa"): Add p9.
	(define_attr "enabled"): Handle p9.

gcc/testsuite/
	PR target/92488
	* gcc.target/powerpc/convert-fp-128.c (bl, drsp, drdpq): Update counts.
	(__dpd_trunctdsd2): Make conditional on !hard_dfp.
	(__dpd_extendsddd2, __dpd_extendsdtd2, __dpd_truncddsd2,
	__dpd_extendddtd2, __dpd_trunctddd2): Use !hard_dfp.
	* gcc.target/powerpc/pr92488.c: New test.
2020-07-17 21:11:23 -05:00
GCC Administrator ab660b01c3 Daily bump. 2020-07-18 00:16:24 +00:00
Ian Lance Taylor d5dfd4793f libgo: update to Go 1.14.6 release
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/243317
2020-07-17 14:28:28 -07:00
Iain Sandoe f1b6e46c41 libstdc++, coroutine: Add missing constexpr markers.
The methods of the trivial awaitables are intended to
be constexpr.

libstdc++-v3/ChangeLog:

	* include/std/coroutine: Mark the methods of the
	trivial awaitables as constexpr.
2020-07-17 19:51:09 +01:00
Marek Polacek e7f0873a9c c++: Diagnose cv-qualified decltype(auto) [PR79815]
"If the placeholder is the decltype(auto) type-specifier, T shall be the
placeholder alone." but we weren't detecting "const decltype(auto)".

I've just expanded the existing diagnostic detecting "decltype(auto) &"
and similar.

gcc/cp/ChangeLog:

	PR c++/79815
	* decl.c (grokdeclarator): Detect cv-qual decltype(auto).
	* pt.c (do_auto_deduction): Likewise.

gcc/testsuite/ChangeLog:

	PR c++/79815
	* g++.dg/cpp1y/auto-fn59.C: New test.
2020-07-17 11:43:39 -04:00
Roger Sayle c08ff9f819 middle-end: Prefer TRULY_NOOP_TRUNCATION_MODES_P over raw target hook.
2020-07-16  Roger Sayle  <roger@nextmovesoftware.com>

gcc/ChangeLog
	* function.c (assign_parm_setup_block): Use the macro
	TRULY_NOOP_TRUNCATION_MODES_P instead of calling
	targetm.truly_noop_truncation directly.
2020-07-17 14:06:45 +01:00
H.J. Lu 737355072a x86: Rename VF_AVX512VL_VF1_128_256 to VF1_AVX512ER_128_256
Since ix86_emit_swsqrtsf shouldn't be called with DF vector modes, rename
VF_AVX512VL_VF1_128_256 to VF1_AVX512ER_128_256 and drop DF vector modes.

gcc/

	PR target/96186
	PR target/88713
	* config/i386/sse.md (VF_AVX512VL_VF1_128_256): Renamed to ...
	(VF1_AVX512ER_128_256): This.  Drop DF vector modes.
	(rsqrt<mode>2): Replace VF_AVX512VL_VF1_128_256 with
	VF1_AVX512ER_128_256.

gcc/testsuite/

	PR target/96186
	PR target/88713
	* gcc.target/i386/pr88713-3.c: New test.
2020-07-17 05:29:30 -07:00
Tamar Christina 8bc83ee378 AArch64: Add test for -mcpu=native
This adds some tests to the GCC testsuite for testing the
-mcpu=native code.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/cpunative/aarch64-cpunative.exp: New test.
	* gcc.target/aarch64/cpunative/info_0: New test.
	* gcc.target/aarch64/cpunative/info_1: New test.
	* gcc.target/aarch64/cpunative/info_10: New test.
	* gcc.target/aarch64/cpunative/info_11: New test.
	* gcc.target/aarch64/cpunative/info_12: New test.
	* gcc.target/aarch64/cpunative/info_13: New test.
	* gcc.target/aarch64/cpunative/info_14: New test.
	* gcc.target/aarch64/cpunative/info_15: New test.
	* gcc.target/aarch64/cpunative/info_2: New test.
	* gcc.target/aarch64/cpunative/info_3: New test.
	* gcc.target/aarch64/cpunative/info_4: New test.
	* gcc.target/aarch64/cpunative/info_5: New test.
	* gcc.target/aarch64/cpunative/info_6: New test.
	* gcc.target/aarch64/cpunative/info_7: New test.
	* gcc.target/aarch64/cpunative/info_8: New test.
	* gcc.target/aarch64/cpunative/info_9: New test.
	* gcc.target/aarch64/cpunative/native_cpu_0.c: New test.
	* gcc.target/aarch64/cpunative/native_cpu_1.c: New test.
	* gcc.target/aarch64/cpunative/native_cpu_10.c: New test.
	* gcc.target/aarch64/cpunative/native_cpu_11.c: New test.
	* gcc.target/aarch64/cpunative/native_cpu_12.c: New test.
	* gcc.target/aarch64/cpunative/native_cpu_13.c: New test.
	* gcc.target/aarch64/cpunative/native_cpu_14.c: New test.
	* gcc.target/aarch64/cpunative/native_cpu_15.c: New test.
	* gcc.target/aarch64/cpunative/native_cpu_2.c: New test.
	* gcc.target/aarch64/cpunative/native_cpu_3.c: New test.
	* gcc.target/aarch64/cpunative/native_cpu_4.c: New test.
	* gcc.target/aarch64/cpunative/native_cpu_5.c: New test.
	* gcc.target/aarch64/cpunative/native_cpu_6.c: New test.
	* gcc.target/aarch64/cpunative/native_cpu_7.c: New test.
	* gcc.target/aarch64/cpunative/native_cpu_8.c: New test.
	* gcc.target/aarch64/cpunative/native_cpu_9.c: New test.
2020-07-17 13:13:12 +01:00
Tamar Christina 7c4491e33d Testuite: Document environment setting directives
This document some of the existing DejaGnu directives to modify
environment variables before test or compiler invocations.

gcc/ChangeLog:

	* doc/sourcebuild.texi (dg-set-compiler-env-var,
	dg-set-target-env-var): Document.
2020-07-17 13:12:46 +01:00
Tamar Christina e410cbff5d Testsuite: Make it easier to debug environment setting functions
This adds verbose output to dg-set-compiler-env-var and dg-set-target-env-var
so you can actually see what they're setting when you add -v -v.

gcc/testsuite/ChangeLog:

	* lib/gcc-dg.exp (dg-set-compiler-env-var, dg-set-target-env-var): Add
	verbose output.
2020-07-17 13:12:23 +01:00
Tamar Christina 34a6c43487 Arm: Add GCC_CPUINFO override
This adds an in intentionally undocumented environment variable
GCC_CPUINFO which can be used to test -mcpu=native.

Tests using these are added later on.

gcc/ChangeLog:

	* config/arm/driver-arm.c (host_detect_local_cpu): Add GCC_CPUINFO.
2020-07-17 13:12:00 +01:00
Tamar Christina 55f6addc0c AArch64: Add GCC_CPUINFO override
This adds an in intentionally undocumented environment variable
GCC_CPUINFO which can be used to test -mcpu=native.

Tests using this are added later on.

gcc/ChangeLog:

	* config/aarch64/driver-aarch64.c (host_detect_local_cpu):
	Add GCC_CPUINFO.
2020-07-17 13:10:53 +01:00
Tamar Christina b399f3c642 AArch64: Fix bugs in -mcpu=native detection.
This patch fixes a couple of issues in AArch64's -mcpu=native processing:

The buffer used to read the lines from /proc/cpuinfo is 128 bytes long.  While
this was enough in the past with the increase in architecture extensions it is
no longer enough.   It results in two bugs:

1) No option string longer than 127 characters is correctly parsed.  Features
   that are supported are silently ignored.

2) It incorrectly enables features that are not present on the machine:
  a) It checks for substring matching instead of full word matching.  This makes
     it incorrectly detect sb support when ssbs is provided instead.
  b) Due to the truncation at the 127 char border it also incorrectly enables
     features due to the full feature being cut off and the part that is left
     accidentally enables something else.

This breaks -mcpu=native detection on some of our newer system.

The patch fixes these issues by reading full lines up to the \n in a string.
This gives us the full feature line.  Secondly it creates a set from this string
to:

 1) Reduce matching complexity from O(n*m) to O(n*logm).
 2) Perform whole word matching instead of substring matching.

To make this code somewhat cleaner I also changed from using char* to using
std::string and std::set.

Note that I have intentionally avoided the use of ifstream and stringstream
to make it easier to backport.  I have also not change the substring matching
for the initial line classification as I cannot find a documented cpuinfo format
which leads me to believe there may be kernels out there that require this which
may be why the original code does this.

I also do not want this to break if the kernel adds a new line that is long and
indents the file by two tabs to keep everything aligned.  In short I think an
imprecise match is the right thing here.

Test for this is added as the last thing in this series as it requires some
changes to be made to be able to test this.

gcc/ChangeLog:

	* config/aarch64/driver-aarch64.c (INCLUDE_SET): New.
	(parse_field): Use std::string.
	(split_words, readline, find_field): New.
	(host_detect_local_cpu): Fix truncation issues.
2020-07-17 13:10:28 +01:00