Commit Graph

164455 Commits

Author SHA1 Message Date
Richard Biener
6d2648763a re PR tree-optimization/87657 (SLP ICE in libgfortran matmul_i2_vanilla)
2018-10-19  Richard Biener  <rguenther@suse.de>

	PR target/87657
	* config/i386/i386.c (ix86_builtin_vectorization_cost): Use
	TYPE_VECTOR_SUBPARTS and avoid relying on vector mode.

	* gcc.target/i386/pr87657.c: New testcase.

From-SVN: r265316
2018-10-19 14:27:57 +00:00
Jonathan Wakely
30f7c08d96 Fix compilation error with _GLIBCXX_PARALLEL
* include/bits/regex_executor.tcc (_Backref_matcher::_M_apply): Use
	_GLIBCXX_STD_A to refer to normal mode algorithms.
	* testsuite/28_regex/headers/regex/parallel_mode.cc: New test.
	* testsuite/28_regex/headers/regex/std_c++0x_neg.cc: Remove empty
	whitespace.

From-SVN: r265314
2018-10-19 14:46:24 +01:00
Jonathan Wakely
7b1e8acfae Fix testsuite failures in Debug Mode
This fixes the following testsuite failures on ia32 when compiled with
-D_GLIBCXX_DEBUG:

FAIL: 23_containers/map/modifiers/erase/dr130-linkage-check.cc
FAIL: 23_containers/multimap/modifiers/erase/dr130-linkage-check.cc
FAIL: 23_containers/multiset/modifiers/erase/dr130-linkage-check.cc
FAIL: 23_containers/set/modifiers/erase/dr130-linkage-check.cc

The normal mode containers already use the abi-tag to mangle these
overloads differently, but the debug mode versions weren't fixed.

	* include/debug/map.h (map::erase(iterator)): Add abi-tag so that
	C++11 version mangles differently from incompatible C++98 version.
	* include/debug/multimap.h (multimap::erase(iterator)): Likewise.
	* include/debug/multiset.h (multiset::erase(iterator))
	(multiset::erase(const_iterator, const_iterator)): Likewise.
	* include/debug/set.h (set::erase(iterator))
	(multiset::erase(const_iterator, const_iterator)): Likewise.

From-SVN: r265313
2018-10-19 14:37:05 +01:00
Eric Botcazou
ba52922f6b Fix oversight in previous commit
From-SVN: r265312
2018-10-19 10:06:40 +00:00
H.J. Lu
13e29c3648 i386: Enable AVX512 memory broadcast for FP add
Many AVX512 vector operations can broadcast from a scalar memory source.
This patch enables memory broadcast for FP add operations.

gcc/

	PR target/72782
	* config/i386/sse.md
	(*<plusminus_insn><mode>3<mask_name>_bcst_1): New.
	(*add<mode>3<mask_name>_bcst_2): Likewise.

gcc/testsuite/

	PR target/72782
	* gcc.target/i386/avx512-binop-1.h: New file.
	* gcc.target/i386/avx512-binop-2.h: Likewise.
	* gcc.target/i386/avx512-binop-3.h: Likewise.
	* gcc.target/i386/avx512-binop-4.h: Likewise.
	* gcc.target/i386/avx512-binop-5.h: Likewise.
	* gcc.target/i386/avx512-binop-6.h: Likewise.
	* gcc.target/i386/avx512f-add-df-zmm-1.c: Likewise.
	* gcc.target/i386/avx512f-add-sf-zmm-1.c: Likewise.
	* gcc.target/i386/avx512f-add-sf-zmm-2.c: Likewise.
	* gcc.target/i386/avx512f-add-sf-zmm-3.c: Likewise.
	* gcc.target/i386/avx512f-add-sf-zmm-4.c: Likewise.
	* gcc.target/i386/avx512f-add-sf-zmm-5.c: Likewise.
	* gcc.target/i386/avx512f-add-sf-zmm-6.c: Likewise.
	* gcc.target/i386/avx512f-sub-df-zmm-1.c: Likewise.
	* gcc.target/i386/avx512f-sub-sf-zmm-1.c: Likewise.
	* gcc.target/i386/avx512f-sub-sf-zmm-2.c: Likewise.
	* gcc.target/i386/avx512f-sub-sf-zmm-3.c: Likewise.
	* gcc.target/i386/avx512f-sub-sf-zmm-4.c: Likewise.
	* gcc.target/i386/avx512f-sub-sf-zmm-5.c: Likewise.
	* gcc.target/i386/avx512vl-add-sf-xmm-1.c: Likewise.
	* gcc.target/i386/avx512vl-add-sf-ymm-1.c: Likewise.
	* gcc.target/i386/avx512vl-sub-sf-xmm-1.c: Likewise.
	* gcc.target/i386/avx512vl-sub-sf-ymm-1.c: Likewise.

From-SVN: r265311
2018-10-19 02:13:34 -07:00
H.J. Lu
3b1778b7c3 i386: Use register_operand in AVX512 FMA with memory broadcast
Use "register_operand" in AVX512 FMA with memory broadcast when only
registers are allowed.

	* config/i386/sse.md
	(*<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name>_bcst_1):
	Replace nonimmediate_operand with register_operand.
	(*<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name>_bcst_2):
	Likewise.
	(*<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name>_bcst_3):
	Likewise.

