176523 Commits

Author SHA1 Message Date
Marek Polacek
661232da72 c++: explicit(bool) malfunction with dependent expression [PR95066]
I forgot to set DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P when merging two
function declarations and as a sad consequence, we never tsubsted
the dependent explicit-specifier in tsubst_function_decl, leading to
disregarding the explicit-specifier altogether, and wrongly accepting
this test.

	PR c++/95066
	* decl.c (duplicate_decls): Set DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P.

	* g++.dg/cpp2a/explicit16.C: New test.
2020-05-13 16:25:39 -04:00
Nathan Sidwell
7040894c44 c++: Template arg comparison
When fixing up the template specialization hasher I was confused by
the control flow through template_args_equal.  This reorders the
category checking, so it is clearer as to what kind of node can reach
which point.

	* pt.c (template_args_equal): Reorder category checking for
	clarity.
2020-05-13 13:22:02 -07:00
Nathan Sidwell
2bb30de62f c++: Simplify typedef access checking
I discovered that the template typedef access check was rather more
expensive than needed.  The call of get_types_needed_access_check in
the FOR_EACH_VEC_SAFE_ELT is the moral equivalent of 'for (size_t pos
= 0; pos != strlen (string); pos++)'.  Let's not do that.

	* pt.c (perform_typedefs_access_check): Cache expensively
	calculated object references.
	(check_auto_in_tmpl_args): Just assert we do not get unexpected
	nodes, rather than silently do nothing.
	(append_type_to_template_for_access): Likewise, cache expensie
	object reference.
2020-05-13 13:17:25 -07:00
Nathan Sidwell
833c7b4b5e c++: Simplify canonical_type_parameter
Use a single vec_safe_grow_cleared, rather than that or a vec_alloc.
Use a for loop that returns early.

	* pt.c (canonical_type_parameter): Simplify.
2020-05-13 13:11:36 -07:00
Nathan Sidwell
7e6a72cb2e c++: Formatting fixups & some simplifications.
A bunch of minor reformatting, simplifications or change to checking_asserts.

	* pt.c (spec_hash_table): New typedef.
	(decl_specializations, type_specializations): Use it.
	(retrieve_specialization): Likewise.
	(register_specialization): Remove unnecessary casts.
	(push_template_decl_real): Reformat.
	(instantiate_class_template_1): Use more RAII.
	(make_argument_pack): Simplify.
	(instantiate_template_1): Use gcc_checking_assert for expensive
	asserts.
	(instantiate_decl): Likewise.
	(resolve_typename_type): Reformat comment.
	* semantics.c (struct deferred_access): Remove unnecessary GTY on
	member.
	(begin_class_definition): Fix formatting.
2020-05-13 13:03:55 -07:00
Jason Merrill
b04445d4a8 c++: Replace "C++2a" with "C++20".
C++20 isn't final quite yet, but all that remains is formalities, so let's
go ahead and change all the references.

I think for the next C++ standard we can just call it C++23 rather than
C++2b, since the committee has been consistent about time-based releases
rather than feature-based.

gcc/c-family/ChangeLog
2020-05-13  Jason Merrill  <jason@redhat.com>

	* c.opt (std=c++20): Make c++2a the alias.
	(std=gnu++20): Likewise.
	* c-common.h (cxx_dialect): Change cxx2a to cxx20.
	* c-opts.c: Adjust.
	* c-cppbuiltin.c: Adjust.
	* c-ubsan.c: Adjust.
	* c-warn.c: Adjust.

gcc/cp/ChangeLog
2020-05-13  Jason Merrill  <jason@redhat.com>

	* call.c, class.c, constexpr.c, constraint.cc, decl.c, init.c,
	lambda.c, lex.c, method.c, name-lookup.c, parser.c, pt.c, tree.c,
	typeck2.c: Change cxx2a to cxx20.

libcpp/ChangeLog
2020-05-13  Jason Merrill  <jason@redhat.com>

	* include/cpplib.h (enum c_lang): Change CXX2A to CXX20.
	* init.c, lex.c: Adjust.
2020-05-13 15:16:49 -04:00
Jason Merrill
c3cb34c632 testsuite: Support { target c++20 } in tests.
I'm not sure why I didn't check this in along with adding -std=c++20, since
I wrote this patch at the same time.  The testsuite should support both
{ target c++2a } and { target c++20 }.

gcc/testsuite/ChangeLog
2020-05-13  Jason Merrill  <jason@redhat.com>

	* lib/target-supports.exp (check_effective_target_c++20_only)
	(check_effective_target_c++20): New.
2020-05-13 15:16:49 -04:00
Ian Lance Taylor
0d5d880994 libgo: build syscall test with -static
This avoids problems finding libgo.so when running the test as root,
which invokes the test as a child process in various limited environments.

Fixes PR go/95061

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/233897
2020-05-13 11:45:55 -07:00
Ian Lance Taylor
d2ec278682 libbacktrace: mark test_large parameter unused in ztest.c
libbacktrace/
	* ztest.c (test_large): Mark state ATTRIBUTE_UNUSED.
2020-05-13 11:09:53 -07:00
Ian Lance Taylor
702adbb2ff libbacktrace: treat EACCESS like ENOENT
libbacktrace/
	PR go/95061
	* posix.c (backtrace_open): Treat EACCESS like ENOENT.
2020-05-13 10:19:58 -07:00
Jakub Jelinek
287552950d testsuite: Fix up tree-ssa/pr94969.c testcase [PR95110]
2020-05-13  Jakub Jelinek  <jakub@redhat.com>

	PR testsuite/95110
	* gcc.dg/tree-ssa/pr94969.c: Swap scan-tree-dump-not arguments.
