Commit Graph

176770 Commits

Author SHA1 Message Date
Eric Botcazou
ed01d707f8 Fix internal error on store to FP component at -O2
This is about a GIMPLE verification failure at -O2 or above because
the GIMPLE store merging pass generates a NOP_EXPR between a FP type
and an integral type.  This happens when the bit-field insertion path
is taken for a FP field, which can happen in Ada for bit-packed record
types.

It is fixed by generating an intermediate VIEW_CONVERT_EXPR.  The patch
also tames a little the bit-field insertion path because, for bit-packed
record  types in Ada, you can end up with large bit-field regions, which
results in a lot of mask-and-shifts instructions.

gcc/ChangeLog
	* gimple-ssa-store-merging.c (merged_store_group::can_be_merged_into):
	Only turn MEM_REFs into bit-field stores for small bit-field regions
	(imm_store_chain_info::output_merged_store): Be prepared for sources
	with non-integral type in the bit-field insertion case.
	(pass_store_merging::process_store): Use MAX_BITSIZE_MODE_ANY_INT as
	the largest size for the bit-field case.

gcc/testsuite/ChangeLog
	* gnat.dg/opt84.adb: New test.
2020-05-25 22:19:03 +02:00
Uros Bizjak
14cd049afc i386: Remove broadcasts from TARGET_MMX_WITH_SSE vec_dup insn patterns
XMM broadcast instructions broadcast value from general reg to all
elements of the vector.  This is not allowed for TARGET_MMX_WITH_SSE,
where it is expected that bits outside lower 64bits load or retain
zero value.  Following testcases expect broadcast, and are thus invalid:

FAIL: gcc.target/i386/sse2-mmx-18b.c scan-assembler-not movd
FAIL: gcc.target/i386/sse2-mmx-18b.c scan-assembler-times pbroadcastd 1
FAIL: gcc.target/i386/sse2-mmx-19b.c scan-assembler-not movd
FAIL: gcc.target/i386/sse2-mmx-19b.c scan-assembler-times pbroadcastw 1
FAIL: gcc.target/i386/sse2-mmx-19d.c scan-assembler-times pbroadcastw 1
FAIL: gcc.target/i386/sse2-mmx-19e.c scan-assembler-times pbroadcastw 1

These testcases are removed entirely.

2020-05-25  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:
	* config/i386/mmx.md (*vec_dupv2sf): Redefine as define_insn.
	(mmx_pshufw_1): Change Yv constraint to xYw.  Correct type attribute.
	(*vec_dupv4hi): Redefine as define_insn.
	Remove alternative with general register input.
	(*vec_dupv2si): Ditto.

gcc/testsuite/ChangeLog:
	* gcc.target/i386/sse2-mmx-18a.c (dg-options): Remove -mno-avx512vl.
	* gcc.target/i386/sse2-mmx-19a.c (dg-options): Remove -mno-avx.
	* gcc.target/i386/sse2-mmx-18b.c: Remove.
	* gcc.target/i386/sse2-mmx-18c.c: Ditto.
	* gcc.target/i386/sse2-mmx-19b.c: Ditto.
	* gcc.target/i386/sse2-mmx-19c.c: Ditto.
	* gcc.target/i386/sse2-mmx-19d.c: Ditto.
	* gcc.target/i386/sse2-mmx-19e.c: Ditto.
2020-05-25 16:11:18 +02:00
Martin Jambor
a42cc1f883 BRIG FE testsuite: Fix dump scan patterns in packed.hsail test
Starting with r11-165-eb72dc663e9 which converted DECL_GIMPLE_REG_P to
DECL_NOT_GIMPLE_REG_P we have failing BRIG testcase:

-PASS: packed.hsail.brig scan-tree-dump gimple "_[0-9]+ = q2 \\+ q3;"
-PASS: packed.hsail.brig scan-tree-dump gimple "= VEC_PERM_EXPR <new_output.[0-9]+_[0-9]+, [a-z0-9_]+, { 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }>;"
+FAIL: packed.hsail.brig scan-tree-dump gimple "_[0-9]+ = q2 \\+ q3;"
+FAIL: packed.hsail.brig scan-tree-dump gimple "= VEC_PERM_EXPR <new_output.[0-9]+_[0-9]+, [a-z0-9_]+, { 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }>;"

because the gimplifier is now smarter and generates nicer code, which
however, does not match the regexp in the testsuite:

--- before/packed.hsail.brig.005t.gimple        2020-05-12 17:59:26.434305513 +0200
+++ after/packed.hsail.brig.005t.gimple 2020-05-12 17:52:34.477055987 +0200
@@ -109,277 +109,267 @@
   q2 = q1 + _24;
   _25 = VEC_PERM_EXPR <q1, q1, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }>;
   q3 = q2 + _25;
-  _26 = q2 + q3;
-  new_output.11 = _26;
-  new_output.21_27 = new_output.11;
-  _28 = VEC_PERM_EXPR <new_output.21_27, q4, { 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }>;
-  s_output.12 = _28;
+  new_output.11 = q2 + q3;
+  s_output.12 = VEC_PERM_EXPR <new_output.11, q4, { 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }>;
   q4 = s_output.12;

I have looked at the SSA dump and verified that the variable in
question is a gimple register because it gets its SSA name.  I have
not looked into why the gimplifier previously though it had to go
through the additional temporaries though.