From-SVN: r265310
2018-10-19 01:56:37 -07:00
Ilya Leoshkevich
3664a0f184 lra: fix spill_hard_reg_in_range clobber check
FROM..TO range might contain NOTE_INSN_DELETED insns, for which the
corresponding entries in lra_insn_recog_data[] are NULLs.  Example from
the problematic code from PR87596:

    (note 148 154 68 7 NOTE_INSN_DELETED)

lra_insn_recog_data[] is used directly only when the insn in question
is taken from insn_bitmap, which is not the case here.  In other
situations lra_get_insn_recog_data () guarded by INSN_P () or other
stricter predicate are used.  So we need to do this here as well.

A tiny detail worth noting: I put the INSN_P () check before the
insn_bitmap check, because I believe that insn_bitmap can contain only
real insns anyway.

gcc/ChangeLog:

2018-10-19  Ilya Leoshkevich  <iii@linux.ibm.com>

	PR rtl-optimization/87596
	* lra-constraints.c (spill_hard_reg_in_range): Use INSN_P () +
	lra_get_insn_recog_data () instead of lra_insn_recog_data[]
	for instructions in FROM..TO range.

gcc/testsuite/ChangeLog:

2018-10-19  Ilya Leoshkevich  <iii@linux.ibm.com>

	PR rtl-optimization/87596
	* gcc.target/i386/pr87596.c: New test.

From-SVN: r265306
2018-10-19 08:33:52 +00:00
Eric Botcazou
ba9a8625b0 cfgexpand.c (expand_one_var): Use specific wording in error message for non-local frame variables.
* cfgexpand.c (expand_one_var): Use specific wording in error message
	for non-local frame variables.
	* stor-layout.c (layout_decl): Do not issue a warning for them.

From-SVN: r265305
2018-10-19 07:17:20 +00:00
Robin Dapp
079c81d010 Reset insn priority after inc/ref replacement
This patch recomputes the insn priority when a replacement for one of its
dependent insns is applied.

gcc/ChangeLog:

	* haifa-sched.c (priority): Add force_recompute parameter.
	(apply_replacement): Call priority () with force_recompute = true.
	(restore_pattern): Likewise.

From-SVN: r265304
2018-10-19 06:25:30 +00:00
GCC Administrator
e75883a503 Daily bump.
From-SVN: r265303
2018-10-19 00:17:06 +00:00
Ian Lance Taylor
083e9210db compiler: add COMPARE_ALIASES flag for type compare and hash
Normally aliases compare as identical to the underlying type.  Add a
    COMPARE_ALIASES flag to let them compare (and hash) differently.  This
    will be used by later patches in this series.
    
    Reviewed-on: https://go-review.googlesource.com/c/143021

From-SVN: r265297
2018-10-18 23:26:20 +00:00
Ian Lance Taylor
dbf9376f9e compiler: list indirect imports separately in export data
Previously when export data referred to a type that was not defined in
    a directly imported package, we would write the package name as
    additional information in the type's export data.  That approach
    required all type information to be read in order.  This patch changes
    the compiler to find all references to indirectly imported packages,
    and write them out as an indirectimport line in the import data.  This
    will permit us to read exported type data out of order.
    
    The type traversal used to find indirect imports is a little more
    complicated than necessary in preparation for later patches in this
    series.
    
    Reviewed-on: https://go-review.googlesource.com/c/143020

From-SVN: r265296
2018-10-18 23:22:01 +00:00
Ian Lance Taylor
442d418508 Remove ChangeLog entry for changes in gofrontend that were reverted.
From-SVN: r265295
2018-10-18 23:05:32 +00:00
Ian Lance Taylor
8cc43cb403 Revert SVN revision 264561, incorrectly committed directly to the GCC
repo rather than to the master repo.

From-SVN: r265294
2018-10-18 23:02:27 +00:00
Ian Lance Taylor
0799a08b5c compiler: rewrite Type::are_identical to use flags
A single flags parameter replaces the Cmp_tags and errors_are_identical
    parameters. The existing behavior is unchanged.
    
    This is a simplification step for future work that will add a new flag.
    
    Reviewed-on: https://go-review.googlesource.com/c/143019

From-SVN: r265293
2018-10-18 22:55:34 +00:00
H.J. Lu
28dd75a330 Limit mask of vec_merge to HOST_BITS_PER_WIDE_INT
Since mask of vec_merge is in HOST_WIDE_INT, HOST_BITS_PER_WIDE_INT is
the maximum number of vector elements.

	* simplify-rtx.c (simplify_subreg): Limit mask of vec_merge to
	HOST_BITS_PER_WIDE_INT.
	(test_vector_ops_duplicate): Likewise.

From-SVN: r265290
2018-10-18 14:29:55 -07:00
H.J. Lu
9a91ed2a2e i386: Enable AVX512 memory broadcast for FMA
Many AVX512 vector operations can broadcast from a scalar memory source.
This patch enables memory broadcast for FMA operations.