2020-05-13 19:16:06 +02:00
Marek Polacek
be99b308d0 c++: Fix g++.dg/parse/attr4.C test.
I noticed this test failing in C++11 mode.

	* g++.dg/parse/attr4.C: Use c++11 in a target selector.
2020-05-13 12:06:04 -04:00
Richard Biener
78db0e093e add vectype parameter to add_stmt_cost hook
This adds a vectype parameter to add_stmt_cost which avoids the need
to pass down a (wrong) stmt_info just to carry this information.
Useful for invariants which do not have a stmt_info associated.

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

	* target.def (add_stmt_cost): Add new vectype parameter.
	* targhooks.c (default_add_stmt_cost): Adjust.
	* targhooks.h (default_add_stmt_cost): Likewise.
	* config/aarch64/aarch64.c (aarch64_add_stmt_cost): Take new
	vectype parameter.
	* config/arm/arm.c (arm_add_stmt_cost): Likewise.
	* config/i386/i386.c (ix86_add_stmt_cost): Likewise.
	* config/rs6000/rs6000.c (rs6000_add_stmt_cost): Likewise.

	* tree-vectorizer.h (stmt_info_for_cost::vectype): Add.
	(dump_stmt_cost): Add new vectype parameter.
	(add_stmt_cost): Likewise.
	(record_stmt_cost): Likewise.
	(record_stmt_cost): Add overload with old signature.
	* tree-vect-loop.c (vect_compute_single_scalar_iteration_cost):
	Adjust.
	(vect_get_known_peeling_cost): Likewise.
	(vect_estimate_min_profitable_iters): Likewise.
	* tree-vectorizer.c (dump_stmt_cost): Add new vectype parameter.
	* tree-vect-stmts.c (record_stmt_cost): Likewise.
	(vect_prologue_cost_for_slp_op): Remove stmt_vec_info parameter
	and pass down correct vectype and NULL stmt_info.
	(vect_model_simple_cost): Adjust.
	(vect_model_store_cost): Likewise.
2020-05-13 17:19:38 +02:00
Mark Eggleston
f9f98e59a7 Fortran : ICE in gfc_conv_array_constructor_expr PR93497
Invalid expressions, such as those involving array constructors,
used for the length of character types will cause an ICE.

2020-05-13  Steven G. Kargl  <kargl@gcc.gnu.org>

gcc/fortran/

	PR fortran/93497
	* decl.c (char_len_param_value): Check whether character
	length expression is of type EXPR_OP and if so simplify it.
	* resolve.c (resolve_charlen): Reject length if it has a
	rank.

2020-05-13  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

	PR fortran/93497
	* gfortran.dg/pr88025.f90: Change in wording of error.
	* gfortran.dg/pr93497.f90: New test.
	* gfortran.dg/pr93714_1.f90: Change in wording of errors.
	* gfortran.dg/pr93714_2.f90: Change in wording of errors.
2020-05-13 14:51:53 +01:00
Patrick Palka
6cc6b087c8 c++: Add testcase for already-fixed PR [PR70642]
We correctly reject the testcase in this PR ever since commit r9-7046.

gcc/testsuite/ChangeLog:

	PR c++/70642
	* g++.dg/cpp0x/alias-decl-70.C: New test.
2020-05-13 09:42:55 -04:00
Richard Biener
ab5934a8fe Remove SLP_INSTANCE_GROUP_SIZE
This removes the SLP_INSTANCE_GROUP_SIZE member since the number of
lanes throughout a SLP subgraph is not necessarily constant.

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

	* tree-vectorizer.h (SLP_INSTANCE_GROUP_SIZE): Remove.
	(_slp_instance::group_size): Likewise.
	* tree-vect-loop.c (vectorizable_reduction): The group size
	is the number of lanes in the node.
	* tree-vect-slp.c (vect_attempt_slp_rearrange_stmts): Likewise.
	(vect_analyze_slp_instance): Do not set SLP_INSTANCE_GROUP_SIZE,
	verify it matches the instance trees number of lanes.
	(vect_slp_analyze_node_operations_1): Use the numer of lanes
	in the node as group size.
	(vect_bb_vectorization_profitable_p): Use the instance root
	number of lanes for the size of life.
	(vect_schedule_slp_instance): Use the number of lanes as
	group_size.
	* tree-vect-stmts.c (vectorizable_load): Remove SLP instance
	parameter.  Use the number of lanes of the load for the group
	size in the gap adjustment code.
	(vect_analyze_stmt): Adjust.
	(vect_transform_stmt): Likewise.
2020-05-13 15:26:45 +02:00
Patrick Palka
9b56828c57
contrib/vimrc: Reduce textwidth for commit messages
* vimrc: Reduce textwidth to 72 for Git commit messages.
2020-05-13 14:58:50 +02:00
Martin Liska
e4f0e06b2f
Add default revisions argument for git_check_commit.py.
* gcc-changelog/git_check_commit.py: Add default argument HEAD
	for revisions and improve error message output.
2020-05-13 14:44:22 +02:00
Martin Liska
b8333fc6f8
Restore print_output syntax in git_commit.py.
* gcc-changelog/git_commit.py: Restore print_output syntax
	in git_commit.py.
2020-05-13 14:31:55 +02:00
Martin Liska
c10aa1f073
Add gcc-changelog related scripts.
* gcc-changelog/git_check_commit.py: New file.
	* gcc-changelog/git_commit.py: New file.
	* gcc-changelog/git_email.py: New file.
	* gcc-changelog/git_repository.py: New file.
	* gcc-changelog/git_update_version.py: New file.