Tested with make -k check-brig.

	* brig.dg/test/gimple/packed.hsail: Fix scan dump patterns.
2020-05-25 16:07:48 +02:00
Richard Biener
dc0c019634 tree-optimization/95309 - fix invariant SLP node costing
This makes sure to compute SLP_TREE_NUMBER_OF_VEC_STMTS during SLP
analysis even for invariant / external nodes so costing properly
knows what to cost.

2020-05-25  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95309
	* tree-vect-slp.c (vect_get_constant_vectors): Move number
	of vector computation ...
	(vect_slp_analyze_node_operations): ... to analysis phase.
2020-05-25 16:02:08 +02:00
Yannick Moy
431e762fae [Ada] Fix spurious error on checking of null Abstract_State
2020-05-25  Yannick Moy  <moy@adacore.com>

gcc/ada/

	* sem_util.adb (Check_No_Hidden_State): Stop propagation at
	first block/task/entry.
2020-05-25 10:00:55 -04:00
Yannick Moy
1a14bfbd78 [Ada] Change pragma Compile_Time_Error to force compile-time evaluation
2020-05-25  Yannick Moy  <moy@adacore.com>

gcc/ada/

	* doc/gnat_rm/implementation_defined_pragmas.rst: Document
	changes to pragmas Compile_Time_Error/Compile_Time_Warning.
	* gnat_rm.texi: Regenerate.
	* libgnat/g-bytswa.adb: Change uses of Compile_Time_Error to
	Compile_Time_Warning, as the actual expression may not always be
	known statically.
	* sem_prag.adb (Analyze_Pragma): Handle differently pragma
	Compile_Time_Error in both compilation and in GNATprove mode.
	(Validate_Compile_Time_Warning_Or_Error): Issue an error or
	warning when the expression is not known at compile time.
	* usage.adb: Add missing documentation for warning switches _c
	and _r.
	* warnsw.ads: Update comment.
2020-05-25 10:00:55 -04:00
Justin Squirek
4354291994 [Ada] Spurious accessibility error on return aggregate in GNATprove mode
2020-05-25  Justin Squirek  <squirek@adacore.com>

gcc/ada/

	* sem_ch6.adb (Check_Return_Obj_Accessibility): Use original
	node to avoid looking at expansion done in GNATprove mode.
2020-05-25 10:00:54 -04:00
Jan Hubicka
a746f952ab Do not stream redundant stuff
as discussed on IRC this adds knob to disable stuff we stream "just for fun"
(or to make it easier to debug streamer desychnonization).

Te size of .o files in gcc subdirectory is reduced form 506MB to 492MB

gcc/

	* lto-streamer-out.c (lto_output_tree): Add streamer_debugging check.
	* lto-streamer.h (streamer_debugging): New constant
	* tree-streamer-in.c (streamer_read_tree_bitfields): Add
	streamer_debugging check.
	(streamer_get_pickled_tree): Likewise.
	* tree-streamer-out.c (pack_ts_base_value_fields): Likewise.
2020-05-25 14:41:33 +02:00
Richard Biener
67bfbda18f tree-optimization/95308 - really avoid forward propagating of &TMR
This fixes a hole that still allowed forwarding of TARGET_MEM_REF
addresses.

2020-05-25  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95308
	* tree-ssa-forwprop.c (pass_forwprop::execute): Generalize
	test for TARGET_MEM_REFs.

	* g++.dg/torture/pr95308.C: New testcase.
2020-05-25 13:50:29 +02:00
Richard Biener
4acca1c063 tree-optimization/95295 - fix wrong-code with SM
We failed to compare the rematerialized store values when merging
paths after walking PHIs.

2020-05-25  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95295
	* tree-ssa-loop-im.c (sm_seq_valid_bb): Compare remat stores
	RHSes and drop to full sm_other if they are not equal.

	* gcc.dg/torture/pr95295-1.c: New testcase.
	* gcc.dg/torture/pr95295-2.c: Likewise.
	* gcc.dg/torture/pr95283.c: Likewise.
2020-05-25 13:39:26 +02:00
Richard Biener
c0e27f7235 tree-optimization/95271 - fix bswap vectorization invariant SLP type
This properly updates invariant SLP nodes vector types for bswap
vectorization.

2020-05-25  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95271
	* tree-vect-stmts.c (vectorizable_bswap): Update invariant SLP
	children vector type.
	(vectorizable_call): Pass down slp ops.

	* gcc.dg/vect/bb-slp-pr95271.c: New testcase.
2020-05-25 13:12:20 +02:00
Richard Biener
d31694544d tree-optimization/95297 - handle scalar shift arg for SLP invariant vectype
This skips invariant vector type setting for a scalar shift argument.

2020-05-25  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95297
	* tree-vect-stmts.c (vectorizable_shift): For scalar_shift_arg
	skip updating operand 1 vector type.

	* g++.dg/vect/pr95297.cc: New testcase.
	* g++.dg/vect/pr95290.cc: Likewise.
2020-05-25 13:11:41 +02:00
Richard Biener
a0c623f581 tree-optimization/95308 - really avoid forward propagating of &TMR
This fixes a hole that still allowed forwarding of TARGET_MEM_REF
addresses.

