Commit Graph

162043 Commits

Author SHA1 Message Date
Ed Schonberg
41610f1511 [Ada] Strengthen checks for instantiation with interface types
2018-05-25  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_ch12.adb (Instance_Exists): New function, subsidiary of
	Validate_Derived_Type_Instance, to verify that all interfaces
	implemented by the formal type are also implemented by the actual. The
	verification is complicated when an interface of the formal is declared
	in a generic unit and the actual is declared in an instance of it.
	There is currently no mechanism to relate an interface declared within
	a generic to the corresponding interface in an instance, so we must
	traverse the list of interfaces of the actual, looking for a name
	match, and verifying that that interface is declared in an instance.

From-SVN: r260726
2018-05-25 09:03:59 +00:00
Piotr Trojanek
9da8032d4b [Ada] Rewrite Iterate_Call_Parameters in more assertive style
The formal and actual parameters in a subprogram call must match each other.
This is now checked with assertion (so that we can detect possible mistakes),
while the production builds have less work to do. Semantics unchanged.

2018-05-25  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* sem_util.adb (Iterate_Call_Parameters): Rewrite with extra
	assertions; replace function versions of Next_Formal/Next_Actual with
	their procedural versions (which are more concise).

From-SVN: r260725
2018-05-25 09:03:54 +00:00
Doug Rupp
5865218e3b [Ada] Make Max_Sensible_Delay uniform across all Posix targets
For instance: 6 months where Duration is 64bits.  Heretofore LynxOS was unique
in having an approximately 12 days max delay. By experimentation the actual
maximum was determined and all relevant delay and sleep procedures rewritten to
incrementally wait if necessary.

2018-05-25  Doug Rupp  <rupp@adacore.com>

gcc/ada/

	* libgnarl/s-osinte__aix.ads, libgnarl/s-osinte__android.ads,
	libgnarl/s-osinte__darwin.ads, libgnarl/s-osinte__freebsd.ads,
	libgnarl/s-osinte__hpux.ads, libgnarl/s-osinte__kfreebsd-gnu.ads,
	libgnarl/s-osinte__linux.ads, libgnarl/s-osinte__lynxos178e.ads,
	libgnarl/s-osinte__qnx.ads, libgnarl/s-osinte__rtems.ads
	(Relative_Timed_Wait): Remove.
	* libgnarl/s-tpopmo.adb (Timed_Sleep, Timed_Delay): Rewrite to allow
	for incremental looping. Remove references to Rel_Time and
	Relative_Timed_Wait.
	* libgnat/s-osprim__posix.adb, libgnat/s-osprim__posix2008.adb
	(Timed_Delay): Make separate.
	* libgnat/s-optide.adb: New separate procedure.
	* libgnat/s-osprim.ads (Max_System_Delay): New constant.
	* libgnat/s-osprim__lynxos.ads (Max_Sensible_Delay): Set to 6 months.
	(Max_System_Delay): New constant.

From-SVN: r260724
2018-05-25 09:03:47 +00:00
Ed Schonberg
a036d1de57 [Ada] Checks on instantiations with formal derived types with interfaces
This patch implements the rule stated in RM 12.5.5 : the actual shall be
a descendant of very progenitor of the formal type.

2018-05-25  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_ch12.adb (Validate_Derived_Type_Instance): Verify that the actual
	for a formal derived type implements all the interfaces declared for
	the formal.

gcc/testsuite/

	* gnat.dg/interface6.adb: New testcase.

From-SVN: r260723
2018-05-25 09:03:41 +00:00
Yannick Moy
1f233db374 [Ada] Fix handling of Loop_Entry for CodePeer/SPARK
When the applicable Assertion_Policy is Ignore for a pragma containing
an occurrence of attribute Loop_Entry, CodePeer and SPARK should still be
able to analyze the corresponding pragma. GNAT frontend was wrongly
translating X'Loop_Entry as X in the AST, as a side-effect of an
optimization only valid for compilation and not for static analysis.

This has no effect on compilation.

2018-05-25  Yannick Moy  <moy@adacore.com>

gcc/ada/

	* sem_prag.adb (Check_Applicable_Policy): Deal specially with CodePeer
	and GNATprove modes when applicable policy is Ignore.

From-SVN: r260722
2018-05-25 09:03:34 +00:00
Eric Botcazou
0d0cd28165 [Ada] Support for C99 and C++ standard boolean types
This change the type Interfaces.C.Extensions.bool to be fully compatible
with the C99 and C++ standard boolean types by making it a fully-fledged
boolean type with convention C.

The following C+Ada program must compile quietly in LTO mode:

bool b;

struct S {};

bool foo (struct S *s) { return true; }

pragma Ada_2005;
pragma Style_Checks (Off);

with Interfaces.C; use Interfaces.C;
with Interfaces.C.Extensions;

package t_c is

   b : aliased Extensions.bool;  -- t.c:3
   pragma Import (C, b, "b");

   type S is record
      null;
   end record;
   pragma Convention (C_Pass_By_Copy, S);  -- t.c:5

   function foo (the_s : access S) return Extensions.bool;  -- t.c:7
   pragma Import (C, foo, "foo");

end t_c;

with t_c; use t_c;

procedure P_C is

  Dummy : aliased S;