2020-05-13 14:27:30 +02:00
Jakub Jelinek
18edc19544 Fix -fcompare-debug issue in purge_dead_edges [PR95080]
The following testcase fails with -fcompare-debug, the bug used to be latent
since introduction of -fcompare-debug.
The loop at the start of purge_dead_edges behaves differently between -g0
and -g - if the last insn is a DEBUG_INSN, then it skips not just
DEBUG_INSNs but also NOTEs until it finds some other real insn (or bb head),
while with -g0 it will not skip any NOTEs, so if we have
real_insn
note
debug_insn // not present with -g0
then with -g it might remove useless REG_EH_REGION from real_insn, while
with -g0 it will not.

Yet another option would be not skipping NOTE_P in the loop; I couldn't find
in history rationale for why it is done.

2020-05-13  Jakub Jelinek  <jakub@redhat.com>

	PR debug/95080
	* cfgrtl.c (purge_dead_edges): Skip over debug and note insns even
	if the last insn is a note.

	* g++.dg/opt/pr95080.C: New test.
2020-05-13 11:22:37 +02:00
Jakub Jelinek
c0c39a765b Fold single imm use of a FMA if it is a negation [PR95060]
match.pd already has simplifications for negation of a FMA (FMS, FNMA, FNMS)
call if it is single use, but when the widening_mul pass discovers FMAs,
nothing folds the statements anymore.

So, the following patch adjusts the widening_mul pass to handle that.

I had to adjust quite a lot of tests, because they have in them nested FMAs
(one FMA feeding another one) and the patch results in some (equivalent) changes
in the chosen instructions, previously the negation of one FMA's result
would result in the dependent FMA being adjusted for the negation, but now
instead the first FMA is adjusted.

2020-05-13  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/95060
	* tree-ssa-math-opts.c (convert_mult_to_fma_1): Fold a NEGATE_EXPR
	if it is the single use of the FMA internal builtin.

	* gcc.target/i386/avx512f-pr95060.c: New test.
	* gcc.target/i386/fma_double_1.c: Adjust expected insn counts.
	* gcc.target/i386/fma_double_2.c: Likewise.
	* gcc.target/i386/fma_double_3.c: Likewise.
	* gcc.target/i386/fma_double_4.c: Likewise.
	* gcc.target/i386/fma_double_5.c: Likewise.
	* gcc.target/i386/fma_double_6.c: Likewise.
	* gcc.target/i386/fma_float_1.c: Likewise.
	* gcc.target/i386/fma_float_2.c: Likewise.
	* gcc.target/i386/fma_float_3.c: Likewise.
	* gcc.target/i386/fma_float_4.c: Likewise.
	* gcc.target/i386/fma_float_5.c: Likewise.
	* gcc.target/i386/fma_float_6.c: Likewise.
	* gcc.target/i386/l_fma_double_1.c: Likewise.
	* gcc.target/i386/l_fma_double_2.c: Likewise.
	* gcc.target/i386/l_fma_double_3.c: Likewise.
	* gcc.target/i386/l_fma_double_4.c: Likewise.
	* gcc.target/i386/l_fma_double_5.c: Likewise.
	* gcc.target/i386/l_fma_double_6.c: Likewise.
	* gcc.target/i386/l_fma_float_1.c: Likewise.
	* gcc.target/i386/l_fma_float_2.c: Likewise.
	* gcc.target/i386/l_fma_float_3.c: Likewise.
	* gcc.target/i386/l_fma_float_4.c: Likewise.
	* gcc.target/i386/l_fma_float_5.c: Likewise.
	* gcc.target/i386/l_fma_float_6.c: Likewise.
2020-05-13 11:21:02 +02:00
Tobias Burnus
f884bef21c [Fortran] OpenMP - permit lastprivate in distribute + SIMD fixes (PR94690)
gcc/fortran/
2020-05-13  Tobias Burnus  <tobias@codesourcery.com>

	PR fortran/94690
        * openmp.c (OMP_DISTRIBUTE_CLAUSES): Add OMP_CLAUSE_LASTPRIVATE.
        (gfc_resolve_do_iterator): Skip the private handling for SIMD as
        that is handled by ME code.
	* trans-openmp.c (gfc_trans_omp_do): Don't add private/lastprivate
	for dovar_found == 0, unless !simple.

libgomp/
2020-05-13  Tobias Burnus  <tobias@codesourcery.com>

	PR fortran/94690
	* testsuite/libgomp.fortran/pr66199-3.f90: New.
	* testsuite/libgomp.fortran/pr66199-4.f90: New.
	* testsuite/libgomp.fortran/pr66199-5.f90: New.
	* testsuite/libgomp.fortran/pr66199-6.f90: New.
	* testsuite/libgomp.fortran/pr66199-7.f90: New.
	* testsuite/libgomp.fortran/pr66199-8.f90: New.
	* testsuite/libgomp.fortran/pr66199-9.f90: New.
2020-05-13 10:06:45 +02:00
Martin Liska
3d96f7b924
Simplify test-case options.
PR sanitizer/95051
	* gcc.dg/asan/pr95051.c: Simplify options as -fsanitize=address
	and -O2 were enough to trigger the original ICE.
2020-05-13 09:52:21 +02:00
Alexandre Oliva
883246530f x86-vxworks malloc aligns to 8 bytes like solaris
Vxworks 7's malloc, like Solaris', only ensures 8-byte alignment of
returned pointers on 32-bit x86, though GCC's stddef.h defines
max_align_t with 16-byte alignment for __float128.  This patch enables
on x86-vxworks the same memory_resource workaround used for x86-solaris.