gcc/

	PR target/72782
	* config/i386/sse.md (VF_AVX512): New.
	(avx512bcst): Likewise.
	(*<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name>_bcst_1):
	Likewise.
	(*<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name>_bcst_2):
	Likewise.
	(*<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name>_bcst_3):
	Likewise.

gcc/testsuite/

	PR target/72782
	* gcc.target/i386/avx512-fma-1.h: New file.
	* gcc.target/i386/avx512-fma-2.h: Likewise.
	* gcc.target/i386/avx512-fma-3.h: Likewise.
	* gcc.target/i386/avx512-fma-4.h: Likewise.
	* gcc.target/i386/avx512-fma-5.h: Likewise.
	* gcc.target/i386/avx512-fma-6.h: Likewise.
	* gcc.target/i386/avx512-fma-7.h: Likewise.
	* gcc.target/i386/avx512-fma-8.h: Likewise.
	* gcc.target/i386/avx512f-fmadd-df-zmm-1.c: Likewise.
	* gcc.target/i386/avx512f-fmadd-sf-zmm-1.c: Likewise.
	* gcc.target/i386/avx512f-fmadd-sf-zmm-2.c: Likewise.
	* gcc.target/i386/avx512f-fmadd-sf-zmm-3.c: Likewise.
	* gcc.target/i386/avx512f-fmadd-sf-zmm-4.c: Likewise.
	* gcc.target/i386/avx512f-fmadd-sf-zmm-5.c: Likewise.
	* gcc.target/i386/avx512f-fmadd-sf-zmm-6.c: Likewise.
	* gcc.target/i386/avx512f-fmadd-sf-zmm-7.c: Likewise.
	* gcc.target/i386/avx512f-fmadd-sf-zmm-8.c: Likewise.
	* gcc.target/i386/avx512vl-fmadd-sf-xmm-1.c: Likewise.
	* gcc.target/i386/avx512vl-fmadd-sf-ymm-1.c: Likewise.

From-SVN: r265288
2018-10-18 13:38:41 -07:00
Jonathan Wakely
955fe731e3 Fix tests that fail when built with different options
* testsuite/20_util/duration/cons/2.cc: Add -ffloat-store to fix
	failure when compiled without optimisation.
	* testsuite/ext/profile/mutex_extensions_neg.cc: Prune additional
	errors caused by C++17 std::pmr alias templates.

From-SVN: r265287
2018-10-18 21:04:55 +01:00
Jonathan Wakely
c0ace69ec6 PR libstdc++/87642 handle multibyte thousands separators from libc
If a locale's THOUSANDS_SEP or MON_THOUSANDS_SEP string is not a
single character we either need to narrow it to a single char or
ignore it (and therefore disable digit grouping for that facet).

	PR libstdc++/87642
	* config/locale/gnu/monetary_members.cc
	(moneypunct<char, true>::_M_initialize_moneypunct): Use
	__narrow_multibyte_chars to convert multibyte thousands separators
	to a single char.
	* config/locale/gnu/numeric_members.cc
	(numpunct<char>::_M_initialize_numpunct): Likewise.
	(__narrow_multibyte_chars): New function.

From-SVN: r265286
2018-10-18 20:57:25 +01:00
Ian Lance Taylor
e8ce849a48 compiler: drop semicolons in export data
The export data, which is approximately readable and looks something
    like Go, was first implemented back when Go still used semicolons.
    Drop the semicolons, to make it look slightly more Go like and make it
    slightly smaller.
    
    This updates the compiler and the gccgoimporter package.
    
    This introduces a new version of the export data.  There are going to
    be more changes to the export data, so this version is still subject
    to change.
    
    Reviewed-on: https://go-review.googlesource.com/c/143018

From-SVN: r265284
2018-10-18 19:35:46 +00:00
Tobias Burnus
d047723321 Fix (re)alloc of polymorphic arrays
PR fortran/87625
        * trans-array.c (gfc_is_reallocatable_lhs): Detect allocatable
        polymorphic arrays.

        PR fortran/87625
        * gfortran.dg/realloc_on_assign_31.f90: New file.

From-SVN: r265283
2018-10-18 21:35:34 +02:00
Paul Koning
a9a2fddbf2 udivmodsi4.c (__udivmodsi4): Rename to conform to coding standard.
* udivmodsi4.c (__udivmodsi4): Rename to conform to coding
	standard.
	* divmod.c: Update references to __udivmodsi4.
	* udivmod.c: Ditto.
	* udivhi3.c: New file.
	* udivmodhi4.c: New file.
	* config/pdp11/t-pdp11 (LIB2ADD): Add the new files.

From-SVN: r265277
2018-10-18 14:01:15 -04:00
Jonathan Wakely
616e0db936 Improve -dumpversion and -dumpfullversion documentation
* doc/invoke.texi (-dumpversion): Improve grammar.
	(-dumpfullversion): Make more consistent with -dumpversion.

From-SVN: r265276
2018-10-18 18:43:00 +01:00
Uros Bizjak
b75dff03b7 i386.c (ix86_emit_fp_unordered_jump): Set JUMP_LABEL to the jump insn.
* config/i386/i386.c (ix86_emit_fp_unordered_jump):
	Set JUMP_LABEL to the jump insn.
	(ix86_emit_i387_log1p): Use ix86_expand_branch to expand branch.
	Predict emitted jump and add label to jump insn.