2020-05-25  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95308
	* tree-ssa-forwprop.c (pass_forwprop::execute): Generalize
	test for TARGET_MEM_REFs.

	* g++.dg/torture/pr95308.C: New testcase.
2020-05-25 12:41:36 +02:00
Richard Biener
f73f8bab9f tree-optimization/95284 - amend previous store commoning fix
Generalize check for clobbers.

2020-05-25  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/95284
	* tree-ssa-sink.c (sink_common_stores_to_bb): Amend previous
	fix.

	* g++.dg/torture/pr95284.C: New testcase.
2020-05-25 11:17:09 +02:00
Eric Botcazou
af62ba41a4 Fix internal error on problematic renaming
This is an internal renaming generated for a generalized loop iteration
made on a tagged record type with predicate, and gigi cannot use the most
efficient way of implementing renamings because the renamed object is an
expression with a non-empty Actions list.

gcc/ada/ChangeLog
	* gcc-interface/decl.c (gnat_to_gnu_entity): Add new local variable
	and use it throughout the function.
	<E_Variable>: Rename local variable and adjust accordingly.  In the
	case of a renaming, materialize the entity if the renamed object is
	an N_Expression_With_Actions node.
	<E_Procedure>: Use Alias accessor function consistently.

gcc/testsuite/ChangeLog
	* gnat.dg/renaming16.adb: New test.
	* gnat.dg/renaming16_pkg.ads: New helper.
2020-05-25 10:44:00 +02:00
Eric Botcazou
0949185aed Fix small fallout of earlier change
gcc/ada/ChangeLog
	* gcc-interface/misc.c (get_array_bit_stride): Get to the debug type,
	if any, before calling gnat_get_array_descr_info.
2020-05-25 10:32:21 +02:00
Eric Botcazou
036c83b68e Fix missing back-annotation for derived types
Gigi fails to back-annotate the Present_Expr field of variants present
in a type derived from a discriminated untagged record type, which is
for example visible in the output -gnatRj.

gcc/ada/ChangeLog
	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Type>: Tidy up.
	(build_variant_list): Add GNAT_VARIANT_PART parameter and annotate
	its variants if it is present.  Adjust the recursive call by passing
	the variant subpart of variants, if any.
	(copy_and_substitute_in_layout): Rename GNU_SUBST_LIST to SUBST_LIST
	and adjust throughout.  For a type, pass the variant part in the
	call to build_variant_list.
2020-05-25 10:15:12 +02:00
Eric Botcazou
15c55b96a7 Fix incorrect handling of Component_Size
The compiler can mishandle a Component_Size clause on an array type
specifying a size multiple of the storage unit, when this size is
not a multiple of the alignment of the component type.

gcc/ada/ChangeLog
	* gcc-interface/decl.c (gnat_to_gnu_component_type): Cap alignment
	of the component type according to the component size.

gcc/testsuite/ChangeLog
	* gnat.dg/array40.adb: New test.
	* gnat.dg/array40_pkg.ads: New helper.
2020-05-25 10:07:04 +02:00
Martin Liska
deea3defc9
Allow only ignored files in ChangeLog entries.
* gcc-changelog/git_commit.py: Add trailing '/'
	for libdruntime.  Allow empty changelog for
	only ignored files.
	* gcc-changelog/test_email.py: New test for go
	patch in ignored location.
	* gcc-changelog/test_patches.txt: Add test.
2020-05-25 09:49:54 +02:00
Eric Botcazou
a27aceb98a Change description of fat pointertype with -fgnat-encodings=minimal
This makes a step back in the representation of fat pointer types in
the debug info with -fgnat-encodings=minimal so as to avoid hiding the
data indirection and making it easiser to synthetize the construct.

gcc/ada/ChangeLog
	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Add a
	description of the various types associated with the unconstrained
	type.  Declare the fat pointer earlier.  Set the current function
	as context on the template type, and the fat pointer type on the
	array type.  Always mark the fat pointer type as artificial and set
	it as the context for the pointer type to the array.  Also reuse
	GNU_ENTITY_NAME.  Finish up the unconstrained type at the very end.
	* gcc-interface/misc.c (gnat_get_array_descr_info): Do not handle
	fat pointer types and tidy up accordingly.
	* gcc-interface/utils.c (build_unc_object_type): Do not set the
	context on the template type.
2020-05-25 09:44:55 +02:00
Eric Botcazou
49d6f7243a Add missing ChangeLog entries in previous commit 2020-05-25 09:31:15 +02:00
Eric Botcazou
5dce843f32 Fix wrong assignment to mutable Out parameter of task entry
Under very specific circumstances the compiler can generate a wrong
assignment to a mutable record object which contains an array component,
because it does not correctly handle the update of the discriminant.

gcc/ada/ChangeLog
	* gcc-interface/gigi.h (operand_type): New static inline function.
	* gcc-interface/trans.c (gnat_to_gnu): Do not suppress conversion
	to the resulty type at the end for array types.
	* gcc-interface/utils2.c (build_binary_op) <MODIFY_EXPR>: Do not
	remove conversions between array types on the LHS.

gcc/testsuite/ChangeLog
	* gnat.dg/array39.adb: New test.
	* gnat.dg/array39_pkg.ads: New helper.
	* gnat.dg/array39_pkg.adb: Likewise.
2020-05-25 09:25:57 +02:00
liuhongt
94c0409717 Add missing expander for vector float_extend and float_truncate.
2020-05-25  Hongtao Liu  <hongtao.liu@intel.com>