The testsuite also had a workaround, defining BAD_MAX_ALIGN_T and
xfailing the test; extend those to x86-vxworks as well, and remove the
check for char-aligned requested allocation to be aligned like
max_align_t.  With that change, the test passes on x86-vxworks; I'm
guessing that's the same reason for the test not to pass on
x86-solaris (and on x86_64-solaris -m32), so with the fix, I'm
tentatively removing the xfail.


for libstdc++-v3/ChangeLog

	PR libstdc++/77691
	* include/experimental/memory_resource
	(__resource_adaptor_imp::do_allocate): Handle max_align_t on
	x86-vxworks as on x86-solaris.
	(__resource_adaptor_imp::do_deallocate): Likewise.
	* testsuite/experimental/memory_resource/new_delete_resource.cc:
	Drop xfail.
	(BAD_MAX_ALIGN_T): Define on x86-vxworks as on x86-solaris.
	(test03): Drop max-align test for char-aligned alloc.
2020-05-13 04:49:00 -03:00
Christophe Lyon
a7b7818f3d [PR 95013] Fix gcc.dg/unclosed-init.c
2020-05-13  Christophe Lyon  <christophe.lyon@linaro.org>

	PR preprocessor/95013
	* gcc.dg/unclosed-init.c: Add missing comment in dg-error.
2020-05-13 06:43:31 +00:00
Bin Cheng
f6e1a4cd83 Add missing unit dependence vector in data dependence analysis
Current data dependence analysis misses unit distant vector if DRs in
DDR have the same invariant access functions.  This adds the vector as
the constant access function case.

2020-05-13  Bin Cheng  <bin.cheng@linux.alibaba.com>
PR tree-optimization/94969

gcc/
    * tree-data-dependence.c (constant_access_functions): Rename to...
    (invariant_access_functions): ...this.  Add parameter.  Check for
    invariant access function, rather than constant.
    (build_classic_dist_vector): Call above function.
    * tree-loop-distribution.c (pg_add_dependence_edges): Add comment.

gcc/testsuite/
    * gcc.dg/tree-ssa/pr94969.c: New test.
2020-05-13 11:37:47 +08:00
liuhongt
0fec3f62b9 Document more x86 operand modifier.
Documents operand modifiers which are available in asm stmt but missing in document.

 | Modifier | Description | Available in asm stmt | Existed in documentation |
 | --- | --- | ------- | ----- |
 | L,W,B,Q,S,T | print the opcode suffix for specified size of operand. | Available | Not |
 | C | print opcode suffix for set/cmov insn. | Not | - |
 | c | like C, but print reversed condition | Not | - |
 | F,f | likewise, but for floating-point. | Not | - |
 | O | if HAVE_AS_IX86_CMOV_SUN_SYNTAX, expand to "w.", "l." or "q.", otherwise nothing | Not | - |
 | R | print embedded rounding and sae. | Available | Not |
 | r | print only sae. | Available | Not |
 | z | print the opcode suffix for the size of the current operand. | Available | Existed |
 | Z | likewise, with special suffixes for x87 instructions. | Availble | Not |
 | * | print a star (in certain assembler syntax) | Not | - |
 | A | print an absolute memory reference. | Available | Existed |
 | E | print address with DImode register names if TARGET_64BIT. | Available | Existed |
 | w | print the operand as if it's a "word" (HImode) even if it isn't. | Available | Existed |
 | s | print a shift double count, followed by the assemblers argument delimiter. | Available | Not |
 | b | print the QImode name of the register for the indicated operand %b0 would print %al if operands[0] is reg 0. | Available | Existed |
 | w | likewise, print the HImode name of the register. | Available | Existed |
 | k | likewise, print the SImode name of the register. | Available | Existed |
 | q | likewise, print the DImode name of the register. | Available | Existed |
 | x | likewise, print the V4SFmode name of the register. | Available | Not |
 | t | likewise, print the V8SFmode name of the register. | Available | Not |
 | g | likewise, print the V16SFmode name of the register. | Avaliable | Not |
 | h | print the QImode name for a "high" register, either ah, bh, ch or dh. | Available | Existed |
 | y | print "st(0)" instead of "st" as a register. | Available | Not |
 | d | print duplicated register operand for AVX instruction. | Available | Not |
 | D | print condition for SSE cmp instruction. | Not | - |
 | P | if PIC, print an @PLT suffix. | Available | Existed |
 | p | print raw symbol name. | Available | Existed |
 | X | don't print any sort of PIC '@' suffix for a symbol. | Not | - |
 | & | print some in-use local-dynamic symbol name. | Not | - |
 | H | print a memory address offset by 8; used for sse high-parts | Available | Existed |
 | Y | print condition for XOP pcom* instruction. | Not | - |
 | V | print naked full integer register name without %. | Available | Existed |
 | + | print a branch hint as 'cs' or 'ds' prefix | Not | - |
 | ; | print a semicolon (after prefixes due to bug in older gas). | Not | - |
 | ~ | print "i" if TARGET_AVX2, "f" otherwise. | Not | - |
 | ^ | print addr32 prefix if TARGET_64BIT and Pmode != word_mode | Not | - |
 | M | print addr32 prefix for TARGET_X32 with VSIB address. | Not | - |
 | ! | print NOTRACK prefix for jxx/call/ret instructions if required. | Not | - |
 | N | print maskz if it's constant 0 operand. | Available | Not |
 | I | print comparision predicate operand for sse cmp condition. | Not | - |