From-SVN: r265274
2018-10-18 18:49:20 +02:00
David Malcolm
23abcf7874 Fix missing entry to gcc/ada/ChangeLog for r265240
From-SVN: r265272
2018-10-18 16:09:56 +00:00
David Malcolm
05d57d6561 Fix ICE in substring-handling building 502.gcc_r (PR 87562)
In r264887 I broke the build of 502.gcc_r due to an ICE.
The ICE occurs when generating a location for an sprintf warning within
a string literal, where the sprintf call is in a macro.

The root cause is a bug in the original commit of substring locations
(r239175).  get_substring_ranges_for_loc has code to handle the case
where the string literal is in a very long source line that exceeds the
length that the current linemap can represent: the start of the token
is in one line map, but then another line map is started, and the end
of the token is in the new linemap.  get_substring_ranges_for_loc handles
this by using the linemap of the end-point when building location_t
values within the string.  When extracting the linemap for the endpoint
in r239175 I erroneously used LRK_MACRO_EXPANSION_POINT, which should
have instead been LRK_SPELLING_LOCATION.

I believe this bug was dormant due to rejecting macro locations earlier
in the function, but in r264887 I allowed some macro locations in order
to deal with locations coming from the C++ lexer, and this uncovered
the bug: if a string literal was defined in a macro, locations within
the string literal would be looked up using the linemap of the expansion
point of the macro, rather than of the spelling point.  This would lead
to garbage location_t values, and, depending on the precise line numbers
of the two locations, an assertion failure (which was causing the build
failure in 502.gcc_r).

This patch fixes the bug by using LRK_SPELLING_LOCATION, and adds some
bulletproofing to the "two linemaps" case.

Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu
(g++.sum gained 5 PASS results; gcc.sum gained 3 PASS results).
I also verified that this fixes the build of 502.gcc_r.

gcc/ChangeLog:
	PR tree-optimization/87562
	* input.c (get_substring_ranges_for_loc): Use
	LRK_SPELLING_LOCATION rather than LRK_MACRO_EXPANSION_POINT when
	getting the linemap for the endpoint.  Verify that it's either
	in the same linemap as the start point's spelling location, or
	at least in the same file.

gcc/testsuite/ChangeLog:
	PR tree-optimization/87562
	* c-c++-common/substring-location-PR-87562-1-a.h: New file.
	* c-c++-common/substring-location-PR-87562-1-b.h: New file.
	* c-c++-common/substring-location-PR-87562-1.c: New test.
	* gcc.dg/plugin/diagnostic-test-string-literals-1.c: Add test for
	PR 87562.
	* gcc.dg/plugin/pr87562-a.h: New file.
	* gcc.dg/plugin/pr87562-b.h: New file.

From-SVN: r265271
2018-10-18 15:44:39 +00:00
Jonathan Wakely
fab2c75b73 PR libstdc++/87641 correctly initialize accumulator in valarray::sum()
Use the value of the first element as the initial value of the
__valarray_sum accumulator. Value-initialization might not create the
additive identity for the value type.

Make a similar change to __valarray_product even though it's only ever
used internally with a value_type of size_t.

	PR libstdc++/87641
	* include/bits/valarray_array.h (__valarray_sum): Use first element
	to initialize accumulator instead of value-initializing it.
	(__valarray_product<_Tp>): Move to ...
	* src/c++98/valarray.cc (__valarray_product<_Tp>): Here. Use first
	element to initialize accumulator.
	(__valarray_product(const valarray<size_t>&)): Remove const_cast made
	unnecessary by LWG 389.
	* testsuite/26_numerics/valarray/87641.cc: New test.

From-SVN: r265270
2018-10-18 16:38:50 +01:00
Richard Biener
b71679934e i386.c (ix86_builtin_vectorization_cost): Do not feed width-specific load/store costs through ix86_vec_cost.
2018-10-18  Richard Biener  <rguenther@suse.de>

	* config/i386/i386.c (ix86_builtin_vectorization_cost): Do not
	feed width-specific load/store costs through ix86_vec_cost.
	* config/i386/x86-tune-costs.h (athlon_cost): Adjust.
	(k8_cost): Likewise.
	(bdver_cost): Likewise.
	(znver1_cost): Likewise.
	(btver1_cost): Likewise.
	(btver2_cost): Likewise.

From-SVN: r265268
2018-10-18 14:31:29 +00:00
H.J. Lu
aff3ce41c4 Call simplify_gen_subreg to simplify subreg of vec_merge
Simplify
	(subreg (vec_merge (X)
			   (vector)
			   (const_int ((1 << N) | M)))
		(N * sizeof (outermode)))
to
	(subreg (X) (N * sizeof (outermode)))

	* simplify-rtx.c (simplify_subreg): Call simplify_gen_subreg
	to simplify subreg of vec_merge.

From-SVN: r265267
2018-10-18 05:34:13 -07:00
Richard Biener
200045a924 i386.c: Fix costing of vector FMA.
2018-10-18  Richard Biener  <rguenther@suse.de>

	* config/i386/i386.c: Fix costing of vector FMA.