gcc/ChangeLog
	PR target/95125
	* config/i386/sse.md (sf2dfmode_lower): New mode attribute.
	(trunc<mode><sf2dfmode_lower>2) New expander.
	(extend<sf2dfmode_lower><mode>2): Ditto.

gcc/testsuite/ChangeLog
	* gcc.target/i386/pr95125-avx.c: New test.
	* gcc.target/i386/pr95125-avx512f.c: Ditto.
2020-05-25 09:57:04 +08:00
GCC Administrator
a7fe89194c Daily bump. 2020-05-25 00:16:17 +00:00
Harald Anlauf
d176184d98 PR fortran/95106 - truncation of long symbol names with EQUIVALENCE
For long module names, the generated name-mangled symbol was
	truncated, leading to bogus warnings about COMMON block
	mismatches.  Provide sufficiently large temporaries.

gcc/fortran/

2020-05-24  Harald Anlauf  <anlauf@gmx.de>

	PR fortran/95106
	* trans-common.c (gfc_sym_mangled_common_id): Enlarge temporaries
	for name-mangling.

gcc/testsuite/

2020-05-24  Harald Anlauf  <anlauf@gmx.de>

	PR fortran/95106
	* gfortran.dg/equiv_11.f90: New test.
2020-05-24 21:35:04 +02:00
GCC Administrator
392bc7d213 Daily bump. 2020-05-24 00:16:16 +00:00
David Edelsohn
731c4ce0e9 libcpp, libdecnumber: configure and substitute AR
AIX supports "FAT" libraries containing 32 bit and 64 bit objects
(similar to Darwin), but commands for manipulating libraries do not
default to accept both 32 bit and 64 bit object files.  While updating
the AIX configuration to support building and running GCC as a 64 bit
application, I have encountered some build libraries that hard code
AR=ar instead of testing the environment.

This patch adds AR_CHECK_TOOL(AR, ar) to configure.ac for the two
libraries and updates Makefile.in to accept the substitution.

2020-05-23  David Edelsohn  <dje.gcc@gmail.com>

libcpp/ChangeLog:
	* Makefile.in (AR): Substitute @AR@.
	* configure.ac (CHECK_PROG AR): New.
	* configure: Regenerate.

libdecnumber/ChangeLog:
	* Makefile.in (AR): Substitute @AR@.
	* configure.ac (CHECK_PROG AR): New.
	* configure: Regenerate.
2020-05-23 21:59:02 +00:00
Patrick Palka
a57aa11191 libstdc++: Compile PR93978 testcase with -Wall
Now that the frontend issue PR c++/94038 is thoroughly fixed, the
testcase for PR93978 no longer fails to compile with -O -Wall, so add
-Wall to the testcase's compile flags to help ensure we don't regress
here.

libstdc++-v3/ChangeLog:

	PR libstdc++/93978
	* testsuite/std/ranges/adaptors/93978.cc: Add -Wall to
	dg-additional-options.  Avoid unused-but-set-variable warning.
2020-05-23 15:25:40 -04:00
Patrick Palka
6d1556ecfa c++: Avoid concept evaluation when uid-sensitive [PR94038]
Concept evaluation may entail DECL_UID generation and/or template
instantiation, so in general we can't perform it during uid-sensitive
constexpr evaluation.

gcc/cp/ChangeLog:

	PR c++/94038
	* constexpr.c (cxx_eval_constant_expression)
	<case TEMPLATE_ID_EXPR>: Don't evaluate the concept when
	constexpr evaluation is uid-sensitive.

gcc/testsuite/ChangeLog:

	PR c++/94038
	* g++.dg/warn/pr94038-3.C: New test.
2020-05-23 14:39:28 -04:00
Jonathan Wakely
3cb0c7cc16 libstdc++: Fix function that can't be constexpr in C++11 (PR 95289)
The body of this function isn't just a return statement, so it can't be
constexpr until C++14.

	PR libstdc++/95289
	* include/debug/helper_functions.h (__get_distance): Only declare
	as a constexpr function for C++14 and up.
	* testsuite/25_algorithms/copy/debug/95289.cc: New test.
2020-05-23 18:27:35 +01:00
Thomas Koenig
8df7ee67f6 Fixes a hang on an invalid ID in a WAIT statement.
gcc/fortran/ChangeLog:

2020-05-23  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR libfortran/95191
	* libgfortran.h (libgfortran_error_codes): Add
	LIBERROR_BAD_WAIT_ID.

libgfortran/ChangeLog:

2020-05-23  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR libfortran/95191
	* io/async.c (async_wait_id): Generate error if ID is higher
	than the highest current ID.
	* runtime/error.c (translate_error): Handle LIBERROR_BAD_WAIT_ID.

libgomp/ChangeLog:

2020-05-23  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR libfortran/95191
	* testsuite/libgomp.fortran/async_io_9.f90: New test.