gcc/ChangeLog

	PR target/94118
	 * doc/extend.texi (x86Operandmodifiers): Document more x86
	 operand modifier.
	 * gcc/config/i386/i386.c: Add comment for operand modifier N
	 and I.

Modified-by: liuhongt <hongtao.liu@intel.com>
2020-05-13 10:14:57 +08:00
Giuliano Belinassi
9042fea972 Refactor tree-vrp.c
Refactor tree-vrp.c to eliminate all global variables except
'x_vrp_values', which will require that 'thread_outgoing_edges'
to accept an extra argument and pass it to the 'simplify' callback.

It also removes every access to 'cfun', retrieving the function being
compiled from the pass engine.

gcc/ChangeLog
2020-05-12  Giuliano Belinassi  <giuliano.belinassi@usp.br>

	* tree-vrp.c (class vrp_insert): New.
	(insert_range_assertions): Move to class vrp_insert.
	(dump_all_asserts): Same as above.
	(dump_asserts_for): Same as above.
	(live): Same as above.
	(need_assert_for): Same as above.
	(live_on_edge): Same as above.
	(finish_register_edge_assert_for): Same as above.
	(find_switch_asserts): Same as above.
	(find_assert_locations): Same as above.
	(find_assert_locations_1): Same as above.
	(find_conditional_asserts): Same as above.
	(process_assert_insertions): Same as above.
	(register_new_assert_for): Same as above.
	(vrp_prop): New variable fun.
	(vrp_initialize): New parameter.
	(identify_jump_threads): Same as above.
	(execute_vrp): Same as above.
2020-05-12 21:37:01 -03:00
GCC Administrator
0e6d007460 Daily bump. 2020-05-13 00:16:23 +00:00
Keith Packard
adce62f53d RISC-V: Make unique SECCAT_SRODATA names start with .srodata (not .sdata2)
default_unique_section uses ".sdata2" as a prefix for SECCAT_SRODATA
unique sections, but RISC-V uses ".srodata" instead. Override the
TARGET_ASM_UNIQUE_SECTION function to catch this case, allowing the
default to be used for all other sections.

Signed-off-by: Keith Packard <keithp@keithp.com>

	gcc/
	* config/riscv/riscv.c (riscv_unique_section): New.
	(TARGET_ASM_UNIQUE_SECTION): New.
2020-05-12 16:12:10 -07:00
Craig Blackmore
de6320a816 RISC-V: Add shorten_memrefs pass.
gcc/
	* config.gcc:  Add riscv-shorten-memrefs.o to extra_objs for riscv.
	* config/riscv/riscv-passes.def: New file.
	* config/riscv/riscv-protos.h (make_pass_shorten_memrefs): Declare.
	* config/riscv/riscv-shorten-memrefs.c: New file.
	* config/riscv/riscv.c (tree-pass.h): New include.
	(riscv_compressed_reg_p): New Function
	(riscv_compressed_lw_offset_p): Likewise.
	(riscv_compressed_lw_address_p): Likewise.
	(riscv_shorten_lw_offset): Likewise.
	(riscv_legitimize_address): Attempt to convert base + large_offset
	to compressible new_base + small_offset.
	(riscv_address_cost): Make anticipated compressed load/stores
	cheaper for code size than uncompressed load/stores.
	(riscv_register_priority): Move compressed register check to
	riscv_compressed_reg_p.
	* config/riscv/riscv.h (C_S_BITS): Define.
	(CSW_MAX_OFFSET): Define.
	* config/riscv/riscv.opt (mshorten-memefs): New option.
	* config/riscv/t-riscv (riscv-shorten-memrefs.o): New rule.
	(PASSES_EXTRA): Add riscv-passes.def.
	* doc/invoke.texi: Document -mshorten-memrefs.

	* config/riscv/riscv.c (riscv_new_address_profitable_p): New function.
	(TARGET_NEW_ADDRESS_PROFITABLE_P): Define.
	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in (TARGET_NEW_ADDRESS_PROFITABLE_P):  New hook.
	* sched-deps.c (attempt_change): Use old address if it is cheaper than
	new address.
	* target.def (new_address_profitable_p): New hook.
	* targhooks.c (default_new_address_profitable_p): New function.
	* targhooks.h (default_new_address_profitable_p): Declare.

	gcc/testsuite/
	* gcc.target/riscv/shorten-memrefs-1.c: New test.
	* gcc.target/riscv/shorten-memrefs-2.c: New test.
	* gcc.target/riscv/shorten-memrefs-3.c: New test.
	* gcc.target/riscv/shorten-memrefs-4.c: New test.
	* gcc.target/riscv/shorten-memrefs-5.c: New test.
	* gcc.target/riscv/shorten-memrefs-6.c: New test.
	* gcc.target/riscv/shorten-memrefs-7.c: New test.
2020-05-12 14:43:48 -07:00
Eric Botcazou
11dd3be56b Suppress warning for Interfaces.C with -fdump-ada-spec
The C/C++ bindings generated by means of -fdump-ada-spec always contain
with and use clauses for Interfaces.C, but they can be unused in some
cases so make sure to avoid warning about that.

	* c-ada-spec.c (dump_ads): Output pragma Warnings ("U"); on entry.