begin
  b := foo (Dummy'Access);
end;

2018-05-25  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* freeze.adb (Freeze_Enumeration_Type): Do not give integer size to a
	boolean type with convention C.
	* libgnat/i-cexten.ads (bool): Change to boolean with convention C.
	* gcc-interface/decl.c (gnat_to_gnu_entity): Add new local variable
	FOREIGN and use it throughout the function.
	<E_Enumeration_Type>: Set precision 1 on boolean types with foreign
	convention.
	<E_Enumeration_Subtype>: Likewise for subtypes.
	<E_Record_Type>: Force the size of a storage unit on empty classes.
	* gcc-interface/utils.c (make_type_from_size) <BOOLEAN_TYPE>: Skip
	boolean types with precision 1 if the size is the expected one.

From-SVN: r260721
2018-05-25 09:03:29 +00:00
Arnaud Charlet
28e3372094 [Ada] Do not print non ASCII characters in debug routines
2018-05-25  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* pprint.adb (Expression_Name): Do not print non ASCII characters.

From-SVN: r260720
2018-05-25 09:03:24 +00:00
Bob Duff
5a7aacd180 [Ada] Unbounded strings: inline Initialize and Adjust
Procedures Initialize and Adjust in the Ada.[Wide_[Wide_]]Strings.Unbounded
package are now inlined for nondispatching calls. No test available (efficiency
issue only).

2018-05-25  Bob Duff  <duff@adacore.com>

gcc/ada/

	* libgnat/a-strunb__shared.ads, libgnat/a-stwiun__shared.ads,
	libgnat/a-stzunb__shared.ads: (Initialize, Adjust): Add pragma Inline.

From-SVN: r260719
2018-05-25 09:03:19 +00:00
Bob Duff
6b5eb7d7d4 [Ada] Minor comment fix
2018-05-25  Bob Duff  <duff@adacore.com>

gcc/ada/

	* sem_util.ads: Minor comment fix.

From-SVN: r260718
2018-05-25 09:03:14 +00:00
Ed Schonberg
5fe0b8c32c [Ada] Refine checks for uplevel references
2018-05-25  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* exp_unst.adb (Visit_Node): Restrict check for uplevel references in
	prefixes of array attributes, to prefixes that are entity names whose
	type is constrained.
	(Note_Uplevel_Bound): Verify that the bound is declared in an enclosing
	subprogram, as itype created for loops in pre/postcondition may appear
	in loops at the library level.

From-SVN: r260717
2018-05-25 09:03:09 +00:00
Ed Schonberg
8218cfde96 [Ada] Compiler loop on expression function and predicate in generic unit
This patch fixes an infinite loop in the compiler when analyzing an
expression function whose expression mentions a subtype with a static
predicate, and the context is a generic unit.

2018-05-25  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_ch13.adb (Build_Predicate_Functions): The predicate function
	declaration is inserted into the tree and analyzed at that point, so
	should not be reinserted when the body is constructed. Inside a
	generic, ensure that the body is not inserted twice in the tree.

gcc/testsuite/

	* gnat.dg/static_pred1.adb, gnat.dg/static_pred1.ads: New testcase.

From-SVN: r260716
2018-05-25 09:03:04 +00:00
Yannick Moy
56ce7e4aa9 [Ada] Detect misplaced assertions between loop invariants
Loop invariants and loop variants should all be colocated, as defined in
SPARK RM 5.5.3(8). The code checking that rule was incorrectly accepting
pragma Assert between two loop invariants. Now fixed.

2018-05-25  Yannick Moy  <moy@adacore.com>

gcc/ada/

	* sem_prag.adb (Check_Grouping): Modify test to ignore statements and
	declarations not coming from source.

From-SVN: r260715
2018-05-25 09:02:58 +00:00
Fedor Rybin
5c737a562b [Ada] Document new switch --copy-environment for gnattest
2018-05-25  Fedor Rybin  <frybin@adacore.com>

gcc/ada/

	* doc/gnat_ugn/gnat_utility_programs.rst: Document new switch
	--copy-environment for gnattest.

From-SVN: r260714
2018-05-25 09:02:53 +00:00
Richard Sandiford
6c4fd4a9fe Add IFN_COND_{MUL,DIV,MOD,RDIV}
This patch adds support for conditional multiplication and division.
It's mostly mechanical, but a few notes:

* The *_optab name and the .md names are the same as the unconditional
  forms, just with "cond_" added to the front.  This means we still
  have the awkward difference between sdiv and div, etc.

* It was easier to retain the difference between integer and FP
  division in the function names, given that they map to different
  tree codes (TRUNC_DIV_EXPR and RDIV_EXPR).

* SVE has no direct support for IFN_COND_MOD, but it seemed more
  consistent to add it anyway.

* Adding IFN_COND_MUL enables an extra fully-masked reduction
  in gcc.dg/vect/pr53773.c.

* In practice we don't actually use the integer division forms without
  if-conversion support (added by a later patch).

2018-05-25  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* doc/sourcebuild.texi (vect_double_cond_arith): Include
	multiplication and division.
	* doc/md.texi (cond_mul@var{m}, cond_div@var{m}, cond_mod@var{m})
	(cond_udiv@var{m}, cond_umod@var{m}): Document.
	* optabs.def (cond_smul_optab, cond_sdiv_optab, cond_smod_optab)
	(cond_udiv_optab, cond_umod_optab): New optabs.
	* internal-fn.def (IFN_COND_MUL, IFN_COND_DIV, IFN_COND_MOD)
	(IFN_COND_RDIV): New internal functions.
	* internal-fn.c (get_conditional_internal_fn): Handle TRUNC_DIV_EXPR,
	TRUNC_MOD_EXPR and RDIV_EXPR.
	* match.pd (UNCOND_BINARY, COND_BINARY): Handle them.
	* config/aarch64/iterators.md (UNSPEC_COND_MUL, UNSPEC_COND_DIV):
	New unspecs.
	(SVE_INT_BINARY): Include mult.
	(SVE_COND_FP_BINARY): Include UNSPEC_MUL and UNSPEC_DIV.
	(optab, sve_int_op): Handle mult.
	(optab, sve_fp_op, commutative): Handle UNSPEC_COND_MUL and
	UNSPEC_COND_DIV.
	* config/aarch64/aarch64-sve.md (cond_<optab><mode>): New pattern
	for SVE_INT_BINARY_SD.

gcc/testsuite/
	* lib/target-supports.exp
	(check_effective_target_vect_double_cond_arith): Include
	multiplication and division.
	* gcc.dg/vect/pr53773.c: Do not expect a scalar tail when using
	fully-masked loops with a fixed vector length.
	* gcc.dg/vect/vect-cond-arith-1.c: Add multiplication and division
	tests.
	* gcc.target/aarch64/sve/vcond_8.c: Likewise.
	* gcc.target/aarch64/sve/vcond_9.c: Likewise.
	* gcc.target/aarch64/sve/vcond_12.c: Add multiplication tests.

From-SVN: r260713
2018-05-25 08:53:15 +00:00
Richard Sandiford
c38f73190b [AArch64] Add SVE support for integer division
After the previous patch to prevent pessimisation of divisions
by constants, this patch adds support for the SVE integer division
instructions.

2018-05-25  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* config/aarch64/iterators.md (SVE_INT_BINARY_SD): New code iterator.
	(optab, sve_int_op): Handle div and udiv.
	* config/aarch64/aarch64-sve.md (<optab><mode>3): New expander
	for SVE_INT_BINARY_SD.
	(*<optab><mode>3): New insn for the same.

gcc/testsuite/
	* gcc.target/aarch64/sve/div_1.c: New test.
	* gcc.target/aarch64/sve/div_1_run.c: Likewise.
	* gcc.target/aarch64/sve/mul_highpart_2.c: Likewise.
	* gcc.target/aarch64/sve/mul_highpart_2_run.c: Likewise.

From-SVN: r260712
2018-05-25 08:38:12 +00:00
Richard Sandiford
8f76f37786 Prefer open-coding vector integer division
vect_recog_divmod_pattern currently bails out if the target has
native support for integer division, but I think in practice
it's always going to be better to open-code it anyway, just as
we usually open-code scalar divisions by constants.

I think the only currently affected targets are MIPS MSA and
powerpcspe (which is currently marked obsolete).  For:

  void
  foo (int *x)
  {
    for (int i = 0; i < 100; ++i)
      x[i] /= 2;
  }

the MSA port previously preferred to use division for powers of 2:

        .set    noreorder
        bnz.w   $w1,1f
        div_s.w $w0,$w0,$w1
        break   7
        .set    reorder
1:

(or just the div_s.w for -mno-check-zero-division), but after the patch
it open-codes them using shifts:

        clt_s.w $w1,$w0,$w2
        subv.w  $w0,$w0,$w1
        srai.w  $w0,$w0,1

MSA doesn't define a high-part pattern, so it still uses a division
instruction for the non-power-of-2 case.

Richard B pointed out that this would disable SLP of division by
different amounts, but I think in practice that's a price worth paying,
since the current cost model can't really tell whether using a general
vector division is better than using open-coded scalar divisions.
The fix would be either to support SLP of mixed open-coded divisions
or to improve the cost model and try SLP again without the patterns.
The patch adds an XFAILed test for this.

2018-05-23  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* tree-vect-patterns.c: Include predict.h.
	(vect_recog_divmod_pattern): Restrict check for division support
	to when optimizing for size.

gcc/testsuite/
	* gcc.dg/vect/bb-slp-div-1.c: New XFAILed test.

From-SVN: r260711
2018-05-25 08:18:42 +00:00
Richard Sandiford
0d2b3bca81 Fold VEC_COND_EXPRs to IFN_COND_* where possible
This patch adds the folds:

  (vec_cond COND (foo A B) C) -> (IFN_COND_FOO COND A B C)
  (vec_cond COND C (foo A B)) -> (IFN_COND_FOO (!COND) A B C)

with the usual implicit restriction that the target must support
the produced IFN_COND_FOO.

The results of these folds don't have identical semantics, since
the reverse transform would be invalid if (FOO A[i] B[i]) faults when
COND[i] is false.  But this direction is OK since we're simply dropping
faults for operations whose results aren't needed.

The new gimple_resimplify4 doesn't try to do any constant folding
on the IFN_COND_*s.  This is because a later patch will handle it
by folding the associated unconditional operation.

Doing this in gimple is better than doing it in .md patterns,
since the second form (with the inverted condition) is much more
common than the first, and it's better to fold away the inversion
in gimple and optimise the result before entering expand.

2018-05-24  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* doc/sourcebuild.texi (vect_double_cond_arith: Document.
	* gimple-match.h (gimple_match_op::MAX_NUM_OPS): Bump to 4.
	(gimple_match_op::gimple_match_op): Add an overload for 4 operands.
	(gimple_match_op::set_op): Likewise.
	(gimple_resimplify4): Declare.
	* genmatch.c (get_operand_type): Handle CFN_COND_* functions.
	(expr::gen_transform): Likewise.
	(decision_tree::gen): Generate a simplification routine for 4 operands.
	* gimple-match-head.c (gimple_simplify): Add an overload for
	4 operands.  In the top-level function, handle up to 4 call
	arguments and call gimple_resimplify4.
	(gimple_resimplify4): New function.
	(build_call_internal): Pass a fourth operand.
	(maybe_push_to_seq): Likewise.
	* match.pd (UNCOND_BINARY, COND_BINARY): New operator lists.
	Fold VEC_COND_EXPRs of an operation and a default value into
	an IFN_COND_* function if possible.
	* config/aarch64/iterators.md (UNSPEC_COND_MAX, UNSPEC_COND_MIN):
	New unspecs.
	(SVE_COND_FP_BINARY): Include them.
	(optab, sve_fp_op): Handle them.
	(SVE_INT_BINARY_REV): New code iterator.
	(SVE_COND_FP_BINARY_REV): New int iterator.
	(commutative): New int attribute.
	* config/aarch64/aarch64-protos.h (aarch64_sve_prepare_conditional_op):
	Declare.
	* config/aarch64/aarch64.c (aarch64_sve_prepare_conditional_op): New
	function.
	* config/aarch64/aarch64-sve.md (cond_<optab><mode>): Use it.
	(*cond_<optab><mode>): New patterns for reversed operands.

gcc/testsuite/
	* lib/target-supports.exp
	(check_effective_target_vect_double_cond_arith): New proc.
	* gcc.dg/vect/vect-cond-arith-1.c: New test.
	* gcc.target/aarch64/sve/vcond_8.c: Likewise.
	* gcc.target/aarch64/sve/vcond_8_run.c: Likewise.
	* gcc.target/aarch64/sve/vcond_9.c: Likewise.
	* gcc.target/aarch64/sve/vcond_9_run.c: Likewise.
	* gcc.target/aarch64/sve/vcond_12.c: Likewise.
	* gcc.target/aarch64/sve/vcond_12_run.c: Likewise.

From-SVN: r260710
2018-05-25 08:09:39 +00:00
Richard Biener
2c53b149b7 tree-vectorizer.h (STMT_VINFO_GROUP_*, GROUP_*): Remove.
2018-05-25  Richard Biener  <rguenther@suse.de>

	* tree-vectorizer.h (STMT_VINFO_GROUP_*, GROUP_*): Remove.
	(DR_GROUP_*): New, assert we have non-NULL ->data_ref_info.
	(REDUC_GROUP_*): New, assert we have NULL ->data_ref_info.
	(STMT_VINFO_GROUPED_ACCESS): Adjust.
	* tree-vect-data-refs.c (everywhere): Adjust users.
	* tree-vect-loop.c (everywhere): Likewise.
	* tree-vect-slp.c (everywhere): Likewise.
	* tree-vect-stmts.c (everywhere): Likewise.
	* tree-vect-patterns.c (vect_reassociating_reduction_p): Likewise.

From-SVN: r260709
2018-05-25 08:08:21 +00:00
Rainer Orth
f8d704048f Support SHF_EXCLUDE on non-x86 and with Solaris as
* configure.ac (gcc_cv_as_section_has_e): Move to common section.
	Rename to...
	(gcc_cv_as_section_exclude): ... this.
	Try Solaris as #exclude syntax.
	* configure: Regenerate.
	* config.in: Regenerate.
	* config/i386/i386.c (i386_solaris_elf_named_section): Handle
	SECTION_EXCLUDE.
	* config/sparc/sparc.c (sparc_solaris_elf_asm_named_section)
	[HAVE_GAS_SECTION_EXCLUDE]: Handle SECTION_EXCLUDE.

	* varasm.c (default_elf_asm_named_section): Don't check if
	HAVE_GAS_SECTION_EXCLUDE is defined.

From-SVN: r260708
2018-05-25 07:57:10 +00:00
Richard Sandiford
9d4ac06e02 Add an "else" argument to IFN_COND_* functions
As suggested by Richard B, this patch changes the IFN_COND_*
functions so that they take the else value of the ?: operation
as a final argument, rather than always using argument 1.

All current callers will still use the equivalent of argument 1,
so this patch makes the SVE code assert that for now.  Later patches
add the general case.

2018-05-25  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* doc/md.texi: Update the documentation of the cond_* optabs
	to mention the new final operand.  Fix GET_MODE_NUNITS call.
	Describe the scalar case too.
	* internal-fn.def (IFN_EXTRACT_LAST): Change type to fold_left.
	* internal-fn.c (expand_cond_unary_optab_fn): Expect 3 operands
	instead of 2.
	(expand_cond_binary_optab_fn): Expect 4 operands instead of 3.
	(get_conditional_internal_fn): Update comment.
	* tree-vect-loop.c (vectorizable_reduction): Pass the original
	accumulator value as a final argument to conditional functions.
	* config/aarch64/aarch64-sve.md (cond_<optab><mode>): Turn into
	a define_expand and add an "else" operand.  Assert for now that
	the else operand is equal to operand 2.  Use SVE_INT_BINARY and
	SVE_COND_FP_BINARY instead of SVE_COND_INT_OP and SVE_COND_FP_OP.
	(*cond_<optab><mode>): New patterns.
	* config/aarch64/iterators.md (UNSPEC_COND_SMAX, UNSPEC_COND_UMAX)
	(UNSPEC_COND_SMIN, UNSPEC_COND_UMIN, UNSPEC_COND_AND, UNSPEC_COND_ORR)
	(UNSPEC_COND_EOR): Delete.
	(optab): Remove associated mappings.
	(SVE_INT_BINARY): New code iterator.
	(sve_int_op): Remove int attribute and add "minus" to the code
	attribute.
	(SVE_COND_INT_OP): Delete.
	(SVE_COND_FP_OP): Rename to...
	(SVE_COND_FP_BINARY): ...this.

From-SVN: r260707
2018-05-25 06:48:47 +00:00
Richard Sandiford
b883fc9b54 Try harder to preserve operand ties in maybe_legitimize_operands
maybe_legitimize_operands normally goes through each operand in turn
and legitimises it in isolation.  For example, if two operands to
an instruction initially have constant value C, and the instruction
requires both operands to be registers, the function ends up forcing
C into a register twice and passing two different registers to the
instruction.

I think we should try a bit harder to preserve the rtx_equal_p
property, if it's easy to do.  Some targets can optimise that
case better than they would the general case of all operands
being different.  This is particularly true for SVE after the
upcoming changes to the IFN_COND_* routines.

This is hard to test on its own, but is covered by the upcoming
IFN_COND_* patches.

2018-05-25  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* optabs.c (can_reuse_operands_p): New function.
	(maybe_legitimize_operands): Try to reuse the results for
	earlier operands.

From-SVN: r260706
2018-05-25 06:35:30 +00:00
Janus Weil
9143aa524c re PR fortran/85839 ([F2018] warn for obsolescent features)
2018-05-25  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/85839
	* match.c (gfc_match_block_data): Call gfc_notify_std to warn about
	an obsolescent feature in Fortran 2018.
	(gfc_match_equivalence): Ditto.
	* resolve.c (resolve_common_blocks): Ditto.
	(gfc_resolve_forall): Ditto.
	* symbol.c (gfc_define_st_label): Ditto.


2018-05-25  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/85839
	* gfortran.dg/f2018_obs.f90: New test case.

From-SVN: r260705
2018-05-25 08:09:10 +02:00
Steven G. Kargl
55157d5ed6 re PR fortran/85543 (ICE in update_current_proc_array_outer_dependency, at fortran/resolve.c:3060)
2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/85543
	* resolve.c (update_current_proc_array_outer_dependency): Avoid NULL
	pointer dereference.


2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/85543
	* gfortran.dg/pr85543.f90: New test.

From-SVN: r260704
2018-05-25 00:39:23 +00:00
GCC Administrator
afb4d6a83e Daily bump.
From-SVN: r260703
2018-05-25 00:16:30 +00:00
Steven G. Kargl
67b8d50c64 re PR fortran/85780 (ICE in resolve_fl_procedure, at fortran/resolve.c:12504)
2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/85780
	* resolve.c (resolve_fl_procedure): Avoid NULL dereference.

2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/85780
	* gfortran.dg/pr85780.f90: New test.

From-SVN: r260698
2018-05-24 23:28:35 +00:00
Steven G. Kargl
1072bff814 re PR fortran/85779 (ICE in gfc_typename, at fortran/misc.c:156)
2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/85779
	* decl.c (gfc_match_derived_decl): Fix NULL point dereference.

2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/85779
	* gfortran.dg/pr85779_1.f90: New test.
	* gfortran.dg/pr85779_2.f90: Ditto.
	* gfortran.dg/pr85779_3.f90: Ditto.

From-SVN: r260697
2018-05-24 22:31:11 +00:00
Steven G. Kargl
8909fee289 re PR fortran/85895 (ICE in gfc_conv_array_ref, at fortran/trans-array.c:3518)
2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/85895
	* resolve.c (resolve_sync): Resolve expression before checking for
	an error.

2018-05-24  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/85895

	* gfortran.dg/coarray_3.f90: Fix invalid testcase.
	* gfortran.dg/pr85895.f90: New test.

From-SVN: r260696
2018-05-24 22:28:33 +00:00
Tom Rix
91294f1e4f * dwarf2.def (DW_FORM_strx*, DW_FORM_addrx*): New.
From-SVN: r260695
2018-05-24 16:03:06 -06:00
Uros Bizjak
b0eb19e714 sse.md (cvtusi2<ssescalarmodesuffix>64<round_name>): Add {q} suffix to insn mnemonic.
* config/i386/sse.md (cvtusi2<ssescalarmodesuffix>64<round_name>):
	Add {q} suffix to insn mnemonic.

testsuite/Changelog:

	* gcc.target/i386/avx512f-vcvtusi2sd64-1.c: Update scan string.
	* gcc.target/i386/avx512f-vcvtusi2ss64-1.c: Ditto.

From-SVN: r260691
2018-05-24 23:23:33 +02:00
Jozef Lawrynowicz
1d0d518e79 msp430.c (TARGET_WARN_FUNC_RETURN): Define.
* config/msp430/msp430.c (TARGET_WARN_FUNC_RETURN): Define.
	(msp430_warn_func_return): New.

From-SVN: r260690
2018-05-24 14:49:11 -06:00
Roger Sayle
ba6557e268 fold-const.c (tree_nonzero_bits): New function.
* fold-const.c (tree_nonzero_bits): New function.
        * fold-const.h (tree_nonzero_bits): Likewise.
        * match.pd (POPCOUNT): New patterns to fold BUILTIN_POPCOUNT and
        friends.  POPCOUNT(x&1) => x&1, POPCOUNT(x)==0 => x==0, etc.

        * gcc.dg/fold-popcount-1.c: New testcase.
        * gcc.dg/fold-popcount-2.c: New testcase.
        * gcc.dg/fold-popcount-3.c: New testcase.
        * gcc.dg/fold-popcount-4.c: New testcase.

From-SVN: r260689
2018-05-24 14:47:03 -06:00
Jason Merrill
520fe2e324 PR c++/85842 - -Wreturn-type, constexpr if and generic lambda.
* pt.c (tsubst_lambda_expr): Copy current_function_returns_* to
	generic lambda.

From-SVN: r260685
2018-05-24 16:03:18 -04:00
H.J. Lu
71b55d45e4 libsanitizer: Use pre-computed size of struct ustat for Linux
Cherry-pick compiler-rt revision 333213:

<sys/ustat.h> has been removed from glibc 2.28 by:

commit cf2478d53ad7071e84c724a986b56fe17f4f4ca7
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Sun Mar 18 11:28:59 2018 +0800

    Deprecate ustat syscall interface

This patch uses pre-computed size of struct ustat for Linux.

	PR sanitizer/85835
	* sanitizer_common/sanitizer_platform_limits_posix.cc: Don't
	include <sys/ustat.h> for Linux.
	(SIZEOF_STRUCT_USTAT): New.
	(struct_ustat_sz): Use SIZEOF_STRUCT_USTAT for Linux.

From-SVN: r260684
2018-05-24 12:52:32 -07:00
H.J. Lu
e935be363a Check ifunc_resolver only on FUNCTION_DECL
Since ifunc_resolver is only valid on FUNCTION_DECL, check ifunc_resolver
only on FUNCTION_DECL.

	PR target/85900
	PR target/85345
	* varasm.c (assemble_alias): Check ifunc_resolver only on
	FUNCTION_DECL.

From-SVN: r260683
2018-05-24 12:51:09 -07:00
Ville Voutilainen
9635923dc8 Pedwarn on a non-standard position of a C++ attribute.
From-SVN: r260682
2018-05-24 22:05:46 +03:00
Uros Bizjak
fd657f1acb re PR target/85903 (FAIL: gcc.target/i386/avx512dq-vcvtuqq2pd-2.c)
PR target/85903
	* config/i386/sse.md (movdi_to_sse): Do not generate pseudo
	when memory input operand is handled.

From-SVN: r260681
2018-05-24 20:16:29 +02:00
Maya Rashish
95c921d18c PR target/85904 check for aligned_alloc on netbsd cross-compilation
2018-05-24  Maya Rashish  <coypu@sdf.org>

	PR target/85904
	* crossconfig.m4: Test for aligned_alloc on netbsd.
	* configure: Regenerate.

From-SVN: r260678
2018-05-24 18:31:13 +01:00
Paolo Carlini
71a93b0863 cp-tree.h (INDIRECT_TYPE_P): New.
2018-05-24  Paolo Carlini  <paolo.carlini@oracle.com>

	* cp-tree.h (INDIRECT_TYPE_P): New.
	* call.c (build_trivial_dtor_call, maybe_warn_class_memaccess,
	joust): Use it instead of POINTER_TYPE_P.
	* class.c (update_vtable_entry_for_fn, find_flexarrays,
	* fixed_type_or_null, resolves_to_fixed_type_p): Likewise.
	* constexpr.c (cxx_eval_binary_expression, cxx_fold_indirect_ref,
	* cxx_eval_increment_expression, potential_constant_expression_1):
	Likewise.
	* cp-gimplify.c (cp_gimplify_expr, cp_genericize_r): Likewise.
	* cp-objcp-common.c (cxx_get_alias_set): Likewise.
	* cp-ubsan.c (cp_ubsan_maybe_instrument_member_call,
	cp_ubsan_maybe_instrument_downcast): Likewise.
	* cvt.c (cp_convert_to_pointer, ocp_convert,
	cp_get_fndecl_from_callee, maybe_warn_nodiscard, convert): Likewise.
	* cxx-pretty-print.c (cxx_pretty_printer::abstract_declarator,
	pp_cxx_offsetof_expression_1): Likewise.
	* decl.c (grokparms, static_fn_type): Likewise.
	* decl2.c (grokbitfield): Likewise.
	* error.c (dump_expr): Likewise.
	* except.c (initialize_handler_parm, check_noexcept_r): Likewise.
	* init.c (warn_placement_new_too_small): Likewise.
	* lambda.c (build_capture_proxy, add_capture): Likewise.
	* parser.c (cp_parser_omp_for_loop): Likewise.
	* pt.c (convert_nontype_argument, fn_type_unification,
	uses_deducible_template_parms, check_cv_quals_for_unify,
	dependent_type_p_r): Likewise.
	* search.c (check_final_overrider): Likewise.
	* semantics.c (handle_omp_array_sections, finish_omp_clauses,
	finish_omp_for): Likewise.
	* tree.c (cp_build_qualified_type_real): Likewise.
	* typeck.c (build_class_member_access_expr,
	finish_class_member_access_expr, build_x_indirect_ref,
	cp_build_indirect_ref_1, cp_build_binary_op, build_const_cast_1):
	Likewise.

From-SVN: r260677
2018-05-24 17:20:01 +00:00
Jonathan Wakely
25999a112f Implement P0558R2 changes to std::atomic
The restrictions forbidding arithmetic on atomic pointer types are only
enabled for C++17 and later, retaining the GNU extension for older
standards. The new nested typedefs and changes to prevent scalar
parameters participating in template argument deduction are enabled
unconditionally.

	PR libstdc++/69769
	PR libstdc++/85886
	* include/bits/atomic_base.h (__atomic_base::value_type)
	(__atomic_base::difference_type): Add new typedefs.
	* include/std/atomic (atomic<bool>::value_type, atomic<T>::value_type)
	(atomic<T*>::value_type, atomic<T*>::difference_type): Likewise.
	(atomic<T*>::operator++, atomic<T*>::operator--)
	(atomic<T*>::operator+=, atomic<T*>::operator-=)
	(atomic<T*>::fetch_add, atomic<T*>::fetch_sub): Add static assertion
	to enforce C++17 requirement on pointer arithmetic.
	(__atomic_val_t, __atomic_diff_t): New alias templates.
	(atomic_init, atomic_store_explicit, atomic_exchange_explicit)
	(atomic_compare_exchange_weak_explicit)
	(atomic_compare_exchange_strong_explicit, atomic_store)
	(atomic_exchange, atomic_compare_exchange_weak)
	(atomic_compare_exchange_strong): Use __atomic_val_t to make
	scalar parameters be non-deduced contexts.
	(atomic_fetch_add_explicit, atomic_fetch_sub_explicit)
	(atomic_fetch_add, atomic_fetch_sub): Change first parameter to be
	atomic instead of __atomic_base, and use __atomic_diff_t for scalar
	parameters.
	(atomic_fetch_and_explicit, atomic_fetch_or_explicit)
	(atomic_fetch_xor_explicit, atomic_fetch_and, atomic_fetch_or)
	(atomic_fetch_xor): Use __atomic_val_t for scalar parameters.
	(atomic_fetch_add_explicit, atomic_fetch_sub_explicit)
	(atomic_fetch_add, atomic_fetch_sub): Remove overloads for atomic
	address types.
	* testsuite/29_atomics/atomic/60695.cc: Adjust dg-error lineno.
	* testsuite/29_atomics/atomic/69769.cc: New test.
	* testsuite/29_atomics/atomic/nonmembers.cc: New test.
	* testsuite/29_atomics/atomic/operators/pointer_partial_void.cc:
	Disable test for C++17 and later.
	* testsuite/29_atomics/atomic/requirements/typedefs.cc: New test.
	* testsuite/29_atomics/atomic_integral/nonmembers.cc: New test.
	* testsuite/29_atomics/atomic_integral/requirements/typedefs.cc: New
	test.

From-SVN: r260676
2018-05-24 16:28:26 +01:00
Luis Machado
8d39ea2f9d [AArch64, Falkor] Falkor address costs tuning
Switch from using generic address costs to using Falkor-specific ones, which
give Falkor better results overall.

gcc/ChangeLog:

2018-05-24  Luis Machado  <luis.machado@linaro.org>

	* config/aarch64/aarch64.c (qdf24xx_addrcost_table): New static
	global.
	(qdf24xx_tunings) <addr_costs>: Set to qdf24xx_addrcost_table.

From-SVN: r260675
2018-05-24 14:37:21 +00:00
Jason Merrill
1268ecc26f PR c++/85864 - literal template and default template arg.
* pt.c (instantiation_dependent_r): Handle NONTYPE_ARGUMENT_PACK.

From-SVN: r260672
2018-05-24 10:27:10 -04:00
Marek Polacek
ea219e6e88 re PR c++/85847 (unexpected expression of kind template_id_expr)
PR c++/85847
	* init.c (build_new_1): Use fold_non_dependent_expr.  Use a dedicated
	variable for its result.  Fix a condition.
	(build_new): Use fold_non_dependent_expr.  Tweak a condition.

	* g++.dg/cpp0x/new3.C: New test.

From-SVN: r260671
2018-05-24 13:36:21 +00:00
Piotr Trojanek
672dfc39f1 [Ada] Simplify routines with a local Result variable
Local variable Result that is modified inside IF statements makes a seemingly
trivial code slightly hard to understand. This patch rewrites such a pattern.

Semantics unaffected.

2018-05-24  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* sem_elab.adb (Non_Private_View): Simplify by removing a local Result
	variable.
	* sem_prag.adb (Get_Base_Subprogram): Same as above.

From-SVN: r260670
2018-05-24 13:07:11 +00:00
Eric Botcazou
63a329f81c [Ada] Fix irregular output with -gnatR3
This fixes a long-standing quirk present in the layout information for record
types displayed by the -gnatR3 switch: when a component has a variable
(starting) position, its corresponding line in the output has an irregular and
awkward format.  After this change, the format is the same as in all the other
cases.

For the following record:

    type R (m : natural) is record
        s : string (1 .. m);
        r : natural;
        b : boolean;
    end record;
    for R'alignment use 4;
    pragma Pack (R);

the output of -gnatR3 used to be:

for R'Object_Size use 17179869248;
for R'Value_Size use ((#1 + 8) * 8);
for R'Alignment use 4;
for R use record
   m at  0 range  0 .. 30;
   s at  4 range  0 .. ((#1 * 8)) - 1;
   r at bit offset (((#1 + 4) * 8)) size in bits = 31
   b at bit offset ((((#1 + 7) * 8) + 7)) size in bits = 1
end record;

and is changed into:

for R'Object_Size use 17179869248;
for R'Value_Size use ((#1 + 8) * 8);
for R'Alignment use 4;
for R use record
   m at  0 range  0 .. 30;
   s at  4 range  0 .. ((#1 * 8)) - 1;
   r at (#1 + 4) range  0 .. 30;
   b at (#1 + 7) range  7 ..  7;
end record;

2018-05-24  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* fe.h (Set_Normalized_First_Bit): Declare.
	(Set_Normalized_Position): Likewise.
	* repinfo.adb (List_Record_Layout): Do not use irregular output for a
	variable position.  Fix minor spacing issue.
	* gcc-interface/decl.c (annotate_rep): If a field has a variable
	offset, compute the normalized position and annotate it in addition to
	the bit offset.

From-SVN: r260669
2018-05-24 13:07:06 +00:00
Eric Botcazou
736e16efea [Ada] Minor clean-ups in gigi
2018-05-24  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* gcc-interface/trans.c (Handled_Sequence_Of_Statements_to_gnu):
	Constify and rename variables.  Fix formatting.
	(gnat_to_gnu) <N_Exception_Handler>: Minor tweak.
	<N_Raise_Statement>: Likewise.

From-SVN: r260668
2018-05-24 13:07:00 +00:00
Javier Miranda
01243764c0 [Ada] Wrong renaming of variant record equality
For a renaming of the equality operator of a variant record the compiler
erroneously generates code that compares all the record component (thus
computing wrong results).

After this patch the following test provides the correct results.

package Types is
   type Data (Bool : Boolean := False) is record
      case Bool is
         when False =>
            null;

         when True =>
            Val1 : Integer range 0 .. 2 ** 23 - 1;
            Val2 : Float;
      end case;
   end record;

   function IsEqual (Left, Right : Data) return Boolean renames "=";
end Types;

with Types;
with Ada.Text_IO;
procedure Main is
   A : Types.Data := Types.Data'(Bool => True,
                                 Val1 => 16#05A5A5#,
                                 Val2 => 999999999.0);

   B : Types.Data := Types.Data'(Bool => True,
                                 Val1 => 16#0A5A5A#,
                                 Val2 => 6666666666.0);
   use type Types.Data;
begin
   A := (Bool => False);             --  Test
   B := (Bool => False);             --  Test

   if Types.IsEqual (A, B) then      --  Test
      Ada.Text_IO.Put_Line ("OK");
   else
      Ada.Text_IO.Put_Line ("ERROR");
   end if;
end Main;

Command: gnatmake main; ./main
 Output: OK

2018-05-24  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* exp_ch8.adb (Build_Body_For_Renaming): Adding support to build the
	body of a variant record equality renaming.
	(Expand_N_Subprogram_Renaming_Declaration): Adapt the code to the new
	implementation of Build_Body_For_Renaming.
	* exp_ch3.ads (Build_Variant_Record_Equality): New library level
	function that factorizes the functionality needed by
	Build_Body_For_Renaming and Expand_Freeze_Record_Type to build the body
	of a variant record equality subprogram.
	* exp_ch3.adb (Build_Variant_Record_Equality): New subprogram.
	(Build_Variant_Record_Equality): New local procedure of
	Expand_Freeze_Record_Type containing all the code specific for freezing
	the record type that cannot be place in the new library level function.

From-SVN: r260667
2018-05-24 13:06:47 +00:00
Ed Schonberg
7037d2bbd0 [Ada] Add a new Is_Activation_Record flag on IN parameters
2018-05-24  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* einfo.ads, einfo.adb (Is_Activation_Record): New flag on
	in_parameters, used when unesting subprograms for LLVM, to indicate
	that a generated parameter carries the activation record from the
	enclosing subprogram.
	* exp_unst.adb (Check_Static_Type): Handle array attributes of types
	whose bounds may contain up-level references that need to be added to
	an activation recoord.
	(Add_Extra_Formal): Set Is_Activation_Record on new formal.

From-SVN: r260666
2018-05-24 13:06:40 +00:00
Yannick Moy
d72ba19f99 [Ada] Improve GNATprove messages on unproved checks
GNATprove messages may point out to part of an assertion as not being proved,
and in such a case it displays the sub-expression. This code relies on
Pprint.Expression_Image, which is improved here to display better some kinds of
expressions.

There is no impact on compilation.

2018-05-24  Yannick Moy  <moy@adacore.com>

gcc/ada/

	* pprint.adb (Expression_Image): Improve the printing of expressions,
	by taking more cases into account, in particular qualified expressions
	and aggregates.  Also count more the number of parentheses to close
	after the expression.

From-SVN: r260665
2018-05-24 13:06:34 +00:00
Javier Miranda
24e959661f [Ada] Missing error on illegal access to discriminant
The compiler does not report an error on the illegal access to a renamed
discriminant when the actual object is a parameter of a subprogram.

2018-05-24  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* sem_ch3.adb (Is_Visible_Component): For untagged types add missing
	check for renamed discriminants.
	* sem_ch4.adb (Analyze_Overloaded_Selected_Component,
	Analyze_Selected_Component, Check_Misspelled_Selector): For calls to
	Is_Visible_Component pass the associated selector node to allow
	checking renamed discriminants on untagged types.

gcc/testsuite/

	* gnat.dg/discr52.adb: New testcase.

From-SVN: r260664
2018-05-24 13:06:28 +00:00
Ed Schonberg
5a5925ee30 [Ada] Infinite loop in the compiler when warning on redundant constructs
This patch fixes an infinite loop in the compiler when warnings on redundant
constructs are enabled (-gnatwr) and the constructs are use_type clauses
that appear (redundantly) in a parent unit and a child unit.

The following command:

   gcc -c -gnatwr root-child.ads

must yield:

   root-child.ads:2:01: warning: "Pack.Typ" is already use-visible through
   previous use_type_clause at root.ads:2

The following must compile quietly:

   gcc -c -gnatwr root-child-grand.ads

----
package Pack is
  type Typ is new Integer;
end Pack;
----
with Pack;
use type Pack.Typ;
package Root is
  Thing1 : Pack.Typ;
end Root;
----
with pack;
use type pack.typ;
package Root.Child is
  Thing2 : Pack.Typ := Root.Thing1 * 3;
end;
----
with Pack;
use type Pack.Typ;
package Root.Child.Grand is
  Thing3 : Pack.Typ := Thing1 + Thing2;
end;

2018-05-24  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_ch8.adb (Analyze_Use_Type): Do not assign the Prev_Use_Clause
	link to a use_type clause if this would cause an infinite loop in the
	machinery that detects redundant use clauses. This may happen when the
	redundant clauses appear in the context of a child unit and the context
	of its parent.

From-SVN: r260663
2018-05-24 13:06:21 +00:00