2020-05-23 19:01:43 +02:00
Jonathan Wakely
584d52b088 libstdc++: Refactor filesystem::path string conversions
This simplifies the logic of converting Source arguments and pairs of
InputIterator arguments into the native string format. For any input
that is a contiguous range of path::value_type (or char8_t for POSIX)
a string view can be created and the conversion can be done directly,
with no intermediate allocation. Previously some cases created a
basic_string unnecessarily, for example construction from a pair of
path::string_type::iterators, or a pair of non-const value_type*
pointers.

	* include/bits/fs_path.h (__detail::_S_range_begin)
	(__detail::_S_range_end, path::_S_string_from_iter): Replace with
	overloaded function template __detail::__effective_range.
	(__detail::__effective_range): New overloaded function template to
	create a basic_string or basic_string_view for an effective range.
	(__detail::__value_type_is_char): Use __detail::__effective_range.
	Do not use remove_const on value type.
	(__detail::__value_type_is_char_or_char8_t): Likewise.
	(path::path(const Source&, format))
	(path::path(const Source&, const locale&))
	(path::operator/=(const Source&), path::append(const Source&))
	(path::concat(const Source&)): Use __detail::__effective_range.
	(path::_S_to_string(InputIterator, InputIterator)): New function
	template to create a string view if possible, or string otherwise.
	(path::_S_convert): Add overloads that convert a string returned
	by __detail::__effective_range. Use if-constexpr to inline conversion
	logic from all overloads of _Cvt::_S_convert.
	(path::_S_convert_loc): Add overload that converts a string. Use
	_S_to_string to avoid allocation when possible.
	(path::_Cvt): Remove.
	(path::operator+=(CharT)): Remove indirection through path::concat.
	* include/experimental/bits/fs_path.h (path::_S_convert_loc): Add
	overload for non-const pointers, to avoid constructing a std::string.
	* src/c++17/fs_path.cc (path::_S_convert_loc): Replace conditional
	compilation with call to _S_convert.
2020-05-23 09:40:16 +01:00
Jonathan Wakely
00c8f2a5e3 libstdc++: Remove incorrect static specifiers
These functions were originally static members of the path class, but
the 'static' specifiers were not removed when they were moved to
namespace scope. This causes ODR violations when the functions are
called from functions defined in the header, which is incompatible with
Nathan's modules branch.  Change them to 'inline' instead.

	* include/bits/fs_path.h (__detail::_S_range_begin)
	(__detail::_S_range_end): Remove unintentional static specifiers.
	* include/experimental/bits/fs_path.h (__detail::_S_range_begin)
	(__detail::_S_range_end): Likewise.
2020-05-23 09:40:16 +01:00
Jonathan Wakely
988b853f9c libstdc++: Simplify filesystem::path SFINAE constraints
This replaces the filesystem::__detail::_Path SFINAE helper with two
separate helpers, _Path and _Path2. This avoids having one helper which
tries to check two different sets of requirements.

The _Path helper now uses variable templates instead of a set of
overloaded functions to detect specializations of basic_string or
basic_string_view.

The __not_<is_void<remove_pointer_t<_Tp1>> check is not necessary in
C++20 because iterator_traits<void*> is now empty. For C++17 replace
that check with a __safe_iterator_traits helper with partial
specializations for void pointers.

Finally, the __is_encoded_char check no longer uses remove_const_t,
which means that iterators with a const value_type will no longer be
accepted as arguments for path creation. Such iterators resulted in
undefined behaviour anyway, so it's still conforming to reject them in
the constraint checks.

	* include/bits/fs_path.h (filesystem::__detail::__is_encoded_char):
	Replace alias template with variable template. Don't remove const.
	(filesystem::__detail::__is_path_src): Replace overloaded function
	template with variable template and specializations.
	(filesystem::__detail::__is_path_iter_src): Replace alias template
	with class template.
	(filesystem::__detail::_Path): Use __is_path_src. Remove support for
	iterator pairs.
	(filesystem::__detail::_Path2): New alias template for checking
	InputIterator requirements.
	(filesystem::__detail::__constructible_from): Remove.
	(filesystem::path): Replace _Path<Iter, Iter> with _Path2<Iter>.
	* testsuite/27_io/filesystem/path/construct/80762.cc: Check with two
	constructor arguments of void and void* types.
2020-05-23 09:40:16 +01:00
Iain Sandoe
804254edb4 Darwin: Make sanitizer local vars linker-visible.
Another case where we need a linker-visible symbols in order to
preserve the ld64 atom model.  If these symbols are emitted as
'local' the linker cannot see that they are separate from any
global weak entry that precedes them.  This will cause the linker
to complain that there is (apparently) direct access to such a
weak global, preventing it from being replaced.

This is a short-term fix for the problem - we need generic
handling for relevant cases (that also does not pessimise objects
by emitting unnecessary symbols and relocations).

gcc/ChangeLog:

2020-05-23  Iain Sandoe  <iain@sandoe.co.uk>

	* config/darwin.h (ASM_GENERATE_INTERNAL_LABEL):
	Make ubsan_{data,type},ASAN symbols linker-visible.
2020-05-23 08:25:46 +01:00
liuhongt
33e09fc505 Adjust typo in testcase of my last commit
gcc/testsuite/ChangeLog
	* gcc.target/i386/pr92658-avx512vl.c: Fix typo.
2020-05-23 11:46:32 +08:00
Jason Merrill
b2b8eb6202 c++: Fix C++17 eval order for virtual op=.
In a function call expression in C++17 evaluation of the function pointer is
sequenced before evaluation of the function arguments, but that doesn't
apply to function calls that were written using operator syntax.  In
particular, for operators with right-to-left ordering like assignment, we
must not evaluate the LHS to find a virtual function before we evaluate the
RHS.