2020-05-12 22:42:17 +02:00
Nathan Sidwell
2a0225e478 preprocessor: EOF location is at end of file [PR95013]
My recent C++ parser change to pay attention to EOF location uncovered
a separate bug.  The preprocesor's EOF logic would set the EOF
location to be the beginning of the last line of text in the file --
not the 'line' after that, which contains no characters.  Mostly.
This fixes things so that when we attempt to read the last line of the
main file, we don't pop the buffer until the tokenizer has a chance to
create an EOF token with the correct location information.  It is then
responsible for popping the buffer.  As it happens, raw string literal
tokenizing contained a bug -- it would increment the line number
prematurely, because it cached buffer->cur in a local variable, but
checked buffer->cur before updating it to figure out if it was at end
of file.   We fix up that too.

The EOF token intentionally doesn't have a column number -- it's not a
position on a line, it's a non-existant line.

The testsuite churn is just correcting the EOF location diagnostics.

	libcpp/
	PR preprocessor/95013
	* lex.c (lex_raw_string): Process line notes before incrementing.
	Correct incrementing condition.  Adjust for new
	_cpp_get_fresh_line EOF behaviour.
	(_cpp_get_fresh_line): Do not pop buffer at EOF, increment line
	instead.
	(_cpp_lex_direct): Adjust for new _cpp_get_fresh_line behaviour.
	(cpp_directive_only_process): Assert we got a fresh line.
	* traditional.c (_cpp_read_logical_line_trad): Adjust for new
	_cpp_get_fresh_line behaviour.

	gcc/testsuite/
	* c-c++-common/goacc/pr79428-1.c: Adjust EOF diagnostic location.
	* c-c++-common/gomp/pr79428-2.c: Likewise.
	* g++.dg/cpp0x/decltype63.C: Likewise.
	* g++.dg/cpp0x/gen-attrs-64.C: Likewise.
	* g++.dg/cpp0x/pr68726.C: Likewise.
	* g++.dg/cpp0x/pr78341.C: Likewise.
	* g++.dg/cpp1y/pr65202.C: Likewise.
	* g++.dg/cpp1y/pr65340.C: Likewise.
	* g++.dg/cpp1y/pr68578.C: Likewise.
	* g++.dg/cpp1z/class-deduction44.C: Likewise.
	* g++.dg/diagnostic/unclosed-extern-c.C: Likewise.
	* g++.dg/diagnostic/unclosed-function.C: Likewise.
	* g++.dg/diagnostic/unclosed-namespace.C: Likewise.
	* g++.dg/diagnostic/unclosed-struct.C: Likewise.
	* g++.dg/ext/pr84598.C: Likewise.
	* g++.dg/other/switch4.C: Likewise.
	* g++.dg/parse/attr4.C: Likewise.
	* g++.dg/parse/cond4.C: Likewise.
	* g++.dg/parse/crash10.C: Likewise.
	* g++.dg/parse/crash18.C: Likewise.
	* g++.dg/parse/crash27.C: Likewise.
	* g++.dg/parse/crash34.C: Likewise.
	* g++.dg/parse/crash35.C: Likewise.
	* g++.dg/parse/crash52.C: Likewise.
	* g++.dg/parse/crash59.C: Likewise.
	* g++.dg/parse/crash61.C: Likewise.
	* g++.dg/parse/crash67.C: Likewise.
	* g++.dg/parse/error14.C: Likewise.
	* g++.dg/parse/error56.C: Likewise.
	* g++.dg/parse/invalid1.C: Likewise.
	* g++.dg/parse/parameter-declaration-1.C: Likewise.
	* g++.dg/parse/parser-pr28152-2.C: Likewise.
	* g++.dg/parse/parser-pr28152.C: Likewise.
	* g++.dg/parse/pr68722.C: Likewise.
	* g++.dg/pr46852.C: Likewise.
	* g++.dg/pr46868.C: Likewise.
	* g++.dg/template/crash115.C: Likewise.
	* g++.dg/template/crash43.C: Likewise.
	* g++.dg/template/crash90.C: Likewise.
	* g++.dg/template/error-recovery1.C: Likewise.
	* g++.dg/template/error57.C: Likewise.
	* g++.old-deja/g++.other/crash31.C: Likewise.
	* gcc.dg/empty-source-2.c: Likewise.
	* gcc.dg/empty-source-3.c: Likewise.
	* gcc.dg/noncompile/pr30552-3.c: Likewise.
	* gcc.dg/noncompile/pr35447-1.c: Likewise.
	* gcc.dg/pr20245-1.c: Likewise.
	* gcc.dg/pr28419.c: Likewise.
	* gcc.dg/rtl/truncated-rtl-file.c: Likewise.
	* gcc.dg/unclosed-init.c: Likewise.
	* obj-c++.dg/property/property-neg-6.mm: Likewise.
	* obj-c++.dg/syntax-error-10.mm: Likewise.
	* obj-c++.dg/syntax-error-8.mm: Likewise.
	* obj-c++.dg/syntax-error-9.mm: Likewise.
2020-05-12 13:40:29 -07:00
Eric Botcazou
27c3d986c4 Be prepared for more aggregates in gigi
This makes sure that gigi is prepared to handle more aggregates in the
special memset code path.

	* sem_aggr.ads (Is_Single_Aggregate): New function.
	* sem_aggr.adb (Is_Others_Aggregate): Use local variable.
	(Is_Single_Aggregate): New function to recognize an aggregate with
	a single association containing a single choice.
	* fe.h (Is_Others_Aggregate): Delete.
	(Is_Single_Aggregate): New declaration.
	* gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Call
	Is_Single_Aggregate instead of Is_Others_Aggregate.