From-SVN: r265266
2018-10-18 12:19:44 +00:00
Richard Biener
b960e909ae i386.c (ix86_vec_cost): Remove !parallel path and argument.
2018-10-18  Richard Biener  <rguenther@suse.de>

	* config/i386/i386.c (ix86_vec_cost): Remove !parallel path
	and argument.
	(ix86_builtin_vectorization_cost): For vec_construct properly
	cost insertion into SSE regs.
	(...): Adjust calls to ix86_vec_cost.

From-SVN: r265265
2018-10-18 11:47:51 +00:00
Paul Thomas
75cdd535b1 re PR fortran/58618 (Wrong code with character substring and ASSOCIATE)
2018-10-18  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/58618
	* trans-stmt.c (trans_associate_var): All strings that return
	as pointer types can be assigned directly to the associate
	name so remove 'attr' and the condition that uses it.

2018-10-18  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/58618
	* gfortran.dg/associate_45.f90 : New test.

From-SVN: r265264
2018-10-18 10:37:39 +00:00
Paul Thomas
75a6d7da39 re PR fortran/58618 (Wrong code with character substring and ASSOCIATE)
2018-10-18  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/58618
	* trans-decl.c (gfc_get_symbol_decl): Deal correctly with the
	initialization with NULL() of a deferred length pointer.

2018-10-18  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/58618
	* gfortran.dg/deferred_character_30.f90 : New test.

From-SVN: r265263
2018-10-18 10:33:25 +00:00
Richard Biener
de0edf8735 re PR tree-optimization/87087 (Optimization hangs up and consumes over 15Gb of memory)
2018-10-18  Richard Biener  <rguenther@suse.de>

	PR middle-end/87087
	Revert
	2018-02-07  Richard Biener  <rguenther@suse.de>

        PR tree-optimization/84204
        * tree-chrec.c (chrec_fold_plus_1): Remove size limiting in
        this place.

	* gcc.dg/torture/pr87087.c: New testcase.
	* gcc.dg/graphite/pr84204.c: XFAIL.
	* gcc.dg/graphite/pr85935.c: Likewise.

From-SVN: r265261
2018-10-18 08:40:54 +00:00
H.J. Lu
294973a497 Simplify subreg of vec_merge of vec_duplicate
We can simplify

  (subreg (vec_merge (vec_duplicate X)
		     (vector)
		     (const_int ((1 << N) | M)))
	  (N * sizeof (X)))

to X when mode of X is the same as of mode of subreg.

gcc/

	PR target/87537
	* simplify-rtx.c (simplify_subreg): Simplify subreg of vec_merge
	of vec_duplicate.
	(test_vector_ops_duplicate): Add test for a scalar subreg of a
	VEC_MERGE of a VEC_DUPLICATE.

gcc/testsuite/

	PR target/87537
	* gcc.target/i386/pr87537-1.c: New test.

From-SVN: r265260
2018-10-18 01:18:42 -07:00
François Dumont
7702ab653a revert: [multiple changes]
2018-10-18  François Dumont  <fdumont@gcc.gnu.org>

	Partial revert.
	2018-10-08  François Dumont  <fdumont@gcc.gnu.org>

	* include/debug/list (list<>::cbegin()): Use C++11 direct
	initialization.
	(list<>::cend()): Likewise.
	(list<>::erase(const_iterator, const_iterator)): Ensure consistent
	iterator comparisons.
	(list<>::splice(const_iterator, list&&, const_iterator,
	const_iterator)): Likewise.

	Partial revert.
	2018-10-15  François Dumont  <fdumont@gcc.gnu.org>

	* include/debug/vector (vector<>::cbegin()): Use C++11 direct
	initialization.
	(vector<>::cend()): Likewise.
	(vector<>::insert(const_iterator, const _Tp&)): Use consistent
	iterator comparison.
	(vector<>::erase(const_iterator)): Likewise.
	(vector<>::erase(const_iterator, const_iterator)): Likewise.

From-SVN: r265259
2018-10-18 05:36:02 +00:00
GCC Administrator
7bed4de21b Daily bump.
From-SVN: r265255
2018-10-18 00:16:50 +00:00
Joseph Myers
9f936c8613 Add -std=c2x, -std=gnu2x, -Wc11-c2x-compat, C2X _Static_assert support.
Now new features are starting to be added to a C2X draft (in the C2x
branch of the C standard git repository, no public WG14 document yet),
it's time to add -std=c2x and associated options to GCC for use in
enabling C2X features.

This patch adds the expected set of options: -std=c2x, -std=gnu2x,
-Wc11-c2x-compat.  A first C2X feature is added (the only one so far
in the repository that's obviously relevant to GCC): support (as in
C++) for the string constant to be omitted in _Static_assert.  This
feature is duly also supported as an extension in earlier standard
modes (diagnosed with -pedantic, unless -Wno-c11-c2x-compat is given,
or with -Wc11-c2x-compat even in C2X mode).

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

gcc/
	* doc/cpp.texi (__STDC_VERSION__): Document C2X handling.
	* doc/invoke.texi (-std=c2x, -std=gnu2x): Document new options.
	* doc/standards.texi (C Language): Document C2X.
	* dwarf2out.c (highest_c_language), config/rl78/rl78.c
	(rl78_option_override): Handle "GNU C2X" language name.