gcc/cp/ChangeLog:

	* cp-gimplify.c (cp_gimplify_expr) [CALL_EXPR]: Don't preevaluate
	the function address if the call used operator syntax.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp1z/eval-order9.C: New test.
2020-05-22 20:50:31 -04:00
GCC Administrator
fabd4f16a1 Daily bump. 2020-05-23 00:16:16 +00:00
Mark Wielaard
af114c38db Suggest including <stdint.h> or <cstdint> for [u]int[8|16|32|64]_t
Plus [u]intptr_t and associated constants.

Refactor the bool, true, false, <stdbool.h> code so it fits into the
new table based design.

gcc/c-family/ChangeLog:

	* known-headers.cc (get_stdlib_header_for_name): Add a new
	stdlib_hint array for stdbool and stdint.

gcc/testsuite/ChangeLog:

	* gcc.dg/spellcheck-stdint.c: New test.
	* g++.dg/spellcheck-stdint.C: Likewise.
2020-05-22 23:22:30 +02:00
Mark Wielaard
45c50b6a63 Suggest including <stdbool.h> for bool, true and false
Currently gcc suggests to use _Bool instead of bool and doesn't give
any suggestions when true or false are used, but undefined. This patch
makes it so that (for C99 or higher) a fixit hint is emitted to include
<stdbool.h>.

gcc/c-family/ChangeLog:

	* known-headers.cc (get_stdlib_header_for_name): Return
	"<stdbool.h>" for "bool", "true" or "false" when STDLIB_C and
	flag_isoc99.

gcc/testsuite/ChangeLog:

	* gcc.dg/spellcheck-stdbool.c: New test.
2020-05-22 23:21:56 +02:00
Jason Merrill
72af65b91c c++: -fsanitize=vptr and -fstrong-eval-order. [PR95221]
With -fstrong-eval-order=all we evaluate the function address before the
arguments.  But this caused trouble with virtual functions and
-fsanitize=vptr; we would do vptr sanitization as part of calculating the
'this' argument, and separately look at the vptr in order to find the
function address.  Without -fstrong-eval-order=all 'this' is evaluated
first, but with that flag the function address is evaluated first, so we
would access the null vptr before sanitizing it.

Fixed by instrumenting the OBJ_TYPE_REF of a virtual function call instead
of the 'this' argument.

This issue suggests that we should be running the ubsan tests in multiple
standard modes like the rest of the G++ testsuite, so I've made that change
as well.

gcc/cp/ChangeLog:

	* cp-ubsan.c (cp_ubsan_maybe_instrument_member_call): For a virtual
	call, instrument the OBJ_TYPE_REF.

gcc/testsuite/ChangeLog:

	* g++.dg/ubsan/ubsan.exp: Use g++-dg-runtest.
	* c-c++-common/ubsan/bounds-13.c: Adjust.
	* c-c++-common/ubsan/bounds-2.c: Adjust.
	* c-c++-common/ubsan/div-by-zero-1.c: Adjust.
	* c-c++-common/ubsan/div-by-zero-6.c: Adjust.
	* c-c++-common/ubsan/div-by-zero-7.c: Adjust.
	* c-c++-common/ubsan/overflow-add-1.c: Adjust.
	* c-c++-common/ubsan/overflow-add-2.c: Adjust.
	* c-c++-common/ubsan/overflow-int128.c: Adjust.
	* c-c++-common/ubsan/overflow-sub-1.c: Adjust.
	* c-c++-common/ubsan/overflow-sub-2.c: Adjust.
	* g++.dg/ubsan/pr85029.C: Adjust.
	* g++.dg/ubsan/vptr-14.C: Adjust.
2020-05-22 17:02:03 -04:00
Mark Wielaard
2221fb6f66 analyzer: Add exit, and _exit replacement, to sm-signal.
Warn about using exit in signal handler and suggest _exit as alternative.

gcc/analyzer/ChangeLog:

	* sm-signal.cc(signal_unsafe_call::emit): Possibly add
	gcc_rich_location note for replacement.
	(signal_unsafe_call::get_replacement_fn): New private function.
	(get_async_signal_unsafe_fns): Add "exit".

gcc/testsuite/ChangeLog:

	* gcc.dg/analyzer/signal-exit.c: New testcase.
2020-05-22 21:02:34 +02:00
Jan Hubicka
dc50686d78 Silence warning introduced by my previous change.
* lto-streamer-out.c (DFS::DFS): Silence warning.
2020-05-22 18:17:14 +02:00
Uros Bizjak
1a03000385 i386: Fix <rounding_insn><mode>2 expander [PR95255]
2020-05-22  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:
	PR target/95255
	* config/i386/i386.md (<rounding_insn><mode>2): Do not try to
	expand non-sse4 ROUND_ROUNDEVEN rounding via SSE support routines.

gcc/testsuite/ChangeLog:
	PR target/95255
	* gcc.target/i386/pr95255.c: New test.
2020-05-22 18:02:49 +02:00
Jan Hubicka
bcb63eb2cb Avoid streaming stray references.
this patch avoids stremaing completely useless stray references to gobal decl
stream.  I am re-testing the patch (rebased to current tree) on x86_64-linux
and intend to commit once testing finishes.

gcc/ChangeLog:

2020-05-22  Jan Hubicka  <hubicka@ucw.cz>

	* lto-streamer-out.c (lto_output_tree): Do not stream final ref if
	it is not needed.

gcc/lto/ChangeLog:

2020-05-22  Jan Hubicka  <hubicka@ucw.cz>

	* lto-common.c (lto_read_decls): Do not skip stray refs.
2020-05-22 16:37:06 +02:00
Jan Hubicka
098ba49c7c Add debug dump for integer_cst streaming.
* tree-streamer-out.c (streamer_write_integer_cst): Add debug dump.
2020-05-22 16:31:21 +02:00
Jan Hubicka
0896cc4276 Improve LTO streaming dumps
this patch cleans up dumping of streaming so it is clear how dump is organized
and how much space individual components needs.

Compiling:

int a=1;
main()
{
  return a;
}

The output is now:

Creating output block for function_body
    Streaming tree  <result_decl 0x7ffff7457a50 D.1931>
     Start of LTO_trees of size 1
      Encoding indexable  <integer_type 0x7ffff7463000 sizetype>  as 0
     10 bytes

^^^ I do not think we should need 10 bytes to stream single indexable reference
to 0 :)

     Start of LTO_trees of size 1
      Encoding indexable  <integer_type 0x7ffff74630a8 bitsizetype>  as 1
     10 bytes
      Streaming header of  <result_decl 0x7ffff7457a50 D.1931>  to function_body
      Streaming body of  <result_decl 0x7ffff7457a50 D.1931>  to function_body
      Encoding indexable  <integer_type 0x7ffff74635e8 int>  as 2
      Encoding indexable  <function_decl 0x7ffff757b500 main>  as 0
      Streaming ref to  <integer_cst 0x7ffff744af18 32>
      Streaming ref to  <integer_cst 0x7ffff744af30 4>
    52 bytes

^^^ Instead of having multiple LTO_trees sections followed by the final tree
it would make a lot of sense to have only one LTO_trees where the first tree
is one lto_input_tree should return.  This is easy to arrange in DFS walk -
one does not need to pop after every SCC component but pop once at the end of
walk.  However this breaks handling of integer_csts because they may now
become of LTO_trees block and streamed as header + body.
This bypasses the separate code for shared integer_cst streaming.  I think
I want to stream everything into header and materialize the tree since it is not
part of SCC anyway.

    Streaming tree  <block 0x7ffff757e420>
      Streaming header of  <block 0x7ffff757e420>  to function_body
      Streaming body of  <block 0x7ffff757e420>  to function_body
    8 bytes
  Streaming gimple stmt _2 = a;
    Streaming ref to  <block 0x7ffff757e420>
    4 bytes
    Streaming tree  <mem_ref 0x7ffff7576f78>
     Start of LTO_trees of size 1
      Encoding indexable  <pointer_type 0x7ffff746b9d8>  as 3
     10 bytes
     Start of LTO_trees of size 1
      Streaming header of  <addr_expr 0x7ffff75893c0>  to function_body
      Streaming body of  <addr_expr 0x7ffff75893c0>  to function_body
      Encoding indexable  <var_decl 0x7ffff7fcfb40 a>  as 0
     15 bytes
      Streaming header of  <mem_ref 0x7ffff7576f78>  to function_body
      Streaming body of  <mem_ref 0x7ffff7576f78>  to function_body
      Streaming ref to  <addr_expr 0x7ffff75893c0>
      Streaming ref to  <integer_cst 0x7ffff75a3240 0>
    42 bytes
  Streaming gimple stmt return _2;