2020-05-12 22:35:55 +02:00
Marek Polacek
90b160f8ec c++: Function found via ADL when it should not [PR95074]
I noticed that we don't implement [basic.lookup.argdep]/3: quite correctly;
it says "If X (the lookup set produced by unqualified lookup) contains
-- a block-scope function declaration that is not a using-declaration
[...]
then Y (the lookup set produced by ADL) is empty."
but we were still performing ADL in fn1 in the attached test.  The
problem was that we were only looking at the first function in the
overload set which in this case happened to be a using-declaration, and
those don't suppress ADL.  We have to look through the whole set to find
out if unqualified lookup found a block-scope function declaration, or
a member function declaration.

	PR c++/95074
	* parser.c (cp_parser_postfix_expression) <case CPP_OPEN_PAREN>: When
	looking for a block-scope function declaration, look through the whole
	set, not just the first function in the overload set.

	* g++.dg/lookup/koenig15.C: New test.
2020-05-12 16:25:51 -04:00
Jakub Jelinek
ac627eb416 testsuite: Fix up gcc.dg/asan/pr95051.c testcase [PR95051]
asan.exp adds -fsanitize=address which is incompatible with -fsanitize=kernel-address,
so we need to disable it first.

2020-05-12  Jakub Jelinek  <jakub@redhat.com>

	PR sanitizer/95051
	* gcc.dg/asan/pr95051.c: Add -fno-sanitize=all to dg-options.
2020-05-12 21:21:30 +02:00
Nathan Sidwell
f0de5d83ee Fix throw specifiers on interface.
I discovered that libitm:
(a) declares __cxa_allocate_exception and friends directly,
(b) doesn't mark them as 'throw()'
(c) doesn't mark the replacment fns _ITM_$foo as nothrow either