gcc/c/
	* c-errors.c (pedwarn_c11): New function.
	* c-parser.c (disable_extension_diagnostics): Save
	warn_c11_c2x_compat and set it to 0.
	(restore_extension_diagnostics): Restore warn_c11_c2x_compat.
	(c_parser_static_assert_declaration_no_semi): Handle
	_Static_assert without string constant.
	* c-tree.h (pedwarn_c11): New prototype.

gcc/c-family/
	* c-common.c (flag_isoc2x): New variable.
	* c-common.h (clk_c): Update comment to reference C2X.
	(flag_isoc99, flag_isoc11): Update comments to reference future
	standard versions in general.
	(flag_isoc2x): Declare.
	* c-opts.c (set_std_c2x): New function.
	(c_common_handle_option): Handle -std=c2x and -std=gnu2x.
	(set_std_c89, set_std_c99, set_std_c11, set_std_c17): Set
	flag_isoc2x to 0.
	* c.opt (Wc11-c2x-compat, std=c2x, std=gnu2x): New options.

gcc/testsuite/
	* gcc.dg/c11-static-assert-7.c, gcc.dg/c11-static-assert-8.c,
	gcc.dg/c11-static-assert-9.c, gcc.dg/c2x-static-assert-1.c,
	gcc.dg/c2x-static-assert-2.c, gcc.dg/c99-static-assert-2.c,
	gcc.dg/gnu2x-static-assert-1.c: New tests.
	* gcc.dg/missing-symbol-3.c: Update expected fix-it text.

libcpp/
	* include/cpplib.h (enum c_lang): Add CLK_GNUC2X and CLK_STDC2X.
	* init.c (lang_defaults): Add GNUC2X and STDC2X entries.
	(cpp_init_builtins): Define __STDC_VERSION__ to 202000L for C2X.

From-SVN: r265251
2018-10-18 00:58:54 +01:00
Joseph Myers
7a8a92c448 Update C17 option descriptions not to say "expected to be published".
* c.opt (std=c17, std=c18, std=gnu17, std=gnu18, std=iso9899:2017)
	(std=iso9899:2018): Document C17 as published in 2018.