Outputting global stream
 0:  <function_decl 0x7ffff757b500 main>
    Streaming tree  <function_decl 0x7ffff757b500 main>
     Start of LTO_tree_scc of size 1
      Streaming header of  <optimization_node 0x7ffff744b000>  to decls
      Streaming body of  <optimization_node 0x7ffff744b000>  to decls
     576 bytes
     Start of LTO_tree_scc of size 1
      Streaming header of  <target_option_node 0x7ffff744a018>  to decls
      Streaming body of  <target_option_node 0x7ffff744a018>  to decls
     68 bytes
     Streaming single tree
      Streaming header of  <identifier_node 0x7ffff7577aa0 main>  to decls
      Streaming body of  <identifier_node 0x7ffff7577aa0 main>  to decls
     3 bytes
     Streaming single tree
      Streaming header of  <identifier_node 0x7ffff758a8c0 t.c>  to decls
      Streaming body of  <identifier_node 0x7ffff758a8c0 t.c>  to decls
     3 bytes
     Streaming single tree
      Streaming header of  <translation_unit_decl 0x7ffff7457ac8 t.c>  to decls
      Streaming body of  <translation_unit_decl 0x7ffff7457ac8 t.c>  to decls
      Streaming ref to  <identifier_node 0x7ffff758a8c0 t.c>
     22 bytes
     Start of LTO_tree_scc of size 1
      Streaming header of  <function_type 0x7ffff74717e0>  to decls
      Streaming body of  <function_type 0x7ffff74717e0>  to decls
      Streaming ref to  <integer_type 0x7ffff74635e8 int>
      Streaming ref to  <integer_cst 0x7ffff744adc8 8>
      Streaming ref to  <integer_cst 0x7ffff744ade0 1>
      Streaming ref to  <function_type 0x7ffff74717e0>
     38 bytes
     Start of LTO_tree_scc of size 1
      Streaming header of  <function_type 0x7ffff75832a0>  to decls
      Streaming body of  <function_type 0x7ffff75832a0>  to decls
      Streaming ref to  <integer_type 0x7ffff74635e8 int>
      Streaming ref to  <integer_cst 0x7ffff744adc8 8>
      Streaming ref to  <integer_cst 0x7ffff744ade0 1>
      Streaming ref to  <function_type 0x7ffff74717e0>
     38 bytes
     Start of LTO_tree_scc of size 1
      Streaming header of  <function_decl 0x7ffff757b500 main>  to decls
      Streaming body of  <function_decl 0x7ffff757b500 main>  to decls
      Streaming ref to  <function_type 0x7ffff75832a0>
      Streaming ref to  <identifier_node 0x7ffff7577aa0 main>
      Streaming ref to  <translation_unit_decl 0x7ffff7457ac8 t.c>
      Streaming ref to  <identifier_node 0x7ffff7577aa0 main>
      Streaming ref to  <target_option_node 0x7ffff744a018>
      Streaming ref to  <optimization_node 0x7ffff744b000>
     58 bytes
    806 bytes
 0:  <var_decl 0x7ffff7fcfb40 a>
    Streaming tree  <var_decl 0x7ffff7fcfb40 a>
     Streaming single tree
      Streaming header of  <identifier_node 0x7ffff758a870 a>  to decls
      Streaming body of  <identifier_node 0x7ffff758a870 a>  to decls
     3 bytes
     Streaming single tree
      Streaming ref to  <integer_type 0x7ffff7463000 sizetype>
     7 bytes
     Streaming single tree
      Streaming ref to  <integer_type 0x7ffff74630a8 bitsizetype>
     7 bytes
     Start of LTO_tree_scc of size 1
      Streaming header of  <var_decl 0x7ffff7fcfb40 a>  to decls
      Streaming body of  <var_decl 0x7ffff7fcfb40 a>  to decls
      Streaming ref to  <integer_type 0x7ffff74635e8 int>
      Streaming ref to  <identifier_node 0x7ffff758a870 a>
      Streaming ref to  <translation_unit_decl 0x7ffff7457ac8 t.c>
      Streaming ref to  <integer_cst 0x7ffff744af18 32>
      Streaming ref to  <integer_cst 0x7ffff744af30 4>
      Streaming ref to  <identifier_node 0x7ffff758a870 a>
      Streaming ref to  <integer_cst 0x7ffff7468090 1>
     49 bytes
    66 bytes

gcc/ChangeLog:

2020-05-22  Jan Hubicka  <hubicka@ucw.cz>

	* lto-section-out.c (lto_output_decl_index): Adjust dump indentation.
	* lto-streamer-out.c (create_output_block): Fix whitespace
	(lto_write_tree_1): Add (debug) dump.
	(DFS::DFS): Add dump.
	(DFS::DFS_write_tree_body): Do not dump here.
	(lto_output_tree): Improve dumping; do not stream ref when not needed.
	(produce_asm_for_decls): Fix whitespace.
	* tree-streamer-out.c (streamer_write_tree_header): Add dump.
2020-05-22 15:44:10 +02:00
liuhongt
e740f3d731 Add missing vector truncmn2 expanders [PR92658]
2020-05-22  Hongtao.liu  <hongtao.liu@intel.com>

gcc/ChangeLog:
	PR target/92658
	* config/i386/sse.md (trunc<pmov_src_lower><mode>2): New expander
	(truncv32hiv32qi2): Ditto.
	(trunc<ssedoublemodelower><mode>2): Ditto.
	(trunc<mode><pmov_dst_3>2): Ditto.
	(trunc<mode><pmov_dst_mode_4>2): Ditto.
	(truncv2div2si2): Ditto.
	(truncv8div8qi2): Ditto.
	(avx512f_<code>v8div16qi2): Renaming from *avx512f_<code>v8div16qi2.
	(avx512vl_<code>v2div2si): Renaming from *avx512vl_<code>v2div2si2.
	(avx512vl_<code><mode>v2<ssecakarnum>qi2): Renaming
	from *avx512vl_<code><mode>v<ssescalarnum>qi2.

gcc/testsuite/ChangeLog:
	* gcc.target/i386/pr92658-avx512f.c: New test.
	* gcc.target/i386/pr92658-avx512vl.c: Ditto.
	* gcc.target/i386/pr92658-avx512bw-trunc.c: Ditto.
2020-05-22 21:30:23 +08:00
H.J. Lu
808b611bfb x86: Handle -mavx512vpopcntdq for -march=native
Add -mavx512vpopcntdq for -march=native if AVX512VPOPCNTDQ is available.

	PR target/95258
	* config/i386/driver-i386.c (host_detect_local_cpu): Detect
	AVX512VPOPCNTDQ.
2020-05-22 04:18:52 -07:00
Jakub Jelinek
5daf69cfe9 Fix up go related ignored locations.
2020-05-22  Jakub Jelinek  <jakub@redhat.com>

	* gcc-changelog/git_commit.py: Add trailing / to
	gcc/testsuite/go.test/test and replace gcc/go/frontend/
	with gcc/go/gofrontend/ in ignored locations.
2020-05-22 13:09:34 +02:00