We happen to get away with it because of code in the compiler that,
although it checks the parameter types, doesn't check the exception
specification.  (One reason being they used to not be part of the
language's type system, but now they are.)  I suspect this can lead us
to generate pessimal code later, if we've seen one of these decls
earlier.  Anyway, with modules it becomes trickier[*], so I'm trying
to clean it up and not be a problem.  I see Jakub fixed part of the
problem
(https://gcc.gnu.org/pipermail/gcc-patches/2018-December/513302.html)
AFAICT, he did fix libitm's decls, but left the lax parm-type checking
in the compiler.

libitm.h is not very informative about specification:
  in version 1 of http://www.intel.com/some/path/here.pdf.  */

Anyway, it was too fiddly to have libitm pick up the declarations from
libsupc++.  Besides it makes them weak declarations, and then provides
definitions for non-elf systems.  So this patch adds the expected
'throw()'

	* libitm/libitm.h (_ITM_NOTHROW): Define.
	(_ITM_cxa_allocate_exception, _ITM_cxa_free_exception)
	(_ITM_cxa_begin_catch): Use it.
	* eh_cpp.cc: Add throw() to __cxa_allocate_exception,
	__cxa_free_exception, __cxa_begin_catch, __cxa_tm_cleanup,
	__cxa_get_globals.
	(_ITM_cxa_allocate_exception, _ITM_cxa_free_exception)
	(_ITM_cxa_begin_catch): Likewise.
2020-05-12 10:54:53 -07:00
H.J. Lu
d17cdc17c9 Enable CET in cross compiler if possible
Don't perform CET run-time check for host when cross compiling.  Instead,
enable CET in cross compiler if possible so that it will run on both CET
and non-CET hosts.

config/

	PR bootstrap/94998
	* cet.m4 (GCC_CET_HOST_FLAGS): Enable CET in cross compiler if
	possible.

libiberty/

	PR bootstrap/94998
	* configure: Regenerated.

lto-plugin/

	PR bootstrap/94998
	* configure: Regenerated.
2020-05-12 10:39:54 -07:00
Uros Bizjak
8a6790fb4e i386: Add V2SFmode copysign, xorsign and signbit expanders [PR95046]
gcc/ChangeLog:

	PR target/95046
	* config/i386/mmx.md (copysignv2sf3): New expander.
	(xorsignv2sf3): Ditto.
	(signbitv2sf3): Ditto.

testsuite/ChangeLog:

	PR target/95046
	* gcc.target/i386/pr95046-4.c: New test.
2020-05-12 19:24:53 +02:00
Uros Bizjak
955b1f9299 i386: Add V2SFmode FMA insn patterns [PR95046]
gcc/ChangeLog:

	PR target/95046
	* config/i386/mmx.md (fmav2sf4): New insn pattern.
	(fmsv2sf4): Ditto.
	(fnmav2sf4): Ditto.
	(fnmsv2sf4): Ditto.

testsuite/ChangeLog:

	PR target/95046
	* gcc.target/i386/pr95046-3.c: New test.
2020-05-12 18:37:40 +02:00
Patrick Palka
fa31a3cdbf c++: Add abbreviated fn template test for [PR78752]
This adds an abbreviated function template version of the testcase in
PR78752, which seems to already be fixed.

gcc/testsuite/ChangeLog:

	PR c++/78752
	* g++.dg/cpp2a/concepts-pr78752-2.C: New test.
2020-05-12 12:35:36 -04:00
H.J. Lu
c08278701f zlib: Add --enable-cet to configure
When --enable-cet is used to configure GCC, enable Intel CET in target
zlib.

	* Makefile.am (AM_CFLAGS): New.
	* configure.ac (CET_FLAGS): Add GCC_CET_FLAGS and AC_SUBST.
	* Makefile.in: Regenerated.
	* aclocal.m4: Likewise.
	* configure.ac: Likewise.
2020-05-12 09:27:35 -07:00
H.J. Lu
d214864835 libbacktrace: Enable Intel CET on Intel CET enabled host for jit
Since on Intel CET enabled host, dlopen in Intel CET enabled applications
fails on shared libraries which aren't Intel CET enabled, compile with
-fcf-protection on Intel CET enabled host when jit is enabled to enable
Intel CET on libgccjit.

	* Makefile.am (AM_CFLAGS): Add $(CET_HOST_FLAGS).
	* configure.ac: Add GCC_CET_HOST_FLAGS(CET_HOST_FLAGS) and
	AC_SUBST(CET_HOST_FLAGS).  Clear CET_HOST_FLAGS if jit isn't
	enabled.
	* Makefile.in: Regenerated.
	* configure: Likewise.
2020-05-12 09:24:09 -07:00
H.J. Lu
b3d16040fe libdecnumber: Enable Intel CET on Intel CET enabled host for jit
Since on Intel CET enabled host, dlopen in Intel CET enabled applications
fails on shared libraries which aren't Intel CET enabled, compile with
-fcf-protection on Intel CET enabled host when jit is enabled to enable
Intel CET on libgccjit.

	* Makefile.in (CET_HOST_FLAGS): New.
	(COMPILER): Add $(CET_HOST_FLAGS).
	* configure.ac: Add GCC_CET_HOST_FLAGS(CET_HOST_FLAGS) and
	AC_SUBST(CET_HOST_FLAGS).  Clear CET_HOST_FLAGS if jit isn't
	enabled.
	* aclocal.m4: Regenerated.
	* configure: Likewise.
2020-05-12 09:19:28 -07:00
H.J. Lu
051da74259 libcpp: Enable Intel CET on Intel CET enabled host for jit
Since on Intel CET enabled host, dlopen in Intel CET enabled applications
fails on shared libraries which aren't Intel CET enabled, compile with
-fcf-protection on Intel CET enabled host when jit is enabled to enable
Intel CET on libgccjit.

	* Makefile.in (CET_HOST_FLAGS): New.
	(COMPILER): Add $(CET_HOST_FLAGS).
	* configure.ac: Add GCC_CET_HOST_FLAGS(CET_HOST_FLAGS) and
	AC_SUBST(CET_HOST_FLAGS).  Clear CET_HOST_FLAGS if jit isn't
	enabled.
	* aclocal.m4: Regenerated.
	* configure: Likewise.
2020-05-12 09:17:45 -07:00
H.J. Lu
7e9c5bb0fd gcc: Enable Intel CET on Intel CET enabled host for jit
Since on Intel CET enabled host, dlopen in Intel CET enabled applications
fails on shared libraries which aren't Intel CET enabled, compile with
-fcf-protection on Intel CET enabled host when jit is enabled to enable
Intel CET on libgccjit.

	* Makefile.in (CET_HOST_FLAGS): New.
	(COMPILER): Add $(CET_HOST_FLAGS).
	* configure.ac: Add GCC_CET_HOST_FLAGS(CET_HOST_FLAGS) and
	AC_SUBST(CET_HOST_FLAGS).  Clear CET_HOST_FLAGS if jit isn't
	enabled.
	* aclocal.m4: Regenerated.
	* configure: Likewise.
2020-05-12 09:14:52 -07:00
H.J. Lu
af3bef0ea2 libcc1: Enable Intel CET on Intel CET enabled host
Since on Intel CET enabled host, dlopen in Intel CET enabled applications
fails on shared libraries which aren't Intel CET enabled, enable Intel
CET in libcc1 on Intel CET enabled host.

	* Makefile.am (AM_CXXFLAGS): Add $(CET_HOST_FLAGS).
	* configure.ac: Add GCC_CET_HOST_FLAGS(CET_HOST_FLAGS) and
	AC_SUBST(CET_HOST_FLAGS).
	* Makefile.in: Regenerated.
	* aclocal.m4: Likewise.
	* configure: Likewise.
2020-05-12 09:12:37 -07:00
Uros Bizjak
2a2dea6b63 i386: Add V2SFmode NEG, ABS and logic insn patterns [PR95046]
gcc/ChangeLog:

	PR target/95046
	* config/i386/mmx.md (<code>v2sf2): New insn pattern.
	(*mmx_<code>v2sf2): New insn_and_split pattern.
	(*mmx_nabsv2sf2): Ditto.
	(*mmx_andnotv2sf3): New insn pattern.
	(*mmx_<code>v2sf3): Ditto.
	* config/i386/i386.md (absneg_op): New code attribute.
	* config/i386/i386.c (ix86_build_const_vector): Handle V2SFmode.
	(ix86_build_signbit_mask): Ditto.

testsuite/ChangeLog:

	PR target/95046
	* gcc.target/i386/pr95046-2.c: New test.
2020-05-12 17:08:03 +02:00
Uros Bizjak
6416f67273 i386: Add V2SFmode NEG, ABS and logic insn patterns [PR95046]
gcc/ChangeLog:

	PR target/95046
	* config/i386/mmx.md (<code>v2sf2): New insn pattern.
	(*mmx_<code>v2sf2): New insn_and_split pattern.
	(*mmx_nabsv2sf2): Ditto.
	(*mmx_andnotv2sf3): New insn pattern.
	(*mmx_<code>v2sf3): Ditto.
	* config/i386/i386.md (absneg_op): New code attribute.
	* config/i386/i386.c (ix86_build_const_vector): Handle V2SFmode.
	(ix86_build_signbit_mask): Ditto.

testsuite/ChangeLog:

	PR target/95046
	* gcc.target/i386/pr95046-2.c: New test.
2020-05-12 17:06:13 +02:00