From-SVN: r265250
2018-10-17 22:41:42 +01:00
Joseph Myers
7dc41f3d1a Update manual references for C17 having been published.
This patch makes references in the manual to C17 reflect it having
been published in July 2018.  (For the reasons it took so long to get
to ballot and publication, see the WG14 convenor's report to the last
SC22 plenary - SC22 N5297 - where it references "A troubling new trend
where ISO CS has begun enforcing undocumented rules that are approved
neither by the TMB nor by the WG 14 editors, leading to a decrease in
the usefulness of standards documents.".)

Tested with "make info html pdf".

	* doc/invoke.texi (-std=c17), doc/standards.texi (C Language):
	Document C17 as published in 2018.

From-SVN: r265249
2018-10-17 22:33:30 +01:00
Tobias Burnus
91f9b2e0f7 Fix select-type regression
PR fortran/87632
        * resolve.c (resolve_select_type): Use correct variable.

        PR fortran/87632
        * gfortran.dg/select_type_47.f90: New.

From-SVN: r265248
2018-10-17 21:58:58 +02:00
Ville Voutilainen
4026227f21 re PR libstdc++/87619 (sizeof(std::variant) can be reduced if its variant_size is UCHAR_MAX)
PR libstdc++/87619

* include/std/variant (__select_index): Fix an off-by-one.
* testsuite/20_util/variant/87619.cc: New.

From-SVN: r265247
2018-10-17 22:08:51 +03:00
Rasmus Villemoes
fc8abc4660 libgcc: apply LIB2FUNCS_EXCLUDE logic to LIB2FUNCS_ST
One target file (config/c6x/t-elf) lists _printf and _gcc_bcmp in
LIB2FUNCS_EXCLUDE, but that does not have any effect, since those are
not filtered away from LIB2FUNCS_ST. Another option is to do as in
config/rl78/t-rl78, which explicitly sets LIB2FUNCS_ST

# Remove __gcc_bcmp from LIB2FUNCS_ST
LIB2FUNCS_ST = _eprintf

but honouring LIB2FUNCS_EXCLUDE also for LIB2FUNCS_ST seems more
natural.

From-SVN: r265246
2018-10-17 18:39:48 +00:00
Eric Botcazou
1906e1a607 re PR middle-end/87623 (bytes swapped in register when comparing cause fail when compiled with -O1 or higher)
PR middle-end/87623
	* fold-const.c (fold_truth_andor_1): If the right side is not constant,
	bail out if both sides do not have the same storage order.

From-SVN: r265242
2018-10-17 17:49:28 +00:00
Aldy Hernandez
54994253d3 bitmap.c (bitmap_head::dump): New.
* bitmap.c (bitmap_head::dump): New.
	* bitmap.h (bitmap_head): Add dump().
	* gimple-ssa-evrp-analyze.c
	(evrp_range_analyzer::try_find_new_range): Adjust for value_range API.
	(evrp_range_analyzer::set_ssa_range_info): Same.
	(evrp_range_analyzer::record_ranges_from_phis): Same.
	(evrp_range_analyzer::record_ranges_from_stmt): Same.
	* gimple-ssa-evrp.c (evrp_dom_walker::before_dom_children): Same.
	* gimple-ssa-sprintf.c (get_int_range): Same.
	(format_integer): Same.
	(sprintf_dom_walker::handle_gimple_call): Same.
	* ipa-cp.c (ipcp_vr_lattice::meet_with_1): Same.
	(ipcp_vr_lattice::top_p): Same.
	(ipcp_vr_lattice::bottom_p): Same.
	(ipcp_vr_lattice::set_to_bottom): Same.
	(ipa_vr_operation_and_type_effects): Same.
	(propagate_vr_across_jump_function): Same.
	(ipcp_store_vr_results): Same.
	* ipa-prop.c (struct ipa_vr_ggc_hash_traits): Same.
	(ipa_print_node_jump_functions_for_edge): Same.
	(ipa_get_value_range): Same.
	(ipa_compute_jump_functions_for_edge): Same.
	(ipa_write_jump_function): Same.
	* tree-ssa-dom.c (simplify_stmt_for_jump_threading): Same.
	* tree-ssa-threadedge.c (record_temporary_equivalences_from_phis):
	Same.
	* vr-values.c (set_value_range_to_nonnegative): Same.
	(set_value_range_to_truthvalue): Same.
	(vr_values::get_value_range): Same.
	(vr_values::set_defs_to_varying): Same.
	(vr_values::update_value_range): Same.
	(symbolic_range_based_on_p): Same.
	(vr_values::op_with_boolean_value_range_p): Same.
	(vr_values::extract_range_for_var_from_comparison_expr): Same.
	(vr_values::extract_range_from_ssa_name): Same.
	(vr_values::extract_range_from_binary_expr): Same.
	(vr_values::extract_range_from_unary_expr): Same.
	(vr_values::extract_range_from_cond_expr): Same.
	(vr_values::extract_range_from_comparison): Same.
	(vr_values::check_for_binary_op_overflow): Same.
	(vr_values::extract_range_basic): Same.
	(vr_values::extract_range_from_assignment): Same.
	(compare_ranges): Same.
	(compare_range_with_value): Same.
	(vr_values::adjust_range_with_scev): Same.
	(vrp_valueize): Same.
	(vrp_valueize_1): Same.
	(vr_values::get_vr_for_comparison): Same.
	(vr_values::compare_name_with_value): Same.
	(vr_values::compare_names): Same.
	(vr_values::vrp_evaluate_conditional): Same.
	(find_case_label_ranges): Same.
	(vr_values::vrp_visit_switch_stmt): Same.
	(vr_values::extract_range_from_phi_node): Same.
	(vr_values::simplify_div_or_mod_using_ranges): Same.
	(vr_values::simplify_bit_ops_using_ranges): Same.
	(test_for_singularity): Same.
	(range_fits_type_p): Same.
	(vr_values::simplify_cond_using_ranges_1): Same.
	(vr_values::simplify_switch_using_ranges): Same.
	(vr_values::simplify_float_conversion_using_ranges): Same.
	(vr_values::two_valued_val_range_p): Same.
	(vr_values::add_equivalence): Move to value_range::equiv_add.
	* vr-values.h (vr_values::add_equivalence): Remove.
	(VR_INITIALIZER): Remove.
	* tree-vrp.c (value_range::set): New.
	(value_range::equiv_add): New.
	(value_range::value_range): New.
	(value_range::deep_copy): New.
	(value_range::check): New.
	(value_range::equal_p): New.
	(value_range::ignore_equivs_equal_p): New.
	(value_range::operator==): New.
	(value_range::operator!=): New.
	(value_range::symbolic_p): New.
	(value_range::numeric_p): New.
	(value_range::set_undefined): New.
	(value_range::set_varying): New.
	(value_range::may_contain_p): New.
	(value_range::equiv_clear): New.
	(value_range::singleton_p): New.
	(value_range::intersect): New.
	(value_range::dump): New.
	(value_range::set_and_canonicalize): New.
	(set_value_range): Adjust for value_range API.
	(set_value_range_to_undefined): Same.
	(set_value_range_to_varying): Same.
	(set_and_canonicalize_value_range): Same.
	(set_value_range_to_nonnull): Same.
	(set_value_range_to_null): Same.
	(range_is_null): Same.
	(range_is_nonnull): Same.
	(range_int_cst_p): Same.
	(range_int_cst_singleton_p): Same.
	(symbolic_range_p): Same.
	(range_includes_zero_p): Same.
	(value_range_constant_singleton): Same.
	(vrp_set_zero_nonzero_bits): Same.
	(ranges_from_anti_range): Same.
	(extract_range_into_wide_ints): Same.
	(extract_range_from_multiplicative_op): Same.
	(set_value_range_with_overflow): Same.
	(extract_range_from_binary_expr_1): Same.
	(extract_range_from_unary_expr): Same.
	(dump_value_range): Same.
	(debug_value_range): Same.
	(vrp_prop::check_array_ref): Same.
	(vrp_prop::check_mem_ref): Same.
	(vrp_prop::vrp_initialize): Same.
	(vrp_prop::visit_stmt): Same.
	(intersect_ranges): Same.
	(vrp_prop::visit_phi): Same.
	(vrp_prop::vrp_finalize): Same.
	(determine_value_range_1): Same.
	(determine_value_range): Same.
	(vrp_intersect_ranges_1): Rename to...
	(vrp_intersect_1): this.
	(vrp_intersect_ranges): Rename to...
	(value_range::intersect_helper): ...this.
	(vrp_meet_1): Rename to...
	(value_range::union_helper): ...this.
	(vrp_meet): Rename to...
	(value_range::union_): ...this.
	(copy_value_range): Remove.
	* tree-vrp.h (struct value_range): Rewrite into a proper class.
	(value_range::vrtype): New.
	(value_range::type): New.
	(value_range::equiv): New.
	(value_range::min): New.
	(value_range::max): New.
	(value_range::varying_p): New.
	(value_range::undefined_p): New.
	(value_range::null_p): New.
	(value_range::equiv_add): New.
	(copy_value_range): Remove.

From-SVN: r265241
2018-10-17 15:59:25 +00:00
David Malcolm
033eb56717 Run selftests for C++ as well as C
gcc/ChangeLog:
	* Makefile.in (SELFTEST_TARGETS): New.
	(selftest) Change from s-selftest-c to $(SELFTEST_TARGETS).
	(C_SELFTEST_FLAGS, C_SELFTEST_DEPS, s-selftest-c, selftest-c-gdb)
	(selftest-gdb, selftest-c-valgrind, selftest-valgrind): Move to
	c/Make-lang.in.
	(CPP_SELFTEST_FLAGS, CPP_SELFTEST_DEPS, s-selftest-c++)
	(selftest-c++-gdb, selftest-c++-valgrind): Move to
	cp/Make-lang.in.
	* configure: Regenerate.
	* configure.ac (selftest_languages): New.

gcc/brig/ChangeLog:
	* Make-lang.in (selftest-brig): New.

gcc/c/ChangeLog:
	* Make-lang.in (selftest-c): New.
	(C_SELFTEST_FLAGS, C_SELFTEST_DEPS, s-selftest-c, selftest-c-gdb)
	(selftest-gdb, selftest-c-valgrind, selftest-valgrind): Move here
	from gcc/Makefile.in.

gcc/cp/ChangeLog:
	* Make-lang.in (selftest-c++): New.
	(CPP_SELFTEST_FLAGS, CPP_SELFTEST_DEPS, s-selftest-c++)
	(selftest-c++-gdb, selftest-c++-valgrind): Move here from
	gcc/Makefile.in.

gcc/fortran/ChangeLog:
	* Make-lang.in (selftest-fortran): New.

gcc/go/ChangeLog:
	* Make-lang.in (selftest-go): New.

gcc/jit/ChangeLog:
	* Make-lang.in (selftest-jit): New.

gcc/lto/ChangeLog:
	* Make-lang.in (selftest-lto): New.

gcc/objc/ChangeLog:
	* Make-lang.in (selftest-objc): New.

gcc/objcp/ChangeLog:
	* Make-lang.in (selftest-obj-c++): New.

From-SVN: r265240
2018-10-17 13:56:05 +00:00
Aldy Hernandez
e8f1d5cb7c tree-vrp.c (extract_range_from_multiplicative_op): Remove overflow wraps argument.
* tree-vrp.c (extract_range_from_multiplicative_op): Remove
	overflow wraps argument.
        (extract_range_from_binary_expr_1): Do not pass overflow wraps to
	wide_int_range_multiplicative_op.
        * wide-int-range.cc (wide_int_range_mult_wrapping): Remove
	overflow wraps argument.
        (wide_int_range_multiplicative_op): Same.
        (wide_int_range_lshift): Same.
        (wide_int_range_div): Same.
        * wide-int-range.h (wide_int_range_multiplicative_op): Same.
        (wide_int_range_lshift): Same.
        (wide_int_range_div): Same.

From-SVN: r265238
2018-10-17 12:32:08 +00:00
Aldy Hernandez
fa6b20f32c wide-int-range.h (wide_int_range_shift_undefined_p): Adjust to use sign as argument.
* wide-int-range.h (wide_int_range_shift_undefined_p): Adjust to
	use sign as argument.
	* tree-vrp.c (extract_range_from_binary_expr_1): Pass sign to
	wide_int_range_shift_undefined_p.

From-SVN: r265237
2018-10-17 12:31:58 +00:00
Paolo Carlini
cd1e244a1c 2018-10-17 Paolo Carlini <paolo.carlini@oracle.com>
* Fix typo in ChangeLog.

From-SVN: r265234
2018-10-17 07:34:28 +00:00
Paolo Carlini
2be9999874 re PR c++/84705 (internal compiler error: in add_stmt, at cp/semantics.c:390)
/cp
2018-10-17  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/84705
	* init.c (build_cplus_new): Avoid duplicate diagnostic about
	incomplete type, early return error_mark_node if the second
	argument is error_mark_node.

/testsuite
2018-10-17  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/84705
	* g++.dg/cpp0x/pr84705.C: New.

From-SVN: r265233
2018-10-17 07:32:15 +00:00