gcc.git
6 years ago* MAINTAINERS (loop-optimizer): Add myself.
Bin Cheng [Tue, 22 May 2018 08:26:50 +0000 (08:26 +0000)]
* MAINTAINERS (loop-optimizer): Add myself.

From-SVN: r260500

6 years agore PR fortran/85841 ([F2018] reject deleted features)
Janus Weil [Tue, 22 May 2018 05:41:45 +0000 (07:41 +0200)]
re PR fortran/85841 ([F2018] reject deleted features)

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

PR fortran/85841
* libgfortran.h: Remove the macros GFC_STD_F2008_TS and
GFC_STD_OPT_F08TS.
* error.c (notify_std_msg): Remove GFC_STD_F2008_TS.
* options.c (set_default_std_flags): Ditto.
(gfc_handle_option): Make -std=f2008ts an alias for -std=f2018.
* array.c (gfc_match_array_spec): Replace GFC_STD_F2008_TS by
GFC_STD_F2018.
* check.c (gfc_check_atomic, gfc_check_event_query,
gfc_check_c_f_pointer, gfc_check_c_f_procpointer, gfc_check_c_funloc,
gfc_check_c_loc, gfc_check_num_images, gfc_check_this_image): Ditto.
* decl.c (gfc_verify_c_interop_param, gfc_match_decl_type_spec): Ditto.
* intrinsic.c (add_functions, add_subroutines,
gfc_check_intrinsic_standard): Ditto.
* iso-c-binding.def: Ditto.
* iso-fortran-env.def: Ditto.
* match.c (gfc_match_event_post, gfc_match_event_wait,
gfc_match_fail_image, gfc_match_form_team, gfc_match_change_team,
gfc_match_end_team, gfc_match_sync_team): Ditto.
* gfortran.texi: Remove mention of -std=f2008ts.
Move TSs into F2018 section.
* invoke.texi: Update documentation of -std=f2008ts.

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

PR fortran/85841
* gfortran.dg/assumed_rank_5.f90: Update error message.
* gfortran.dg/assumed_type_4.f90: Ditto.
* gfortran.dg/bind_c_array_params.f03: Ditto.
* gfortran.dg/bind_c_usage_28.f90: Ditto.
* gfortran.dg/c_funloc_tests_5.f03: Ditto.
* gfortran.dg/c_funloc_tests_6.f90: Ditto.
* gfortran.dg/c_loc_tests_11.f03: Ditto.
* gfortran.dg/coarray_atomic_2.f90: Ditto.
* gfortran.dg/coarray_collectives_2.f90: Ditto.
* gfortran.dg/coarray_collectives_10.f90: Ditto.
* gfortran.dg/coarray_collectives_13.f90: Ditto.
* gfortran.dg/rank_3.f90: Ditto.
* gfortran.dg/error_stop_4.f90: Replace -std=f2008ts by -std=f2008.
* gfortran.dg/implicit_14.f90: Ditto.

From-SVN: r260499

6 years agoDaily bump.
GCC Administrator [Tue, 22 May 2018 00:16:41 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r260497

6 years ago* es.po: Update.
Joseph Myers [Mon, 21 May 2018 23:40:02 +0000 (00:40 +0100)]
* es.po: Update.

From-SVN: r260492

6 years agosimd-5.c: Fix comment.
Christian Groessler [Mon, 21 May 2018 22:42:35 +0000 (22:42 +0000)]
simd-5.c: Fix comment.

2018-05-21  Christian Groessler  <chris@groessler.org>

* gcc.c-torture/compile/simd-5.c: Fix comment.

From-SVN: r260491

6 years agore PR target/85657 (Make __ibm128 a separate type, even if long double uses the IBM...
Michael Meissner [Mon, 21 May 2018 22:25:03 +0000 (22:25 +0000)]
re PR target/85657 (Make __ibm128 a separate type, even if long double uses the IBM double-double format)

2018-05-21  Michael Meissner  <meissner@linux.ibm.com>

PR target/85657
* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Do not
define __ibm128 as long double.
* config/rs6000/rs6000.c (rs6000_init_builtins): Create __ibm128
as a distinct type with IEEE 128-bit floating point is supported.
(init_float128_ieee): Fix up conversions between IFmode and IEEE
128-bit types to use the correct functions.
(rs6000_expand_float128_convert): Use explicit FLOAT_EXTEND to
convert between 128-bit floating point types that have different
modes but the same representation, instead of using gen_lowpart to
makean alias.
* config/rs6000/rs6000.md (IFKF): New iterator for IFmode and
KFmode.
(IFKF_reg): New attributes to give the register constraints for
IFmode and KFmode.
(extend<mode>tf2_internal): New insns to mark an explicit
conversion between 128-bit floating point types that have a
different mode but share the same representation.

[gcc/testsuite]
2018-05-21  Michael Meissner  <meissner@linux.ibm.com>

PR target/85657
* gcc.target/powerpc/pr85657-1.c: New test for converting between
__float128, __ibm128, and long double.
* gcc.target/powerpc/pr85657-2.c: Likewise.
* gcc.target/powerpc/pr85657-3.c: Likewise.
* g++.dg/pr85667.C: New test to make sure __ibm128 is
implementated as a separate type internally, and is not just an
alias for long double.

From-SVN: r260490

6 years agore PR target/85657 (Make __ibm128 a separate type, even if long double uses the IBM...
Michael Meissner [Mon, 21 May 2018 22:21:40 +0000 (22:21 +0000)]
re PR target/85657 (Make __ibm128 a separate type, even if long double uses the IBM double-double format)

[gcc]
2018-05-21  Michael Meissner  <meissner@linux.ibm.com>

PR target/85657
* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Do not
define __ibm128 as long double.
* config/rs6000/rs6000.c (rs6000_init_builtins): Always create
__ibm128 as a distinct type.
(init_float128_ieee): Fix up conversions between IFmode and IEEE
128-bit types to use the correct functions.
(rs6000_expand_float128_convert): Use explicit FLOAT_EXTEND to
convert between 128-bit floating point types that have different
modes but the same representation, instead of using gen_lowpart to
makean alias.
* config/rs6000/rs6000.md (IFKF): New iterator for IFmode and
KFmode.
(IFKF_reg): New attributes to give the register constraints for
IFmode and KFmode.
(extend<mode>tf2_internal): New insns to mark an explicit
conversion between 128-bit floating point types that have a
different mode but share the same representation.

[gcc/testsuite]
2018-05-21  Michael Meissner  <meissner@linux.ibm.com>

PR target/85657
* gcc.target/powerpc/pr85657-1.c: New test for converting between
__float128, __ibm128, and long double.
* gcc.target/powerpc/pr85657-2.c: Likewise.
* gcc.target/powerpc/pr85657-3.c: Likewise.
* g++.dg/pr85667.C: New test to make sure __ibm128 is
implementated as a separate type internally, and is not just an
alias for long double.

From-SVN: r260489

6 years agoFix tree-ssa-strlen handling of partial clobbers (PR85814)
Richard Sandiford [Mon, 21 May 2018 22:02:35 +0000 (22:02 +0000)]
Fix tree-ssa-strlen handling of partial clobbers (PR85814)

In this PR we have:

  c_5 = c_4(D) + 4;
  c_12 = c_5 + 1;
  *c_5 = 2;
  a = 2; // A
  c_21 = c_12 + 1;
  *c_12 = 2;
  a = 2; // B
  c_28 = c_21 + 1;
  *c_21 = 2;
  a = 2;
  c_7 = c_28 + 1;
  *c_28 = 2;

where a is a global int.  We decide that A can't clobber *c_5 == c_4[4]
because the latter implies that c_4 is an object of 5 bytes or more,
whereas a has exactly 4 bytes.

The assumption for B and *c_5 is the same, but when considering B and
*c_12, we only follow the definition of c_12 to c_5 + 1 (for good
reason) and so have *c_12 == c_5[1].  We then don't have the same
size guarantee and so assume that B could clobber *c_12.  This leads
to a situation in which the strinfo for c_5 is still valid but the
next strinfo (c_12) isn't.  We then segfaulted while trying to get
the strinfo for c_21 + 1 == c_5 + 3 because get_stridx_plus_constant
assumed that c_5's next strinfo (c_12) would be valid too.

And of course it should be valid really.  It doesn't make sense for the
string based at c_5 to be valid but a substring of it to be invalid.
I don't think we can guarantee that such weird corner cases never
happen though, even if we tried to avoid this one.

One possibility would be to mark c_12 as valid on the basis that c_5
is valid, but I'm not sure the complication is worth it given that it
seems to trigger very rarely.  A better optimisation would be to get
the unroller to clean up after itself a bit more...

Although this particular instance of the bug relies on r249880, I think
we could have similar problems in GCC 7.  It would be much harder to
trigger though, especially since it relies on unfolded IR like the above.

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

gcc/
PR tree-optimization/85814
* tree-ssa-strlen.c (get_stridx_plus_constant): Cope with
a null return from get_strinfo when unsharing the next
strinfo in the chain.

gcc/testsuite/
PR tree-optimization/85814
* gcc.dg/torture/pr85814.c: New test.

From-SVN: r260488

6 years agore PR fortran/85841 ([F2018] reject deleted features)
Janus Weil [Mon, 21 May 2018 20:48:59 +0000 (22:48 +0200)]
re PR fortran/85841 ([F2018] reject deleted features)

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

PR fortran/85841
PR testsuite/85865
* testsuite/libgomp.fortran/collapse2.f90: Add option "-std=legacy".
* testsuite/libgomp.fortran/omp_atomic2.f90: Ditto.
* testsuite/libgomp.fortran/omp_parse1.f90: Ditto.
* testsuite/libgomp.fortran/omp_parse3.f90: Ditto.
* testsuite/libgomp.fortran/task2.f90: Ditto.
* testsuite/libgomp.fortran/vla1.f90: Ditto.
* testsuite/libgomp.fortran/vla2.f90: Ditto.
* testsuite/libgomp.fortran/vla3.f90: Ditto.
* testsuite/libgomp.fortran/vla4.f90: Ditto.
* testsuite/libgomp.fortran/vla5.f90: Ditto.
* testsuite/libgomp.fortran/vla6.f90: Ditto.
* testsuite/libgomp.fortran/vla8.f90: Ditto.
* testsuite/libgomp.oacc-fortran/collapse-2.f90: Ditto.
* testsuite/libgomp.oacc-fortran/nested-function-1.f90: Ditto.

From-SVN: r260487

6 years agoparser.c (cp_parser_parameter_declaration_list): Remove bool* parameter.
Paolo Carlini [Mon, 21 May 2018 20:44:33 +0000 (20:44 +0000)]
parser.c (cp_parser_parameter_declaration_list): Remove bool* parameter.

2018-05-21  Paolo Carlini  <paolo.carlini@oracle.com>

* parser.c (cp_parser_parameter_declaration_list): Remove
bool* parameter.
(cp_parser_parameter_declaration_clause): Adjust.
(cp_parser_cache_defarg): Likewise.

From-SVN: r260486

6 years agore PR target/84923 (gcc.dg/attr-weakref-1.c failed on aarch64)
Vladimir Mezentsev [Mon, 21 May 2018 20:30:00 +0000 (20:30 +0000)]
re PR target/84923 (gcc.dg/attr-weakref-1.c failed on aarch64)

        PR gcc/84923
        * varasm.c (weak_finish): Clean up weak_decls.

From-SVN: r260485

6 years agore PR c++/84588 (internal compiler error: Segmentation fault (contains_struct_check()))
Paolo Carlini [Mon, 21 May 2018 19:25:50 +0000 (19:25 +0000)]
re PR c++/84588 (internal compiler error: Segmentation fault (contains_struct_check()))

/cp
2018-05-21  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/84588
* parser.c (cp_parser_maybe_commit_to_declaration,
cp_parser_check_condition_declarator): New.
(cp_parser_simple_declaration): Use the first above.
(cp_parser_condition): Use both the above; enforce
[stmt.stmt]/2 about the declarator not specifying
a function or an array; improve error-recovery.

/testsuite
2018-05-21  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/84588
* g++.dg/cpp0x/cond1.C: New.
* g++.dg/cpp1y/pr84588-1.C: Likewise.
* g++.dg/cpp1y/pr84588-2.C: Likewise.
* g++.dg/cpp1y/pr84588-3.C: Likewise.
* g++.dg/parse/cond6.C: Likewise.
* g++.dg/parse/cond7.C: Likewise.
* g++.dg/parse/cond8.C: Likewise.
* g++.dg/cpp1z/decomp16.C: Update.
* g++.old-deja/g++.jason/cond.C: Likewise.

From-SVN: r260482

6 years agoChangeLog for r260480
Steven G. Kargl [Mon, 21 May 2018 19:22:46 +0000 (19:22 +0000)]
ChangeLog for r260480

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

ChangeLog for r260480
        * gfortran.dg/graphite/block-2.f: Adjust testcase for new gfortran
        warnings for deleted and obsolescent features.
        * gfortran.dg/graphite/id-19.f: Ditto.
        * gfortran.dg/graphite/id-20.f: Ditto.
        * gfortran.dg/graphite/id-27.f90: Ditto.
        * gfortran.dg/graphite/pr82449.f: Ditto.

From-SVN: r260481

6 years agoblock-2.f: Adjust testcase for new gfortran warnings for deleted and obsolescent...
Steven G. Kargl [Mon, 21 May 2018 19:19:25 +0000 (19:19 +0000)]
block-2.f: Adjust testcase for new gfortran warnings for deleted and obsolescent features.

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

* gfortran.dg/graphite/block-2.f: Adjust testcase for new gfortran
    warnings for deleted and obsolescent features.
* gfortran.dg/graphite/id-19.f: Ditto.
* gfortran.dg/graphite/id-20.f: Ditto.
* gfortran.dg/graphite/id-27.f90: Ditto.
* gfortran.dg/graphite/pr82449.f: Ditto.

From-SVN: r260480

6 years agoAdd support for opening file streams from wide character strings
Jonathan Wakely [Mon, 21 May 2018 17:18:35 +0000 (18:18 +0100)]
Add support for opening file streams from wide character strings

C++17 added new overloads to <fstream> class templates to support
opening files from wide character strings "on systems where
filesystem::path::value_type is not char". This patch adds those
overloads conditional on _wfopen being available, and enables them for
pre-C++17 modes as well.

Add support for opening file streams from wide character strings.
* config/io/basic_file_stdio.cc [_GLIBCXX_HAVE__WFOPEN]
(__basic_file<char>::open(const wchar_t*, ios_base::openmode)):
Define new overload.
* config/io/basic_file_stdio.h [_GLIBCXX_HAVE__WFOPEN]
(__basic_file<char>::open(const wchar_t*, ios_base::openmode)):
Declare new overload.
* configure.ac: Check for _wfopen.
* crossconfig.m4: Likewise.
* configure: Regenerate.
* config.h.in: Regenerate.
* include/bits/fstream.tcc [_GLIBCXX_HAVE__WFOPEN]
(basic_filebuf<C,T>::open(const wchar_t*, ios_base::openmode)):
Define new overload.
* include/std/fstream [_GLIBCXX_HAVE__WFOPEN]
(basic_filebuf<C,T>::open(const wchar_t*, ios_base::openmode)):
Declare new overload.
[_GLIBCXX_HAVE__WFOPEN]
(basic_ifstream<C,T>::basic_ifstream(const wchar_t*, openmode))
(basic_ifstream<C,T>::basic_open(const wchar_t*, openmode))
(basic_ofstream<C,T>::basic_ifstream(const wchar_t*, openmode))
(basic_ofstream<C,T>::basic_open(const wchar_t*, openmode))
(basic_fstream<C,T>::basic_ifstream(const wchar_t*, openmode))
(basic_fstream<C,T>::basic_open(const wchar_t*, openmode)): Define
new overloads.
* testsuite/27_io/basic_filebuf/open/wchar_t/1.cc: New.
* testsuite/27_io/basic_ifstream/cons/wchar_t/1.cc: New.
* testsuite/27_io/basic_ifstream/open/wchar_t/1.cc: New.
* testsuite/27_io/basic_ofstream/cons/wchar_t/1.cc: New.
* testsuite/27_io/basic_ofstream/open/wchar_t/1.cc: New.
* testsuite/27_io/basic_fstream/cons/wchar_t/1.cc: New.
* testsuite/27_io/basic_fstream/open/wchar_t/1.cc: New.

From-SVN: r260479

6 years agore PR libstdc++/85845 (Many libstdc++ test failures)
François Dumont [Mon, 21 May 2018 16:51:47 +0000 (16:51 +0000)]
re PR libstdc++/85845 (Many libstdc++ test failures)

2018-05-21  François Dumont  <fdumont@gcc.gnu.org>

PR libstdc++/85845
* include/bits/stl_tree.h
(_Rb_tree_impl(_Rb_tree_impl&&, _Node_allocator&&)): Fix noexcept
qualification.

From-SVN: r260478

6 years ago[AArch64][committed] Fix gcc.target/aarch64/vec_init_1.c for tiny and large mcmodels
Kyrylo Tkachov [Mon, 21 May 2018 15:58:32 +0000 (15:58 +0000)]
[AArch64][committed] Fix gcc.target/aarch64/vec_init_1.c for tiny and large mcmodels

This recently-committed test fails the INS scan for tiny and large memory models.
That is because instead of the:
make_vector:
         adrp    x1, a
         adrp    x0, b
         movi    v0.4s, 0
         ldr     s2, [x1, #:lo12:a]
         ldr     s1, [x0, #:lo12:b]
         ins     v0.s[2], v2.s[0]
         ins     v0.s[3], v1.s[0]
         ret

That we generate for the default small model, we end up with a simple register
addressing mode with no addend/offset for the lane load:
make_vector:
         movi    v0.4s, 0
         adr     x1, a
         adr     x0, b
         ld1     {v0.s}[2], [x1]
         ld1     {v0.s}[3], [x0]
         ret

and

make_vector:
         movi    v0.4s, 0
         adrp    x0, .LC0
         ldr     x1, [x0, #:lo12:.LC0]
         adrp    x0, .LC1
         ldr     x0, [x0, #:lo12:.LC1]
         ld1     {v0.s}[2], [x1]
         ld1     {v0.s}[3], [x0]
         ret

So we end up merging the load and the lane insert.
This patch adjusts the testcase to scan for the right thing accordingly.
Checked that the testcase passes with -mcmodel=tiny, -mcmodel=small, -mcmodel=large.

* gcc.target/aarch64/vec_init_1.c: Scan for LD1 instead of INS for
tiny and large memory models.

From-SVN: r260474

6 years agoFix bogous dates in gcc/ada/ChangeLog
Pierre-Marie de Rodat [Mon, 21 May 2018 14:57:38 +0000 (14:57 +0000)]
Fix bogous dates in gcc/ada/ChangeLog

From-SVN: r260472

6 years ago[Ada] Spurious warning on object declaration with address clause
Ed Schonberg [Mon, 21 May 2018 14:52:36 +0000 (14:52 +0000)]
[Ada] Spurious warning on object declaration with address clause

The compiler warns on an object declaration with default initialization
and an address clause, to indicate that the overlay implied by the address
clause might affect a value elsewhere. The warning is suppressed if the type
carries the Suppress_Initialization aspect. With this patch the compiler
also inhibits the warning if the aspect is specified for the object itself.

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

gcc/ada/

* freeze.adb (Warn_Overlay): Do not emit a wawrning on an object
declaration with an explicit address clause and a type with default
initialization, if the declaration carries an aspect
Suppress_Initialization.

gcc/testsuite/

* gnat.dg/suppress_initialization.adb,
gnat.dg/suppress_initialization_pkg.ads: New testcase.

From-SVN: r260471

6 years ago[Ada] Pretty-print attribute names using mixed case
Daniel Mercier [Mon, 21 May 2018 14:52:31 +0000 (14:52 +0000)]
[Ada] Pretty-print attribute names using mixed case

2018-05-21  Daniel Mercier  <mercier@adacore.com>

gcc/ada/

* pprint.adb: Use mixed case for attribute names.

From-SVN: r260470

6 years ago[Ada] Aspects on stubs
Hristian Kirtchev [Mon, 21 May 2018 14:52:24 +0000 (14:52 +0000)]
[Ada] Aspects on stubs

This patch ensures that aspect specifications which appear on package,
protected, and task body stubs are properly analyzed.

------------
-- Source --
------------

--  pack.ads

package Pack
  with SPARK_Mode,
       Abstract_State => State
is
   -------------------------------------
   -- Refined_Depends, Refined_Global --
   -------------------------------------

   procedure Proc_1;
   procedure Proc_2
     with Global  => (In_Out => State),
          Depends => (State  => State);

   task Task_Obj_1;
   task Task_Obj_2
     with Global  => (In_Out => State),
          Depends => (State  => State);

   ------------------
   -- Refined_Post --
   ------------------

   function Func_1 (Formal : Integer) return Integer;
   function Func_2 (Formal : Integer) return Integer
     with Post => Func_2'Result > Formal;

   -------------------
   -- Refined_State --
   -------------------

   package Pack_1 is end Pack_1;
   package Pack_2 with Abstract_State => State_2 is end Pack_2;

   ----------------
   -- SPARK_Mode --
   ----------------

   package Pack_3 with SPARK_Mode => Off is end Pack_3;
   package Pack_4 with SPARK_Mode => Off is end Pack_4;
   package Pack_5 is end Pack_5;

   protected type Prot_Typ_1 with SPARK_Mode => Off is end Prot_Typ_1;
   protected type Prot_Typ_2 with SPARK_Mode => Off is end Prot_Typ_2;
   protected type Prot_Typ_3 is end Prot_Typ_3;

   procedure Proc_3 with SPARK_Mode => Off;
   procedure Proc_4 with SPARK_Mode => Off;
   procedure Proc_5;

   task type Task_Typ_1 with SPARK_Mode => Off;
   task type Task_Typ_2 with SPARK_Mode => Off;
   task type Task_Typ_3;
end Pack;

--  pack.adb

package body Pack
  with SPARK_Mode,
       Refined_State => (State => Constit)
is
   Constit : Integer := 0;

   -------------------------------------
   -- Refined_Depends, Refined_Global --
   -------------------------------------

   procedure Proc_1 is separate
     with Refined_Global  => (In_Out  => Constit),                   --  Error
          Refined_Depends => (Constit => Constit);                   --  Error

   procedure Proc_2 is separate
     with Refined_Global  => (In_Out  => Constit),                   --  OK
          Refined_Depends => (Constit => Constit);                   --  OK

   task body Task_Obj_1 is separate
     with Refined_Global  => (In_Out  => Constit),                   --  Error
          Refined_Depends => (Constit => Constit);                   --  Error

   task body Task_Obj_2 is separate
     with Refined_Global  => (In_Out  => Constit),                   --  OK
          Refined_Depends => (Constit => Constit);                   --  OK

   ------------------
   -- Refined_Post --
   ------------------

   function Func_1 (Formal : Integer) return Integer is separate
     with Refined_Post => Func_1'Result > Formal;                    --  OK

   function Func_2 (Formal : Integer) return Integer is separate
     with Refined_Post => Func_2'Result > Formal;                    --  OK

   -------------------
   -- Refined_State --
   -------------------

   package body Pack_1 is separate
     with Refined_State => (State_1 => Constit_1);                   --  Error

   package body Pack_2 is separate
     with Refined_State => (State_2 => Constit_2);                   --  Error

   ----------------
   -- SPARK_Mode --
   ----------------

   package body Pack_3 is separate with SPARK_Mode => On;            --  Error
   package body Pack_4 is separate;
   package body Pack_5 is separate with SPARK_Mode => Off;           --  Error

   protected body Prot_Typ_1 is separate with SPARK_Mode => On;      --  Error
   protected body Prot_Typ_2 is separate;
   protected body Prot_Typ_3 is separate with SPARK_Mode => Off;     --  Error

   procedure Proc_3 is separate with SPARK_Mode => On;               --  Error
   procedure Proc_4 is separate;
   procedure Proc_5 is separate with SPARK_Mode => Off;              --  Error

   task body Task_Typ_1 is separate with SPARK_Mode => On;           --  Error
   task body Task_Typ_2 is separate;
   task body Task_Typ_3 is separate with SPARK_Mode => Off;          --  Error
end Pack;

--  pack-func_1.adb

separate (Pack)

function Func_1 (Formal : Integer) return Integer
  with Refined_Post => Func_1'Result > Formal                        --  Error
is
begin
   return Formal * 10;
end Func_1;

--  pack-func_2.adb

separate (Pack)

function Func_2 (Formal : Integer) return Integer
  with Refined_Post => Func_2'Result > Formal                        --  Error
is
begin
   return Formal * 10;
end Func_2;

--  pack-pack_1.adb

separate (Pack)

package body Pack_1
  with SPARK_Mode,
       Refined_State => (State_1 => Constit_1)                       --  Error
is
   Constit_1 : Integer := 1;
end Pack_1;

--  pack-pack_2.adb

separate (Pack)

package body Pack_2
  with SPARK_Mode,
       Refined_State => (State_2 => Constit_2)                       --  OK
is
   Constit_2 : Integer := 2;
end Pack_2;

--  pack-pack_3.adb

separate (Pack)

package body Pack_3 is end Pack_3;

--  pack-pack_4.adb

separate (Pack)

package body Pack_4 with SPARK_Mode => On is end Pack_4;             --  OK

--  pack-pack_5.adb

separate (Pack)

package body Pack_5 with SPARK_Mode => On is end Pack_5;             --  OK

--  pack-proc_1.adb

separate (Pack)

procedure Proc_1
  with Refined_Global  => (In_Out  => Constit),                      --  Error
       Refined_Depends => (Constit => Constit)                       --  Error
is begin null; end Proc_1;

--  pack-proc_2.adb

separate (Pack)

procedure Proc_2
  with Refined_Global  => (In_Out  => Constit),                      --  Error
       Refined_Depends => (Constit => Constit)                       --  Error
is begin null; end Proc_2;

--  pack-proc_3.adb

separate (Pack)

procedure Proc_3 is begin null; end Proc_3;

--  pack-proc_4.adb

separate (Pack)

procedure Proc_4 with SPARK_Mode => On is begin null; end Proc_4;    --  OK

--  pack-proc_5.adb

separate (Pack)

procedure Proc_5 with SPARK_Mode => On is begin null; end Proc_5;    --  OK

--  pack-prot_typ_1.adb

separate (Pack)

protected body Prot_Typ_1 is end Prot_Typ_1;

--  pack-prot_typ_2.adb

separate (Pack)

protected body Prot_Typ_2 with SPARK_Mode => On is end Prot_Typ_2;   --  OK

--  pack-prot_typ_3.adb

separate (Pack)

protected body Prot_Typ_3 with SPARK_Mode => On is end Prot_Typ_3;   --  OK

--  pack-task_obj_1.adb

separate (Pack)

task body Task_Obj_1
  with Refined_Global  => (In_Out  => Constit),                      --  Error
       Refined_Depends => (Constit => Constit)                       --  Error
is begin null; end Task_Obj_1;

--  pack-task_obj_2.adb

separate (Pack)

task body Task_Obj_2
  with Refined_Global  => (In_Out  => Constit),                      --  Error
       Refined_Depends => (Constit => Constit)                       --  Error
is begin null; end Task_Obj_2;

--  pack-task_typ_1.adb

separate (Pack)

task body Task_Typ_1 is begin null; end Task_Typ_1;

--  pack-task_typ_2.adb

separate (Pack)

task body Task_Typ_2 with SPARK_Mode => On is                        --  OK
begin null; end Task_Typ_2;

--  pack-task_typ_3.adb

separate (Pack)

task body Task_Typ_3 with SPARK_Mode => On is                        --  OK
begin null; end Task_Typ_3;

----------------------------
-- Compilation and output --
----------------------------

$ gcc -c pack.adb
pack.adb:12:11: useless refinement, declaration of subprogram "Proc_1" lacks
  aspect or pragma Global
pack.adb:13:11: useless refinement, declaration of subprogram "Proc_1" lacks
  aspect or pragma Depends
pack.adb:20:11: useless refinement, declaration of task type "Task_Obj_1" lacks
  aspect or pragma Global
pack.adb:21:11: useless refinement, declaration of task type "Task_Obj_1" lacks
  aspect or pragma Depends
pack.adb:42:11: aspect "Refined_State" must apply to a package body
pack.adb:45:11: aspect "Refined_State" must apply to a package body
pack.adb:51:41: incorrect placement of aspect "Spark_Mode"
pack.adb:53:41: incorrect placement of aspect "Spark_Mode"
pack.adb:55:47: incorrect placement of aspect "Spark_Mode"
pack.adb:57:47: incorrect placement of aspect "Spark_Mode"
pack.adb:59:38: incorrect placement of aspect "Spark_Mode"
pack.adb:61:38: incorrect placement of aspect "Spark_Mode"
pack.adb:63:42: incorrect placement of aspect "Spark_Mode"
pack.adb:65:42: incorrect placement of aspect "Spark_Mode"
pack-proc_1.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
pack-proc_1.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
pack-proc_2.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
pack-proc_2.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
pack-task_obj_1.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
pack-task_obj_1.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
pack-task_obj_2.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
pack-task_obj_2.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
pack-func_1.adb:4:08: aspect "Refined_Post" cannot apply to a subunit
pack-func_2.adb:4:08: aspect "Refined_Post" cannot apply to a subunit
pack-pack_1.adb:3:14: body of package "Pack_1" has unused hidden states
pack-pack_1.adb:3:14: variable "Constit_1" defined at line 7
pack-pack_1.adb:5:08: useless refinement, package "Pack_1" does not define
  abstract states
pack-pack_1.adb:5:26: "State_1" is undefined
pack-pack_3.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
pack-pack_3.adb:3:01: value Off was set for SPARK_Mode on "Pack_3" at
  pack.ads:38
pack-pack_4.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
pack-pack_4.adb:3:01: value Off was set for SPARK_Mode on "Pack_4" at
  pack.ads:39
pack-pack_4.adb:3:26: incorrect use of SPARK_Mode
pack-pack_4.adb:3:26: value Off was set for SPARK_Mode on "Pack_4" at
  pack.ads:39
pack-prot_typ_2.adb:3:32: incorrect use of SPARK_Mode
pack-prot_typ_2.adb:3:32: value Off was set for SPARK_Mode on "Prot_Typ_2" at
  pack.ads:43
pack-proc_3.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
pack-proc_3.adb:3:01: value Off was set for SPARK_Mode on "Proc_3" at
  pack.ads:46
pack-proc_4.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
pack-proc_4.adb:3:01: value Off was set for SPARK_Mode on "Proc_4" at
  pack.ads:47
pack-proc_4.adb:3:23: incorrect use of SPARK_Mode
pack-proc_4.adb:3:23: value Off was set for SPARK_Mode on "Proc_4" at
  pack.ads:47
pack-task_typ_2.adb:3:27: incorrect use of SPARK_Mode
pack-task_typ_2.adb:3:27: value Off was set for SPARK_Mode on "Task_Typ_2" at
  pack.ads:51

2018-05-21  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* sem_ch6.adb (Analyze_Generic_Subprogram_Body): Rename the call to
Analyze_Aspect_Specifications_On_Body_Or_Stub.
(Analyze_Subprogram_Body_Helper): Rename the calls to
Analyze_Aspect_Specifications_On_Body_Or_Stub.
* sem_ch9.adb (Analyze_Entry_Body): Rename the call to
Analyze_Aspect_Specifications_On_Body_Or_Stub.
* sem_ch10.adb: Add with and use clause for Sem_Ch13.
(Analyze_Package_Body_Stub): Add constant Id. Decorate the package stub
prior to analyzing its aspects.
(Analyze_Protected_Body_Stub): Add constant Id. Decorate the package
stub prior to analyzing its aspects. Save and restore the configuration
switches.
(Analyze_Task_Body_Stub): Add constant Id. Decorate the package stub
prior to analyzing its aspects.
* sem_ch13.adb (Analyze_Aspect_Specifications_On_Body_Or_Stub): Renamed
to Analyze_Aspects_On_Subprogram_Body_Or_Stub.
* sem_ch13.ads (Analyze_Aspect_Specifications_On_Body_Or_Stub): Renamed
to Analyze_Aspects_On_Subprogram_Body_Or_Stub.
* sem_prag.adb: Code reformatting.
(Analyze_Refined_Depends_Global_Post): Consider task body stubs.

From-SVN: r260469

6 years ago[Ada] Add g-soliop__qnx.ads to the runtime build
Jerome Lambourg [Mon, 21 May 2018 14:52:19 +0000 (14:52 +0000)]
[Ada] Add g-soliop__qnx.ads to the runtime build

This properly links with libsocket when needed by the user code.

2018-05-21  Jerome Lambourg  <lambourg@adacore.com>

gcc/ada/

* gcc-interface/Makefile.in: Add g-soliop__qnx.ads to the runtime build
for QNX.

From-SVN: r260468

6 years ago[Ada] Spurious error on early call region of tagged type
Hristian Kirtchev [Mon, 21 May 2018 14:52:11 +0000 (14:52 +0000)]
[Ada] Spurious error on early call region of tagged type

This patch corrects the part of the access-before-elaboration mechanism which
ensures that the freeze node of a tagged type is within the early call region
of all its overriding bodies to ignore predefined primitives.

------------
-- Source --
------------

--  pack.ads

package Pack with SPARK_Mode is
   type Parent_Typ is tagged null record;
   procedure Prim (Obj : Parent_Typ);

   type Deriv_Typ is new Parent_Typ with private;
   overriding procedure Prim (Obj : Deriv_Typ);

private
   type Deriv_Typ is new Parent_Typ with null record;
end Pack;

-----------------
-- Compilation --
-----------------

$ gcc -c pack.ads

2018-05-21  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* exp_cg.adb: Remove with and use clause for Exp_Disp.
* exp_ch9.adb: Remove with and use clause for Exp_Disp.
* exp_disp.adb (Is_Predefined_Dispatching_Operation): Moved to Sem_Util.
(Is_Predefined_Interface_Primitive): Moved to Sem_Util.
(Is_Predefined_Internal_Operation): Moved to Sem_Util.
* exp_disp.ads (Is_Predefined_Dispatching_Operation): Moved to Sem_Util.
(Is_Predefined_Interface_Primitive): Moved to Sem_Util.
(Is_Predefined_Internal_Operation): Moved to Sem_Util.
* exp_dist.adb: Remove with and use clause for Exp_Disp.
* freeze.adb: Remove with and use clause for Exp_Disp.
* sem_cat.adb: Remove with and use clause for Exp_Disp.
* sem_ch6.adb: Remove with and use clause for Exp_Disp.
* sem_ch12.adb: Remove with and use clause for Exp_Disp.
* sem_elab.adb (Check_Overriding_Primitive): Do not process predefined
primitives.
* sem_util.adb: Remove with and use clause for Exp_Disp.
(Is_Predefined_Dispatching_Operation): Moved from Exp_Disp.
(Is_Predefined_Interface_Primitive): Moved from Exp_Disp.
(Is_Predefined_Internal_Operation): Moved from Exp_Disp.
* sem_util.ads (Is_Predefined_Dispatching_Operation): Moved from
Exp_Disp.
(Is_Predefined_Interface_Primitive): Moved from Exp_Disp.
(Is_Predefined_Internal_Operation): Moved from Exp_Disp.

From-SVN: r260467

6 years ago[Ada] Error message on invalid conversion involving limited views
Ed Schonberg [Mon, 21 May 2018 14:52:05 +0000 (14:52 +0000)]
[Ada] Error message on invalid conversion involving limited views

A type conversion may be illegal if the expression in the conversion has a
limited view of a type. This patch expands the error report to indicate the
presence of a limited view, and when the context is a package body it suggests
the addition of a regular with-clause to make the full view available.

Compiling client.adb must yield:

   client.adb:6:16: invalid conversion, not compatible with limited view
      of type "Map_Type" defined at maps.ads:2
   client.adb:6:16: add with_clause for "Maps" to current unit

----
package Maps is
  type Map_Type is null record;
end;
----
limited with Maps;
package Payloads is
  function Get_Map return access Maps.Map_Type;
end;
----
with Maps;
package Maps2 is
  type New_Map_Type is new Maps.Map_Type;
end;
----
with Maps2;
package Client is
  procedure Foo (Map : Maps2.New_Map_Type) is null;
  procedure Bar;
end;
----
with Payloads;
package body Client is
  procedure Bar is
  begin
     Foo (Maps2.New_Map_Type (Payloads.Get_Map.all));
  end;
end;

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

gcc/ada/

* sem_res.adb (Valid_Conversion): Improve error message on an illegal
type conversion whose expression has a limited view of a type.

From-SVN: r260466

6 years ago[Ada] Exit statement in loops over iterable objects
Ed Schonberg [Mon, 21 May 2018 14:52:00 +0000 (14:52 +0000)]
[Ada] Exit statement in loops over iterable objects

This patch fixes an omission in the expansion of loops over GNAT-specific
iterable objects. If the source includes an explicit name for the loop,
that name has to be preserved in the expanded code to allow exit statements
to mention it.

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

gcc/ada/

* exp_ch5.adb (Build_Formal_Container_Iteration): If source has
explicit name for iterator loop, preserve that name in expanded
construct, for possible use in exit statements.

gcc/testsuite/

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

From-SVN: r260465

6 years ago[Ada] Avoid compiler crash for body in non Ada 2012 mode
Javier Miranda [Mon, 21 May 2018 14:51:55 +0000 (14:51 +0000)]
[Ada] Avoid compiler crash for body in non Ada 2012 mode

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

gcc/ada/

* sem_ch4.adb (Analyze_Membership_Op): Avoid compiler crash when the
spec of a unit has Ada 2012 membership tests with multiple choices and
the unit body is not compiled under Ada 2012 mode.

From-SVN: r260464

6 years ago[Ada] Enhance stack unwinding on VxWorks for AArch64
Doug Rupp [Mon, 21 May 2018 14:51:48 +0000 (14:51 +0000)]
[Ada] Enhance stack unwinding on VxWorks for AArch64

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

gcc/ada/

* sigtramp-vxworks-target.inc: Set cfa_reg properly from sigcontext
pregs.
(CFI_COMMON_REGS): Restore LR jic probed from prologue.
(REGNO_PC_OFFSET): Change to correct value for Aarch64.

From-SVN: r260463

6 years ago[Ada] Minor typo fixes
Jose Ruiz [Mon, 21 May 2018 14:51:42 +0000 (14:51 +0000)]
[Ada] Minor typo fixes

2018-05-21  Jose Ruiz  <ruiz@adacore.com>

gcc/ada/

* doc/gnat_ugn/gnat_utility_programs.rst, exp_attr.adb,
libgnarl/s-tassta.adb: Minor typo fixes

From-SVN: r260462

6 years ago[Ada] Spurious error on indexed call as prefix of a call
Ed Schonberg [Mon, 21 May 2018 14:51:35 +0000 (14:51 +0000)]
[Ada] Spurious error on indexed call as prefix of a call

This patch refines the handling of the well-known syntactic ambiguity created
by a function with defaulted parameters that returns an array, so that F (X)
may designate a call to the function, or an indexing of a parameterless call.
This patch handles the case where such a call is itself the prefix of another
call, and the function is a primitive operation invoked in prefix form.

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

gcc/ada/

* sem_ch4.adb (Analyze_One_Call): Recognize complex cases where an
indexed call originally in prefix forn is itself the prefix of a
further call.

gcc/testsuite/

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

From-SVN: r260461

6 years ago[Ada] Clarify code for accessing full view of a type
Piotr Trojanek [Mon, 21 May 2018 14:51:30 +0000 (14:51 +0000)]
[Ada] Clarify code for accessing full view of a type

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

gcc/ada/

* sem_eval.adb (Is_Null_Range): Clarify access to the full view of a
type.
(Not_Null_Range): Same as above.

From-SVN: r260460

6 years ago[Ada] Minor reformatting
Hristian Kirtchev [Mon, 21 May 2018 14:51:25 +0000 (14:51 +0000)]
[Ada] Minor reformatting

2018-05-21  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* exp_ch3.adb: Minor reformatting.
* exp_ch6.adb: Likewise.
* freeze.adb: Likewise.
* inline.adb: Likewise.
* sem_util.adb: Likewise.

From-SVN: r260459

6 years ago[Ada] Use type conversion when inlining may trigger a run-time check
Yannick Moy [Mon, 21 May 2018 14:51:19 +0000 (14:51 +0000)]
[Ada] Use type conversion when inlining may trigger a run-time check

In the frontend inlining used in GNATprove, inlining of a return statement
was using an unchecked type conversion, which could cause a necessary
run-time check on the conversion to be skipped. Now fixed.

There is no impact on compilation.

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

gcc/ada/

* inline.adb (Expand_Inlined_Call.Process_Formals): Use a type
conversion instead of an unchecked type conversion when inlining a
return statement, unless type qualification is required (for character
and string literal) or no check can result from the conversion (for
access types).
* opt.ads: Update comment.

From-SVN: r260458

6 years ago[Ada] Placement of pragma Elaboration_Checks
Hristian Kirtchev [Mon, 21 May 2018 14:51:15 +0000 (14:51 +0000)]
[Ada] Placement of pragma Elaboration_Checks

This patch modifies the semantics of pragma Elaboration_Checks. The pragma
was intended to be a configuration pragma, however its placement was never
verified until now.

The pragma may appear in the following contexts:

   * Configuration pragmas file

   * Prior to the context clauses of a compilation unit's initial declaration

Any other placement of the pragma will result in a warning and the effects of
the offending pragma will be ignored.

------------
-- Source --
------------

--  elab_checks_1.adc

pragma Elaboration_Checks (Dynamic);

--  elab_checks_2.adc

pragma Elaboration_Checks (Dynamic);
pragma Elaboration_Checks (Static);                                  --  Error

--  pack_1.ads

pragma Elaboration_Checks (Static);                                  --  OK

package Pack_1 is
end Pack_1;

--  pack_2.ads

pragma Elaboration_Checks (Static);                                  --  OK
pragma Elaboration_Checks (Static);                                  --  Error

package Pack_2 is
end Pack_2;

--  pack_3.ads

package Pack_3 is
   procedure Proc;
end Pack_3;

--  pack_3.adb

pragma Elaboration_Checks (Static);                                  --  Error

package body Pack_3 is
   procedure Proc is begin null; end Proc;
end Pack_3;

--  pack_4.ads

package Pack_4 is
   procedure Proc;
end Pack_4;

--  pack_4.adb

package body Pack_4 is
   procedure Proc is separate;
end Pack_4;

--  pack_4-proc.adb

pragma Elaboration_Checks (Static);                                  --  Error

separate (Pack_4)
procedure Proc is begin null; end Proc;

--  gen.ads

generic
   with function Called_At_Elaboration return Boolean;

package Gen is
   procedure Proc;
end Gen;

--  gen.adb

package body Gen is
   procedure Proc is
      Obj : constant Boolean := Called_At_Elaboration;
   begin null; end Proc;
begin
   Proc;
end Gen;

--  abe_static.ads

pragma Elaboration_Checks (Static);

with Gen;

package ABE_Static is
   function ABE return Boolean;

   package Inst_1 is new Gen (ABE);
end ABE_Static;

--  abe_static.adb

package body ABE_Static is
   package Inst_2 is new Gen (ABE);

   package Subunit is
   end Subunit;

   package body Subunit is separate;

   function ABE return Boolean is
   begin
      return True;
   end ABE;
end ABE_Static;

--  abe_static-subunit.adb

separate (ABE_Static)

package body Subunit is
   package Inst_3 is new Gen (ABE);

   package Nested_Subunit is
   end Nested_Subunit;

   package body Nested_Subunit is separate;
end Subunit;

--  abe_static-subunit-nested_subunit.adb

separate (ABE_Static.Subunit)

package body Nested_Subunit is
   package Inst_4 is new Gen (ABE);
end Nested_Subunit;

--  abe_static_main.adb

with ABE_Static;

procedure ABE_Static_Main is begin null; end ABE_Static_Main;

----------------------------
-- Compilation and output --
----------------------------

$ gcc -c pack_1.ads -gnatec=elab_checks_1.adc
$ gcc -c pack_1.ads -gnatec=elab_checks_2.adc
$ gcc -c pack_1.ads
$ gcc -c pack_2.ads
$ gcc -c pack_3.adb
$ gcc -c pack_4.adb
$ gnatmake -q -gnatE abe_static_main.adb
elab_checks_2.adc:2:01: pragma "Elaboration_Checks" duplicates pragma declared
  at line 1
pack_2.ads:2:01: pragma "Elaboration_Checks" duplicates pragma declared at line
  1
pack_3.adb:1:01: warning: effects of pragma "Elaboration_Checks" are ignored
pack_3.adb:1:01: warning: place pragma on initial declaration of library unit
pack_4-proc.adb:1:01: warning: effects of pragma "Elaboration_Checks" are
  ignored
pack_4-proc.adb:1:01: warning: place pragma on initial declaration of library
  unit
abe_static.adb:2:04: warning: in instantiation at gen.adb:3
abe_static.adb:2:04: warning: cannot call "ABE" before body seen
abe_static.adb:2:04: warning: Program_Error may be raised at run time
abe_static.adb:2:04: warning:   body of unit "ABE_Static" elaborated
abe_static.adb:2:04: warning:   procedure "Proc" called at gen.adb:6, instance
  at line 2
abe_static.adb:2:04: warning:   function "ABE" called at gen.adb:3, instance at
  line 2
abe_static.ads:8:04: warning: in instantiation at gen.adb:3
abe_static.ads:8:04: warning: cannot call "ABE" before body seen
abe_static.ads:8:04: warning: Program_Error may be raised at run time
abe_static.ads:8:04: warning:   spec of unit "ABE_Static" elaborated
abe_static.ads:8:04: warning:   procedure "Proc" called at gen.adb:6, instance
  at line 8
abe_static.ads:8:04: warning:   function "ABE" called at gen.adb:3, instance at
  line 8
abe_static-subunit.adb:4:04: warning: in instantiation at gen.adb:3
abe_static-subunit.adb:4:04: warning: cannot call "ABE" before body seen
abe_static-subunit.adb:4:04: warning: Program_Error may be raised at run time
abe_static-subunit.adb:4:04: warning:   body of unit "ABE_Static" elaborated
abe_static-subunit.adb:4:04: warning:   procedure "Proc" called at gen.adb:6,
  instance at line 4
abe_static-subunit.adb:4:04: warning:   function "ABE" called at gen.adb:3,
  instance at line 4
abe_static-subunit-nested_subunit.adb:4:04: warning: in instantiation at
  gen.adb:3
abe_static-subunit-nested_subunit.adb:4:04: warning: cannot call "ABE" before
  body seen
abe_static-subunit-nested_subunit.adb:4:04: warning: Program_Error may be
  raised at run time
abe_static-subunit-nested_subunit.adb:4:04: warning:   body of unit
  "ABE_Static" elaborated
abe_static-subunit-nested_subunit.adb:4:04: warning:   procedure "Proc" called
  at gen.adb:6, instance at line 4
abe_static-subunit-nested_subunit.adb:4:04: warning:   function "ABE" called at
  gen.adb:3, instance at line 4
warning: "abe_static_main.adb" has dynamic elaboration checks and with's
warning:   "abe_static.ads" which has static elaboration checks

2018-05-21  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Install the elaboration
model of the compilation unit spec, if any.
* sem_ch7.adb (Analyze_Package_Body_Helper): Install the elaboration
model of the compilation unit spec, if any.
* sem_ch10.adb (Analyze_Subunit): Install the elaboration model of the
parent compilation unit spec, if any.
* sem_elab.adb (Check_Elaboration_Scenarios): Restore the elaboration
model of the main unit.
(Is_Same_Unit): The routine now uses Unit_Entity.
(Is_Subunit): Removed.
(Normalize_Unit): Removed.
(Unit_Entity): New routine.
* sem_prag.adb (Analyze_Pragma): Reimplement the handling of pragma
Elaboration_Checks. The analysis now ensures that the pragma appears at
the configuration level, and on the initial declaration of a unit.
Other placements are either flagged as illegal, or ignored.
(Check_Duplicate_Elaboration_Checks_Pragma): New routine.
(Ignore_Elaboration_Checks_Pragma): New routine.
* sem_util.adb (Install_Elaboration_Model): New routine.
* sem_util.ads (Install_Elaboration_Model): New routine.
* doc/gnat_rm/implementation_defined_pragmas.rst: Update the
documentation of pragma Elaboration_Checks.
* gnat_rm.texi: Regenerate.

From-SVN: r260457

6 years ago[Ada] Robustify traceback caching for executable in current dir
Olivier Hainque [Mon, 21 May 2018 14:51:09 +0000 (14:51 +0000)]
[Ada] Robustify traceback caching for executable in current dir

Any program calling Gnat.Traceback.Symbolic.Enable_Cache for
dwarf based symbolization fails with a segmentation violation
when spawned with an inaccurate argv[0] such that it couldn't
be found on PATH.

argv[0] is most often found on PATH. One plausible case where
it isn't is when argv[0] is a mere file name and . isn't on PATH,
which might happen out of imprecise exec calls.

This change robustifies the Traceback.Symbolic implementation
to work in this case as well, by just trying to work with argv[0]
untouched as the executable file to fetch dwarf info from.

2018-05-21  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

* libgnat/s-trasym__dwarf.adb (Executable_Name): Return argv[0] instead
of empty string when argv[0] couldn't be found on PATH.
(Enable_Cache): Raise Program_Error instead of attempting a null
pointer dereference when the Exec_Module initialization failed.

From-SVN: r260456

6 years ago[Ada] Remove External aspect from predefined abstract states
Piotr Trojanek [Mon, 21 May 2018 14:51:04 +0000 (14:51 +0000)]
[Ada] Remove External aspect from predefined abstract states

Explicit External aspect was an equivalant to an implicit default.  It was only
needed as a workaround for a frontend bug. (If it meant to serve as
documentation, there should be explicit Effective_Reads and Effective_Writes
set to False too.)

No test, because these changes are semantically neutral.

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

gcc/ada/

* libgnarl/a-reatim.ads (Clock_Time): Remove External aspect.
* libgnarl/a-taside.ads (Tasking_State): Likewise.
* libgnat/a-calend.ads (Clock_Time): Likewise.

From-SVN: r260455

6 years ago[Ada] Spurious error in inlining for GNATprove on prefix call notation
Yannick Moy [Mon, 21 May 2018 14:50:59 +0000 (14:50 +0000)]
[Ada] Spurious error in inlining for GNATprove on prefix call notation

During the special inlining done in GNATprove mode, a call in prefix
notation leads to a spurious error. Now fixed.

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

gcc/ada/

* sem_ch6.adb (Analyze_Procedure_Call): Refine test to recognize prefix
call notation in inlined call in GNATprove mode.

From-SVN: r260454

6 years ago[Ada] Spurious error on synchronous refinement
Hristian Kirtchev [Mon, 21 May 2018 14:50:54 +0000 (14:50 +0000)]
[Ada] Spurious error on synchronous refinement

This patch ensures that an abstract state declared with simple option
"synchronous" is automatically considered "external".

2018-05-21  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* einfo.adb (Is_External_State): An abstract state is also external
when it is declared with option "synchronous".
* einfo.ads: Update the documentation of synthesized attribute
Is_External_State.
* sem_util.adb (Find_Simple_Properties): New routine.
(Is_Enabled_External_Property): New routine.
(State_Has_Enabled_Property): Reimplemented. The two flavors of option
External have precedence over option Synchronous when determining
whether a property is in effect.

gcc/testsuite/

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

From-SVN: r260453

6 years ago[Ada] Crash on incorrect frontend inlining in GNATprove mode
Yannick Moy [Mon, 21 May 2018 14:50:49 +0000 (14:50 +0000)]
[Ada] Crash on incorrect frontend inlining in GNATprove mode

In some cases, the inlining performed in GNATprove mode leads to a crash,
when inlining a call where a return statement of the inlined function
returns a string literal. Now fixed.

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

gcc/ada/

* sem_eval.adb (Static_Length): Take into account case of variable of
subtype string literal.

From-SVN: r260452

6 years ago[Ada] Tighten Object_Reader.Get_Memory_Bounds
Olivier Hainque [Mon, 21 May 2018 14:50:44 +0000 (14:50 +0000)]
[Ada] Tighten Object_Reader.Get_Memory_Bounds

Symbolization of traceback entries from dwarf info was
failing in some cases with shared libraries on ELF targets,
from unexpected overlapping of what we believed were code
regions for distinct modules.

This is caused by the inclusion of all SHF_ALLOC sections in
the set of sections of possible relevance to determine the span
of possible code addresses for a module.

This change renames the Get_memory_Bound subprogram to better
convey that we really care about sections hosting executable code
in particular, matching what the spec comments already claims.

It also renames the boolean flag conveying the info of relevance
in the Object_Section record, and adjusts the ELF implementation
of Get_Section to feed this flag from SHF_EXECINSTR instead of
SHF_ALLOC.

2018-05-21  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

* libgnat/s-objrea.ads (Get_Memory_Bounds): Rename as Get_Xcode_Bounds.
(Object_Section): Rename Flag_Alloc component as Flag_Xcode.
* libgnat/s-objrea.adb (Get_Xcode_Bounds): Adjust to new subprogram and
component name.
(Get_Section, ELF case): Set Flag_Xcode from SHF_EXECINSTR.
* libgnat/s-dwalin.adb (Open): Adjust to the Get_Memory_Bounds name
change.

From-SVN: r260451

6 years ago[Ada] Robustify traceback symbolization from dwarf info
Olivier Hainque [Mon, 21 May 2018 14:50:38 +0000 (14:50 +0000)]
[Ada] Robustify traceback symbolization from dwarf info

Symbolization of traceback entries from dwarf info is
failing in multiple cases for addresses originating from
shared libraries.

Part of the problem is a confusion across different functions
regarding the kind of "address" at hand, sometimes full process
runtime addresses (e.g. in traceback entries), sometimes module
relative (e.g. in dwarf info segments).

This change fixes this by introducing the use of distinct types
for the two kinds of addresses, resorting to System.Address
for runtime addresses and to Storage_Elements.Storage_Offset
for module relative values. The accompanying code changes
tidy a few places where we can now use standard operators
to combine offets & addresses, and include a few corrections
of consistency problems at spots where comparisons were done
between runtime addresses and relative offsets.

2018-05-21  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

* libgnat/s-dwalin.ads (Dwarf_Context): Change type of Load_Address to
Address, and type of Low, High to Storage_Offset.
(Low): Rename as Low_Address and convey that the return value is a
runtime reference accounting for a load address.
* libgnat/s-dwalin.adb (Read_Aranges_Entry): Adjust to the
address/offset type changes.
(Aranges_Lookup): Likewise.
(Symbolic_Address): Likewise.
(Symbolic_Traceback): Likewise.
(Dump_Cache): Likewise.
(Is_Inside): Likewise.
(Open): Likewise.
(Set_Load_Address): Likewise.
(Low_Address): Likewise, and account for C.Load_Address.
* libgnat/s-trasym__dwarf.adb (Lt): Use Low_Address instead of Low.
(Multi_Module_Symbolic_Traceback): Compare address in traceback
with module Low_Address instead of Low.

From-SVN: r260450

6 years ago[Ada] Rename Load_Slide internal runtime component as Load_Address
Olivier Hainque [Mon, 21 May 2018 14:50:33 +0000 (14:50 +0000)]
[Ada] Rename Load_Slide internal runtime component as Load_Address

Load_Address is just more consistent with the overall use of the component.

2018-05-21  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

* libgnat/s-dwalin.ads (Dwarf_Context): Rename Load_Slide as
Load_Address.
* libgnat/s-dwalin.adb (Is_Inside): Adjust accordingly.
(Set_Load_Address): Likewise.
(Symbolic_Traceback): Likewise.

From-SVN: r260449

6 years ago[Ada] Propagate load addresses for traceback cache on Linux
Olivier Hainque [Mon, 21 May 2018 14:50:28 +0000 (14:50 +0000)]
[Ada] Propagate load addresses for traceback cache on Linux

Symbolization of traceback addresses through shared libraries
requires information on the shared libraries load addresses, which
was at hand on Linuxbut not propagated through the runtime when
caching is enabled.  This change fixes this.

2018-05-21  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

* libgnat/s-trasym__dwarf.adb (Add_Module_To_Cache): Expect a
Load_Address argument and pass it down to Init_Module.
* libgnat/s-tsmona__linux.adb (Build_Cache_For_All_Modules): Pass
lm.l_addr as the Load_Address to Add_Module_To_Cache.

From-SVN: r260448

6 years ago[Ada] Only allow Has_Discriminants on type entities
Piotr Trojanek [Mon, 21 May 2018 14:50:23 +0000 (14:50 +0000)]
[Ada] Only allow Has_Discriminants on type entities

This patch enforces what the comment for Has_Discriminant says:

--    Has_Discriminants (Flag5)
--       Defined in all types and subtypes.

to avoid semantically undefined calls on non-type entities. It also adapts
other routines to respect this comment.

No user-visible impact.

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

gcc/ada/

* einfo.adb (Has_Discriminants): Stronger assertion.
(Set_Has_Discriminants): Stronger assertion.
* sem_ch13.adb (Push_Scope_And_Install_Discriminants): Adapt to respect
the stronger assertion on Has_Discriminant.
(Uninstall_Discriminants_And_Pop_Scope): Same as above.
* sem_util.adb (New_Copy_Tree): Same as above.
* sem_ch7.adb (Generate_Parent_References): Prevent calls to
Has_Discriminant on non-type entities that might happen when the
compiled code has errors.
* sem_ch3.adb (Derived_Type_Declaration): Only call
Set_Has_Discriminant on type entities.

From-SVN: r260447

6 years ago[Ada] Unnest all subprograms relevant for code generation
Arnaud Charlet [Mon, 21 May 2018 14:50:17 +0000 (14:50 +0000)]
[Ada] Unnest all subprograms relevant for code generation

2018-05-21  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* exp_unst.adb (Unnest_Subprogram): Unnest all subprograms relevant for
code generation.

From-SVN: r260446

6 years ago[Ada] Typo in lib.ads comment
Piotr Trojanek [Mon, 21 May 2018 14:50:13 +0000 (14:50 +0000)]
[Ada] Typo in lib.ads comment

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

gcc/ada/

* lib.ads: Fix typo in enumeration in comment.

From-SVN: r260445

6 years ago[Ada] Extend legality of Scalar_Storage_Order to formal types
Ed Schonberg [Mon, 21 May 2018 14:50:06 +0000 (14:50 +0000)]
[Ada] Extend legality of Scalar_Storage_Order to formal types

This patch extends the legality of the GNAT attribute Scalar_Storage_Order,
to apply to formal private types. Previously this extension applied only
in GNAT_Mode, to support instantiations of Ada.Sequential_IO, but it is more
generally useful.

The following must compile quietly:

----
with Memory_View_Generic;
procedure Main is
   type T is array (1..10) of integer;
   package OK is new Memory_View_Generic (T);

   type T2 is new Long_Float;
   package Wrong is new Memory_View_Generic (T2);
begin
   null;
end;
----
with System;
generic
   type Source_Type is private;
package Memory_View_Generic is
   -- various declarations ...
   SSO : System.Bit_Order := Source_Type'Scalar_Storage_Order;
end Memory_View_Generic;

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

gcc/ada/

* sem_attr.adb (Analyze_Attribute, case Scalar_Storage_Order): The
attribute reference is legal within a generic unit when the prefix is a
formal private type.

From-SVN: r260444

6 years ago[Ada] Premature secondary stack reclamation
Hristian Kirtchev [Mon, 21 May 2018 14:49:52 +0000 (14:49 +0000)]
[Ada] Premature secondary stack reclamation

This patch modifies the creation of transient scopes to eliminate potential
premature secondary stack reclamations when there is no suitable transient
context and the scope was intended to manage the secondary stack. Instead,
the logic was changed to accommodate a special case where an assignment with
suppressed controlled actions that appears within a type initialization
procedure requires secondary stack reclamation.

The patch also corrects the handling of function calls which utilize the
secondary stack in loop parameter specifications. Previously the predicate
which determined whether the function will utilize the secondary stack was
not accurate enough, and in certain cases could lead to leaks.

------------
-- Source --
------------

--  iterators.ads

package Iterators is
   type Iterator is limited interface;
   type Iterator_Access is access all Iterator'Class;

   function Next
     (I       : in out Iterator;
      Element : out Character) return Boolean is abstract;

   procedure Iterate
     (I    : in out Iterator'Class;
      Proc : access procedure (Element : Character));
end Iterators;

--  iterators.adb

package body Iterators is
   procedure Iterate
     (I    : in out Iterator'Class;
      Proc : access procedure (Element : Character))
   is
      Element : Character;
   begin
      while I.Next (Element) loop
         Proc (Element);
      end loop;
   end Iterate;
end Iterators;

--  base.ads

with Iterators; use Iterators;

package Base is
   type String_Access is access all String;
   type Node is tagged record
      S : String_Access;
   end record;

   type Node_Access is access all Node'Class;
   type Node_Array is array (Positive range <>) of Node_Access;

   function As_Array (N : Node_Access) return Node_Array;
   function Get_String (C : Character) return String;

   type Node_Iterator is limited new Iterator with record
      Node : Node_Access;
      I    : Positive;
   end record;

   overriding function Next
     (It      : in out Node_Iterator;
      Element : out Character) return Boolean;

   function Constructor_1 (N : Node_Access) return Node_Iterator;
   function Constructor_2 (N : Node_Access) return Node_Iterator;
end Base;

--  base.adb

package body Base is
   function As_Array (N : Node_Access) return Node_Array is
   begin
      return (1 => N);
   end As_Array;

   function Get_String (C : Character) return String is
   begin
      return (1 .. 40 => C);
   end Get_String;

   function Next
     (It      : in out Node_Iterator;
      Element : out Character) return Boolean
   is
   begin
      if It.I > It.Node.S'Last then
         return False;
      else
         It.I := It.I + 1;
         Element := It.Node.S (It.I - 1);
         return True;
      end if;
   end Next;

   function Constructor_1 (N : Node_Access) return Node_Iterator is
   begin
      return Node_Iterator'(N, 1);
   end Constructor_1;

   function Constructor_2 (N : Node_Access) return Node_Iterator is
   begin
      return Constructor_1 (As_Array (N) (1));
   end Constructor_2;
end Base;

--  main.adb

with Ada.Text_IO; use Ada.Text_IO;
with Base;        use Base;
with Iterators;   use Iterators;

procedure Main is
   N : constant Node_Access := new Node'(S => new String'("hello world"));

   procedure Process (C : Character) is
   begin
      Put_Line (Get_String (C));
   end Process;

   C : Iterator'Class := Constructor_2 (N);

begin
   C.Iterate (Process'Access);
end Main;

----------------------------
-- Compilation and output --
----------------------------

$ gnatmake -q main.adb
$ ./main
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
llllllllllllllllllllllllllllllllllllllll
llllllllllllllllllllllllllllllllllllllll
oooooooooooooooooooooooooooooooooooooooo

wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
oooooooooooooooooooooooooooooooooooooooo
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
llllllllllllllllllllllllllllllllllllllll
dddddddddddddddddddddddddddddddddddddddd

2018-05-21  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* exp_ch7.adb (Establish_Transient_Scope): Code cleanup. Do not
delegate the secondary stack management when there is no suitable
transient context, and the transient scope was intended to manage the
secondary stack because this causes premature reclamation. Change the
transient scope creation logic by special casing assignment statements
of controlled components for type initialization procedures.
(Find_Node_To_Be_Wrapped): Renamed to Find_Transient_Context. Update
the comment on usage.
(Find_Transient_Context): Change the initinte loop into a while loop.
Iterations schemes and iterator specifications are not valid transient
contexts because they rely on special processing. Assignment statements
are now treated as a normal transient context, special cases are
handled by the caller. Add special processing for pragma Check.
(Is_OK_Construct): Removed. Its functionality has been merged in
routine Find_Transient_Context.
* sem_ch5.adb (Check_Call): Reimplemented. Add code to properly
retrieve the subprogram being invoked. Use a more accurate predicate
(Requires_Transient_Scope) to determine that the function will emply
the secondary stack.

From-SVN: r260443

6 years ago[Ada] Fix inconstent subprogram body headers
Piotr Trojanek [Mon, 21 May 2018 14:49:46 +0000 (14:49 +0000)]
[Ada] Fix inconstent subprogram body headers

These are GNAT style violations detected with a trivial Libadalang checker.

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

gcc/ada/

* ada_get_targ.adb: Fix subprogram body headers.
* adabkend.adb: Likewise.
* checks.adb: Likewise.
* exp_ch3.adb: Likewise.
* exp_ch5.adb: Likewise.
* exp_ch9.adb: Likewise.
* exp_dist.adb: Likewise.
* exp_tss.adb: Likewise.
* inline.adb: Likewise.
* lib-writ.adb: Likewise.
* lib-xref-spark_specific.adb: Likewise.
* libgnarl/s-osinte__darwin.adb: Likewise.
* libgnarl/s-stusta.adb: Likewise.
* libgnarl/s-taprop__solaris.adb: Likewise.
* libgnarl/s-tposen.adb: Likewise.
* libgnarl/s-vxwext__kernel-smp.adb: Likewise.
* libgnarl/s-vxwext__kernel.adb: Likewise.
* libgnat/a-btgbso.adb: Likewise.
* libgnat/a-cfdlli.adb: Likewise.
* libgnat/a-cfhama.adb: Likewise.
* libgnat/a-cfinve.adb: Likewise.
* libgnat/a-cimutr.adb: Likewise.
* libgnat/a-coboho.adb: Likewise.
* libgnat/a-cofove.adb: Likewise.
* libgnat/a-cofuve.adb: Likewise.
* libgnat/a-comutr.adb: Likewise.
* libgnat/a-exexda.adb: Likewise.
* libgnat/a-tags.adb: Likewise.
* libgnat/a-tideau.adb: Likewise.
* libgnat/a-wtdeau.adb: Likewise.
* libgnat/a-ztdeau.adb: Likewise.
* libgnat/g-alleve.adb: Likewise.
* libgnat/s-excdeb.adb: Likewise.
* libgnat/s-parint.adb: Likewise.
* libgnat/s-shasto.adb: Likewise.
* libgnat/s-traceb__hpux.adb: Likewise.
* prepcomp.adb: Likewise.
* sem_ch4.adb: Likewise.
* sem_ch6.adb: Likewise.
* sem_dist.adb: Likewise.
* sem_prag.adb: Likewise.
* sem_util.adb: Likewise.
* sinfo.adb: Likewise.
* switch.adb: Likewise.

From-SVN: r260442

6 years agoFix std::filesystem::absolute for empty paths
Jonathan Wakely [Mon, 21 May 2018 12:52:44 +0000 (13:52 +0100)]
Fix std::filesystem::absolute for empty paths

* src/filesystem/std-ops.cc (absolute): Report an error for empty
paths.
(weakly_canonical(const path&)): Do not call canonical on empty path.
(weakly_canonical(const path&, error_code&)): Likewise.
* testsuite/27_io/filesystem/operations/absolute.cc: Check for errors.

From-SVN: r260441

6 years agoPR libstdc++/85818 make new test require Filesystem support
Jonathan Wakely [Mon, 21 May 2018 12:27:00 +0000 (13:27 +0100)]
PR libstdc++/85818 make new test require Filesystem support

PR libstdc++/85818
* testsuite/experimental/filesystem/path/preferred_separator.cc: Add
dg-require-filesystem-ts.

From-SVN: r260439

6 years agosvn rm files missed out from "[arm][2/2] Remove support for -march=armv3 and older"
Kyrylo Tkachov [Mon, 21 May 2018 11:27:41 +0000 (11:27 +0000)]
svn rm files missed out from "[arm][2/2] Remove support for -march=armv3 and older"

From-SVN: r260438

6 years ago[AArch64] Implement usadv16qi and ssadv16qi standard names
Kyrylo Tkachov [Mon, 21 May 2018 11:21:07 +0000 (11:21 +0000)]
[AArch64] Implement usadv16qi and ssadv16qi standard names

This patch implements the usadv16qi and ssadv16qi standard names.
See the thread at on gcc@gcc.gnu.org [1] for background.

The V16QImode variant is important to get right as it is the most commonly used pattern:
reducing vectors of bytes into an int.
The midend expects the optab to compute the absolute differences of operands 1 and 2 and
reduce them while widening along the way up to SImode. So the inputs are V16QImode and
the output is V4SImode.

I've tried out a few different strategies for that, the one I settled with is to emit:
UABDL2    tmp.8h, op1.16b, op2.16b
UABAL    tmp.8h, op1.16b, op2.16b
UADALP    op3.4s, tmp.8h

To work through the semantics let's say operands 1 and 2 are:
op1 { a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 }
op2 { b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 }
op3 { c0, c1, c2, c3 }

The UABDL2 takes the upper V8QI elements, computes their absolute differences, widens them and stores them into the V8HImode tmp:

tmp { ABS(a[8]-b[8]), ABS(a[9]-b[9]), ABS(a[10]-b[10]), ABS(a[11]-b[11]), ABS(a[12]-b[12]), ABS(a[13]-b[13]), ABS(a[14]-b[14]), ABS(a[15]-b[15]) }

The UABAL after that takes the lower V8QI elements, computes their absolute differences, widens them and accumulates them into the V8HImode tmp from the previous step:

tmp { ABS(a[8]-b[8])+ABS (a[0]-b[0]), ABS(a[9]-b[9])+ABS(a[1]-b[1]), ABS(a[10]-b[10])+ABS(a[2]-b[2]), ABS(a[11]-b[11])+ABS(a[3]-b[3]), ABS(a[12]-b[12])+ABS(a[4]-b[4]), ABS(a[13]-b[13])+ABS(a[5]-b[5]), ABS(a[14]-b[14])+ABS(a[6]-b[6]), ABS(a[15]-b[15])+ABS(a[7]-b[7]) }

Finally the UADALP does a pairwise widening reduction and accumulation into the V4SImode op3:
op3 { c0+ABS(a[8]-b[8])+ABS(a[0]-b[0])+ABS(a[9]-b[9])+ABS(a[1]-b[1]), c1+ABS(a[10]-b[10])+ABS(a[2]-b[2])+ABS(a[11]-b[11])+ABS(a[3]-b[3]), c2+ABS(a[12]-b[12])+ABS(a[4]-b[4])+ABS(a[13]-b[13])+ABS(a[5]-b[5]), c3+ABS(a[14]-b[14])+ABS(a[6]-b[6])+ABS(a[15]-b[15])+ABS(a[7]-b[7]) }

(sorry for the text dump)

Remember, according to [1] the exact reduction sequence doesn't matter (for integer arithmetic at least).
I've considered other sequences as well (thanks Wilco), for example
* UABD + UADDLP + UADALP
* UABLD2 + UABDL + UADALP + UADALP

I ended up settling in the sequence in this patch as it's short (3 instructions) and in the future we can potentially
look to optimise multiple occurrences of these into something even faster (for example accumulating into H registers for longer
before doing a single UADALP in the end to accumulate into the final S register).

If your microarchitecture has some some strong preferences for a particular sequence, please let me know or, even better, propose a patch
to parametrise the generation sequence by code (or the appropriate RTX cost).

This expansion allows the vectoriser to avoid unpacking the bytes in two steps and performing V4SI arithmetic on them.
So, for the code:

unsigned char pix1[N], pix2[N];

int foo (void)
{
  int i_sum = 0;
  int i;

  for (i = 0; i < 16; i++)
    i_sum += __builtin_abs (pix1[i] - pix2[i]);

  return i_sum;
}

we now generate on aarch64:
foo:
        adrp    x1, pix1
        add     x1, x1, :lo12:pix1
        movi    v0.4s, 0
        adrp    x0, pix2
        add     x0, x0, :lo12:pix2
        ldr     q2, [x1]
        ldr     q3, [x0]
        uabdl2  v1.8h, v2.16b, v3.16b
        uabal   v1.8h, v2.8b, v3.8b
        uadalp  v0.4s, v1.8h
        addv    s0, v0.4s
        umov    w0, v0.s[0]
        ret

instead of:
foo:
        adrp    x1, pix1
        adrp    x0, pix2
        add     x1, x1, :lo12:pix1
        add     x0, x0, :lo12:pix2
        ldr     q0, [x1]
        ldr     q4, [x0]
        ushll   v1.8h, v0.8b, 0
        ushll2  v0.8h, v0.16b, 0
        ushll   v2.8h, v4.8b, 0
        ushll2  v4.8h, v4.16b, 0
        usubl   v3.4s, v1.4h, v2.4h
        usubl2  v1.4s, v1.8h, v2.8h
        usubl   v2.4s, v0.4h, v4.4h
        usubl2  v0.4s, v0.8h, v4.8h
        abs     v3.4s, v3.4s
        abs     v1.4s, v1.4s
        abs     v2.4s, v2.4s
        abs     v0.4s, v0.4s
        add     v1.4s, v3.4s, v1.4s
        add     v1.4s, v2.4s, v1.4s
        add     v0.4s, v0.4s, v1.4s
        addv    s0, v0.4s
        umov    w0, v0.s[0]
        ret

So I expect this new expansion to be better than the status quo in any case.
Bootstrapped and tested on aarch64-none-linux-gnu.
This gives about 8% on 525.x264_r from SPEC2017 on a Cortex-A72.

* config/aarch64/aarch64.md ("unspec"): Define UNSPEC_SABAL,
UNSPEC_SABDL2, UNSPEC_SADALP, UNSPEC_UABAL, UNSPEC_UABDL2,
UNSPEC_UADALP values.
* config/aarch64/iterators.md (ABAL): New int iterator.
(ABDL2): Likewise.
(ADALP): Likewise.
(sur): Add mappings for the above.
* config/aarch64/aarch64-simd.md (aarch64_<sur>abdl2<mode>_3):
New define_insn.
(aarch64_<sur>abal<mode>_4): Likewise.
(aarch64_<sur>adalp<mode>_3): Likewise.
(<sur>sadv16qi): New define_expand.

* gcc.c-torture/execute/ssad-run.c: New test.
* gcc.c-torture/execute/usad-run.c: Likewise.
* gcc.target/aarch64/ssadv16qi.c: Likewise.
* gcc.target/aarch64/usadv16qi.c: Likewise.

From-SVN: r260437

6 years agoi386.md (*movsf_internal): AVX falsedep fix.
Alexander Nesterovskiy [Mon, 21 May 2018 11:14:14 +0000 (11:14 +0000)]
i386.md (*movsf_internal): AVX falsedep fix.

2018-05-21  Alexander Nesterovskiy  <alexander.nesterovskiy@intel.com>

gcc/
        * config/i386/i386.md (*movsf_internal): AVX falsedep fix.
        (*movdf_internal): Ditto.
        (*rcpsf2_sse): Ditto.
        (*rsqrtsf2_sse): Ditto.
        (*sqrt<mode>2_sse): Ditto.

From-SVN: r260436

6 years agoAdd missing AArch64 NEON instrinctics for Armv8.2-a to Armv8.4-a
Tamar Christina [Mon, 21 May 2018 10:33:30 +0000 (10:33 +0000)]
Add missing AArch64 NEON instrinctics for Armv8.2-a to Armv8.4-a

This patch adds the missing neon intrinsics for all 128 bit vector Integer modes for the
three-way XOR and negate and xor instructions for Arm8.2-a to Armv8.4-a.

gcc/
2018-05-21  Tamar Christina  <tamar.christina@arm.com>

* config/aarch64/aarch64-simd.md (aarch64_eor3qv8hi): Change to
eor3q<mode>4.
(aarch64_bcaxqv8hi): Change to bcaxq<mode>4.
* config/aarch64/aarch64-simd-builtins.def (veor3q_u8, veor3q_u32,
veor3q_u64, veor3q_s8, veor3q_s16, veor3q_s32, veor3q_s64, vbcaxq_u8,
vbcaxq_u32, vbcaxq_u64, vbcaxq_s8, vbcaxq_s16, vbcaxq_s32,
vbcaxq_s64): New.
* config/aarch64/arm_neon.h: Likewise.
* config/aarch64/iterators.md (VQ_I): New.

gcc/testsuite/
2018-05-21  Tamar Christina  <tamar.christina@arm.com>

* gcc.target/gcc.target/aarch64/sha3.h (veor3q_u8, veor3q_u32,
veor3q_u64, veor3q_s8, veor3q_s16, veor3q_s32, veor3q_s64, vbcaxq_u8,
vbcaxq_u32, vbcaxq_u64, vbcaxq_s8, vbcaxq_s16, vbcaxq_s32,
vbcaxq_s64): New.
* gcc.target/gcc.target/aarch64/sha3_1.c: Likewise.
* gcc.target/gcc.target/aarch64/sha3_1.c: Likewise.
* gcc.target/gcc.target/aarch64/sha3_1.c: Likewise.

From-SVN: r260435

6 years ago[ARC] Add multilib support for linux targets
Alexey Brodkin [Mon, 21 May 2018 09:56:57 +0000 (09:56 +0000)]
[ARC] Add multilib support for linux targets

We used to build baremetal (AKA Elf32) multilibbed toolchains for years
now but never made that for Linux targets since there were problems with
uClibc n multilib setup. Now with help of Crosstool-NG it is finally
possible to create uClibc-based multilibbed toolchains and so we add
relevant CPUs for multilib in case of configuration for "arc*-*-linux*".

This will be essentially useful for glibc-based multilibbbed toolchains
in the future.

gcc/
2018-05-16  Alexey Brodkin <abrodkin@synopsys.com>

        * config.gcc: Add arc/t-multilib-linux to tmake_file for
        arc*-*-linux*.
        * config/arc/t-multilib-linux: Specify MULTILIB_OPTIONS and
        MULTILIB_DIRNAMES

From-SVN: r260434

6 years agore PR fortran/85841 ([F2018] reject deleted features)
Janus Weil [Mon, 21 May 2018 06:45:55 +0000 (08:45 +0200)]
re PR fortran/85841 ([F2018] reject deleted features)

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

PR fortran/85841
* libgfortran.h: New macros GFC_STD_OPT_*.
* error.c (notify_std_msg): New function.
(gfc_notify_std): Adjust such that it can handle combinations of
GFC_STD_* flags in the 'std' argument, not just a single one.
* match.c (match_arithmetic_if, gfc_match_if): Reject arithmetic if
in Fortran 2018.
(gfc_match_stopcode): Use GFC_STD_OPT_* macros.
* options.c (set_default_std_flags): Warn for F2018 deleted features
by default.
(gfc_handle_option): F2018 deleted features are allowed in earlier
standards.
* symbol.c (gfc_define_st_label, gfc_reference_st_label): Reject
nonblock do constructs in Fortran 2018.

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

PR fortran/85841
* gfortran.dg/g77/19990826-3.f: Add option "-std=legacy".
* gfortran.dg/g77/20020307-1.f: Ditto.
* gfortran.dg/g77/980310-3.f: Ditto.
* gfortran.dg/goacc/loop-1-2.f95: Ditto.
* gfortran.dg/goacc/loop-1.f95: Ditto.
* gfortran.dg/gomp/appendix-a/a.6.1.f90: Ditto.
* gfortran.dg/gomp/appendix-a/a.6.2.f90: Ditto.
* gfortran.dg/gomp/do-1.f90: Ditto.
* gfortran.dg/gomp/omp_do1.f90: Ditto.
* gfortran.dg/pr17229.f: Ditto.
* gfortran.dg/pr37243.f: Ditto.
* gfortran.dg/pr49721-1.f: Ditto.
* gfortran.dg/pr58484.f: Ditto.
* gfortran.dg/pr81175.f: Ditto.
* gfortran.dg/pr81723.f: Ditto.
* gfortran.dg/predcom-2.f: Ditto.
* gfortran.dg/vect/Ofast-pr50414.f90: Ditto.
* gfortran.dg/vect/cost-model-pr34445a.f: Ditto.
* gfortran.dg/vect/fast-math-mgrid-resid.f: Ditto.
* gfortran.dg/vect/pr52580.f: Ditto.

From-SVN: r260433

6 years agoPR libstdc++/85843 - warning in logic_error copy constructor.
Jason Merrill [Mon, 21 May 2018 03:53:00 +0000 (23:53 -0400)]
PR libstdc++/85843 - warning in logic_error copy constructor.

* class.c (type_has_user_nondefault_constructor): Check for a
user-provided ctor, not user-declared.

From-SVN: r260432

6 years agoDaily bump.
GCC Administrator [Mon, 21 May 2018 00:16:44 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r260431

6 years agoPR libstdc++/85843 fix "should be explicitly initialized" warnings
Jonathan Wakely [Sun, 20 May 2018 23:50:08 +0000 (00:50 +0100)]
PR libstdc++/85843 fix "should be explicitly initialized" warnings

PR libstdc++/85843
* src/c++11/cow-stdexcept.cc (logic_error, runtime_error): Explicitly
initialize base class to avoid warnings.

From-SVN: r260427

6 years ago[NDS32] Set call address constraint.
Chung-Ju Wu [Sun, 20 May 2018 16:03:45 +0000 (16:03 +0000)]
[NDS32] Set call address constraint.

gcc/
* config/nds32/constraints.md (S): New constraint.
* config/nds32/nds32.md (call_internal): Use constraint S.
(call_value_internal): Likewise.
(sibcall_internal): Likewise.
(sibcall_value_internal): Likewise.

From-SVN: r260422

6 years agore PR fortran/82275 (gfortran rejects valid & accepts invalid reference to dimension...
Paul Thomas [Sun, 20 May 2018 10:54:24 +0000 (10:54 +0000)]
re PR fortran/82275 (gfortran rejects valid & accepts invalid reference to dimension-remapped type SELECT TYPE selector)

2018-05-20  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82275
Correcting ChangeLogs
* match.c (gfc_match_type_spec): Go through the array ref and
decrement 'rank' for every dimension that is an element.

2018-05-20  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82275
Correcting ChangeLogs
* gfortran.dg/select_type_42.f90: New test.

From-SVN: r260416

6 years agore PR fortran/80657 (Loop in character function declaration)
Paul Thomas [Sun, 20 May 2018 10:08:24 +0000 (10:08 +0000)]
re PR fortran/80657 (Loop in character function declaration)

2018-05-19  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/80657
* resolve.c (flag_fn_result_spec): Use the 'sym' argument to
test for self refs to the function result in the character len
expression. If a self reference is found, emit an error and
return true.
(resolve_fntype): Use the function symbol in the calls to the
above.

2018-05-19  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/80657
* gfortran.dg/char_result_18.f90: New test.

From-SVN: r260415

6 years agore PR fortran/49636 ([F03] ASSOCIATE construct confused with slightly complicated...
Paul Thomas [Sun, 20 May 2018 10:04:46 +0000 (10:04 +0000)]
re PR fortran/49636 ([F03] ASSOCIATE construct confused with slightly complicated case)

2018-05-20  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/49636
* trans-array.c (gfc_get_array_span): Renamed from
'get_array_span'.
(gfc_conv_expr_descriptor): Change references to above.
* trans-array.h : Add prototype for 'gfc_get_array_span'.
* trans-stmt.c (trans_associate_var): If the associate name is
a subref array pointer, use gfc_get_array_span for the span.

2018-05-20  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/49636
* gfortran.dg/associate_38.f90: New test.

From-SVN: r260414

6 years agore PR fortran/82923 (Automatic allocation of deferred length character using function...
Paul Thomas [Sun, 20 May 2018 09:59:54 +0000 (09:59 +0000)]
re PR fortran/82923 (Automatic allocation of deferred length character using function result)

2018-05-19  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82923
PR fortran/66694
PR fortran/82617
* trans-array.c (gfc_alloc_allocatable_for_assignment): Set the
charlen backend_decl of the rhs expr to ss->info->string_length
so that the value in the current scope is used.

2018-05-19  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82923
* gfortran.dg/allocate_assumed_charlen_4.f90: New test. Note
that the patch fixes PR66694 & PR82617, although the testcases
are not explicitly included.

From-SVN: r260413

6 years ago[NDS32] Adjust register move cost for graywolf cpu.
Kito Cheng [Sun, 20 May 2018 07:31:55 +0000 (07:31 +0000)]
[NDS32] Adjust register move cost for graywolf cpu.

gcc/
* config/nds32/nds32.c (nds32_register_move_cost): Take garywolf cpu
into consideration.

Co-Authored-By: Chung-Ju Wu <jasonwucj@gmail.com>
From-SVN: r260412

6 years ago[NDS32] Rewrite cost model.
Kito Cheng [Sun, 20 May 2018 07:23:39 +0000 (07:23 +0000)]
[NDS32] Rewrite cost model.

gcc/
* config/nds32/nds32-cost.c (rtx_cost_model_t): New structure.
(insn_size_16bit, insn_size_32bit): New variables for cost evaluation.
(nds32_rtx_costs_impl): Simplify.
(nds32_address_cost_impl): Simplify.
(nds32_init_rtx_costs): New function.
(nds32_rtx_costs_speed_prefer): Likewise.
(nds32_rtx_costs_size_prefer): Likewise.
(nds32_address_cost_speed_prefer): Likewise.
(nds32_address_cost_speed_fwprop): Likewise.
(nds32_address_cost_size_prefer): Likewise.
* config/nds32/nds32-protos.h (nds32_init_rtx_costs): Declare.
* config/nds32/nds32.c (nds32_option_override): Use
nds32_init_rtx_costs function.

Co-Authored-By: Chung-Ju Wu <jasonwucj@gmail.com>
From-SVN: r260411

6 years ago[NDS32] Fix date in gcc/ChangeLog file.
Chung-Ju Wu [Sun, 20 May 2018 07:09:09 +0000 (07:09 +0000)]
[NDS32] Fix date in gcc/ChangeLog file.

From-SVN: r260410

6 years ago[NDS32] Print pipeline model in asm header.
Chung-Ju Wu [Sun, 20 May 2018 05:09:49 +0000 (05:09 +0000)]
[NDS32] Print pipeline model in asm header.

gcc/
* config/nds32/nds32.c (nds32_asm_file_start): Output pipeline model.
* config/nds32/nds32.h (TARGET_PIPELINE_N7): Define.
(TARGET_PIPELINE_N8): Likewise.
(TARGET_PIPELINE_N10): Likewise.
(TARGET_PIPELINE_N13): Likewise.
(TARGET_PIPELINE_GRAYWOLF): Likewise.

From-SVN: r260409

6 years agoDaily bump.
GCC Administrator [Sun, 20 May 2018 00:16:37 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r260408

6 years agoAvoid ICE on unsupported use of __integer_pack.
Jason Merrill [Sat, 19 May 2018 22:57:53 +0000 (18:57 -0400)]
Avoid ICE on unsupported use of __integer_pack.

* pt.c (tsubst_pack_expansion): Sorry rather than abort
on __integer_pack as subexpression of pattern.

From-SVN: r260404

6 years ago[NDS32] Update copyright year in nds32-fpu.md.
Monk Chiang [Sat, 19 May 2018 15:23:45 +0000 (15:23 +0000)]
[NDS32] Update copyright year in nds32-fpu.md.

gcc/
* config/nds32/nds32-fpu.md: Update copyright year.

From-SVN: r260402

6 years ago[NDS32] Adjust ASM spec.
Chung-Ju Wu [Sat, 19 May 2018 15:16:53 +0000 (15:16 +0000)]
[NDS32] Adjust ASM spec.

gcc/
* config/nds32/nds32.h (ASM_SPEC): Adjust spec rule.

From-SVN: r260401

6 years ago[NDS32] New option -minline-asm-r15.
Chung-Ju Wu [Sat, 19 May 2018 15:10:08 +0000 (15:10 +0000)]
[NDS32] New option -minline-asm-r15.

gcc/
* config/nds32/nds32.c
(nds32_md_asm_adjust): Consider flag_inline_asm_r15 variable.
* config/nds32/nds32.opt (minline-asm-r15): New option.

From-SVN: r260400

6 years ago[NDS32] Add abssi2 pattern.
Chung-Ju Wu [Sat, 19 May 2018 14:51:09 +0000 (14:51 +0000)]
[NDS32] Add abssi2 pattern.

gcc/
* common/config/nds32/nds32-common.c (TARGET_DEFAULT_TARGET_FLAGS): Add
MASK_HW_ABS.
* config/nds32/nds32.md (abssi2): New pattern.

From-SVN: r260398

6 years agoi386.md (rex64namesuffix): New mode attribute.
Uros Bizjak [Sat, 19 May 2018 13:43:06 +0000 (15:43 +0200)]
i386.md (rex64namesuffix): New mode attribute.

* config/i386/i386.md (rex64namesuffix): New mode attribute.
* config/i386/sse.md (sse_cvtsi2ss<rex64namesuffix><round_name>):
Merge insn pattern from sse_cvtsi2ss<round_name> and
sse_cvtsi2ssq<round_name> using SWI48 mode iterator.
(sse_cvtss2si<rex64namesuffix><round_name>): Merge insn pattern
from sse_cvtss2si<round_name> and sse_cvtss2siq<round_name>
using SWI48 mode iterator.
(sse_cvtss2si<rex64namesuffix>_2): Merge insn pattern from
sse_cvtss2si_2 and sse_cvtss2siq_2 using SWI48 mode iterator.
(sse_cvttss2si<rex64namesuffix><round_saeonly_name>): Merge insn
pattern from sse_cvttss2si<round_saeonly_name>
and sse_cvttss2siq<round_saeonly_name> using SWI48 mode iterator.
(avx512f_vcvtss2usi<rex64namesuffix><round_name>): Merge insn pattern
from avx512f_vcvtss2usi<round_name> and avx512f_vcvtss2usiq<round_name>
using SWI48 mode iterator.
(avx512f_vcvttss2usi<rex64namesuffix><round_saeonly_name>): Merge
insn pattern from avx512f_vcvttss2usi<round_saeonly_name> and
avx512f_vcvttss2usiq<round_saeonly_name> using SWI48 mode iterator.
(avx512f_vcvtsd2usi<rex64namesuffix><round_name>): Merge insn pattern
from avx512f_vcvtsd2usi<round_name> and avx512f_vcvtsd2usiq<round_name>
using SWI48 mode iterator.
(avx512f_vcvttsd2usi<rex64namesuffix><round_saeonly_name>): Merge
insn pattern from avx512f_vcvttsd2usi<round_saeonly_name> and
avx512f_vcvttsd2usiq<round_saeonly_name> using SWI48 mode iterator.
(sse2_cvtsd2si<rex64namesuffix><round_name>): Merge insn pattern from
sse2_cvtsd2si<round_name> and sse2_cvtsd2siq<round_name> using
SWI48 mode iterator.
(sse2_cvtsd2si<rex64namesuffix>_2): Merge insn pattern from
sse2_cvtsd2si_2 and sse2_cvtsd2siq_2 using SWI48 mode iterator.
(sse_cvttsd2si<rex64namesuffix><round_saeonly_name>): Merge insn
pattern from sse_cvttsd2si<round_saeonly_name>
and sse_cvttsd2siq<round_saeonly_name> using SWI48 mode iterator.

From-SVN: r260397

6 years ago[NDS32] Refine functions that deal with lwm and smw operations.
Chung-Ju Wu [Sat, 19 May 2018 12:01:11 +0000 (12:01 +0000)]
[NDS32] Refine functions that deal with lwm and smw operations.

gcc/
* config/nds32/nds32-md-auxiliary.c
(nds32_valid_smw_lwm_base_p): Refine.
(nds32_output_smw_single_word): Refine.
(nds32_output_smw_double_word): New.
* config/nds32/nds32-protos.h (nds32_output_smw_double_word): New.

From-SVN: r260396

6 years ago[NDS32] Refine nds32-md-auxiliary.c.
Chung-Ju Wu [Sat, 19 May 2018 11:31:53 +0000 (11:31 +0000)]
[NDS32] Refine nds32-md-auxiliary.c.

gcc/
* config/nds32/nds32-md-auxiliary.c (nds32_output_stack_push): Refine.
(nds32_output_stack_pop): Refine.
(nds32_expand_unaligned_load): Refine.
(nds32_expand_unaligned_store): Refine.

From-SVN: r260394

6 years ago[NDS32] Support PIC and TLS.
Kuan-Lin Chen [Sat, 19 May 2018 11:03:20 +0000 (11:03 +0000)]
[NDS32] Support PIC and TLS.

gcc/
* config/nds32/constants.md: Add TP_REGNUM constant.
(unspec_element): Add UNSPEC_GOTINIT, UNSPEC_GOT, UNSPEC_GOTOFF,
UNSPEC_PLT, UNSPEC_TLSGD, UNSPEC_TLSLD, UNSPEC_TLSIE, UNSPEC_TLSLE and
UNSPEC_ADD32.
* config/nds32/nds32-doubleword.md: Consider flag_pic.
* config/nds32/nds32-dspext.md (mov<mode>): Expand TLS and PIC cases.
* config/nds32/nds32-predicates.c (nds32_const_unspec_p): New.
* config/nds32/nds32-md-auxiliary.c: Implementation that support TLS
and PIC code generation.
* config/nds32/nds32-protos.h: Declarations that support TLS and PIC
code generation.
* config/nds32/nds32-relax-opt.c: Consider TLS and PIC for relax
optimization.
* config/nds32/nds32.md: Support TLS and PIC.
* config/nds32/nds32.c: Support TLS and PIC.
* config/nds32/nds32.h (nds32_relax_insn_type): New enum type.
* config/nds32/predicates.md (nds32_nonunspec_symbolic_operand): New
predicate.

Co-Authored-By: Chung-Ju Wu <jasonwucj@gmail.com>
From-SVN: r260393

6 years agore PR fortran/82923 (Automatic allocation of deferred length character using function...
Paul Thomas [Sat, 19 May 2018 10:49:50 +0000 (10:49 +0000)]
re PR fortran/82923 (Automatic allocation of deferred length character using function result)

2018-05-19  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82923
PR fortran/66694
PR fortran/82617
* trans-array.c (gfc_alloc_allocatable_for_assignment): Set the
charlen backend_decl of the rhs expr to ss->info->string_length
so that the value in the current scope is used.

2018-05-19  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82923
* gfortran.dg/allocate_assumed_charlen_4.f90: New test. Note
that the patch fixes PR66694 & PR82617, although the testcases
are not explicitly included.

From-SVN: r260392

6 years ago[NDS32] Use machine mode with E_ prefix.
Chung-Ju Wu [Sat, 19 May 2018 10:18:23 +0000 (10:18 +0000)]
[NDS32] Use machine mode with E_ prefix.

gcc/
* config/nds32/nds32-predicates.c (const_vector_to_hwint): Use machine
mode with E_ prefix.

From-SVN: r260391

6 years ago[NDS32] Implment indirect funciton call attribute.
Kuan-Lin Chen [Sat, 19 May 2018 08:57:57 +0000 (08:57 +0000)]
[NDS32] Implment indirect funciton call attribute.

* config/nds32/constants.md (unspec_element): Add UNSPEC_ICT.
* config/nds32/nds32-md-auxiliary.c
(symbolic_reference_mentioned_p): New.
(nds32_legitimize_ict_address): New.
(nds32_expand_ict_move): New.
(nds32_indirect_call_referenced_p): New.
(nds32_symbol_binds_local_p): Delete.
(nds32_long_call_p): Modify.
* config/nds32/nds32-opts.h (nds32_ict_model_type): New enum type.
* config/nds32/nds32-protos.h
(symbolic_reference_mentioned_p): Declare.
(nds32_legitimize_ict_address): Declare.
(nds32_expand_ict_move): Declare.
(nds32_indirect_call_referenced_p): Declare.
* config/nds32/nds32-relax-opt.c (nds32_ict_const_p): New.
(nds32_relax_group): Use nds32_ict_const_p as condition.
* config/nds32/nds32.c (nds32_attribute_table): Add "indirect_call".
(nds32_asm_file_start): Output ict_model directive in asm code.
(nds32_legitimate_address_p): Consider indirect call.
(nds32_print_operand): Consider indirect call.
(nds32_print_operand_address): Consider indirect call.
(nds32_insert_attributes): Handle "indirect_call" attribute.
(TARGET_LEGITIMATE_ADDRESS_P): Define.
(TARGET_LEGITIMATE_CONSTANT_P): Define.
(TARGET_CANNOT_FORCE_CONST_MEM): Define.
(TARGET_DELEGITIMIZE_ADDRESS): Define.
(TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA): Define.
* config/nds32/nds32.h (SYMBOLIC_CONST_P): Define.
(TARGET_ICT_MODEL_SMALL): Define.
(TARGET_ICT_MODEL_LARGE): Define.
* config/nds32/nds32.md (movsi): Consider ict model.
(call, call_value): Consider ict model.
(sibcall, sibcall_value): Consider ict model.
* config/nds32/nds32.opt (mict-model): New option.
* config/nds32/predicates.md (nds32_symbolic_operand): Consider ict
model.

Co-Authored-By: Chung-Ju Wu <jasonwucj@gmail.com>
From-SVN: r260390

6 years agoFix std::codecvt_utf8<wchar_t> for Mingw
Jonathan Wakely [Sat, 19 May 2018 02:03:42 +0000 (03:03 +0100)]
Fix std::codecvt_utf8<wchar_t> for Mingw

* src/c++11/codecvt.cc (__codecvt_utf8_base<wchar_t>::do_in)
[__SIZEOF_WCHAR_T__==2 && __BYTE_ORDER__!=__ORDER_BIG_ENDIAN__]: Set
little_endian element in bitmask.
* testsuite/22_locale/codecvt/codecvt_utf8/69703.cc: Run all tests.
* testsuite/22_locale/codecvt/codecvt_utf8/wchar_t/1.cc: New.

From-SVN: r260389

6 years agoDaily bump.
GCC Administrator [Sat, 19 May 2018 00:16:47 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r260388

6 years agoRISC-V: Add RV32E support.
Kito Cheng [Fri, 18 May 2018 22:53:55 +0000 (22:53 +0000)]
RISC-V: Add RV32E support.

Kito Cheng <kito.cheng@gmail.com>
Monk Chiang  <sh.chiang04@gmail.com>

gcc/
* common/config/riscv/riscv-common.c (riscv_parse_arch_string):
Add support to parse rv32e*.  Clear MASK_RVE for rv32i and rv64i.
* config.gcc (riscv*-*-*): Add support for rv32e* and ilp32e.
* config/riscv/riscv-c.c (riscv_cpu_cpp_builtins): Define
__riscv_32e when TARGET_RVE.  Handle ABI_ILP32E as soft-float ABI.
* config/riscv/riscv-opts.h (riscv_abi_type): Add ABI_ILP32E.
* config/riscv/riscv.c (riscv_compute_frame_info): When TARGET_RVE,
compute save_libcall_adjustment properly.
(riscv_option_override): Call error if TARGET_RVE and not ABI_ILP32E.
(riscv_conditional_register_usage): Handle TARGET_RVE and ABI_ILP32E.
* config/riscv/riscv.h (UNITS_PER_FP_ARG): Handle ABI_ILP32E.
(STACK_BOUNDARY, ABI_STACK_BOUNDARY): Handle TARGET_RVE.
(GP_REG_LAST, MAX_ARGS_IN_REGISTERS): Likewise.
(ABI_SPEC): Handle mabi=ilp32e.
* config/riscv/riscv.opt (abi_type): Add ABI_ILP32E.
(RVE): Add RVE mask.
* doc/invoke.texi (RISC-V options) <-mabi>: Add ilp32e info.
<-march>: Add rv32e as an example.

gcc/testsuite/
* gcc.dg/stack-usage-1.c: Add support for rv32e.

libgcc/
* config/riscv/save-restore.S: Add support for rv32e.

Co-Authored-By: Jim Wilson <jimw@sifive.com>
Co-Authored-By: Monk Chiang <sh.chiang04@gmail.com>
From-SVN: r260384

6 years agoAliasing 'this' in a C++ constructor
Marc Glisse [Fri, 18 May 2018 22:21:20 +0000 (00:21 +0200)]
Aliasing 'this' in a C++ constructor

2018-05-18  Marc Glisse  <marc.glisse@inria.fr>

PR c++/82899
gcc/
* tree-ssa-structalias.c (create_variable_info_for_1): Extra argument.
(intra_create_variable_infos): Handle C++ constructors.

gcc/testsuite/
* g++.dg/pr82899.C: New testcase.

From-SVN: r260383

6 years ago2018-05-18 François Dumont <fdumont@gcc.gnu.org>
François Dumont [Fri, 18 May 2018 20:49:49 +0000 (20:49 +0000)]
2018-05-18  François Dumont  <fdumont@gcc.gnu.org>

* include/bits/stl_tree.h
(_Rb_tree_impl(_Rb_tree_impl&&, _Node_allocator&&)): New.
(_Rb_tree(_Rb_tree&&, _Node_allocator&&, true_type)): New, use latter.
(_Rb_tree(_Rb_tree&&, _Node_allocator&&, false_type)): New.
(_Rb_tree(_Rb_tree&&, _Node_allocator&&)): Adapt, use latters.
* include/debug/map.h
(map(map&&, const_allocator_type&)): Add noexcept qualitication.
* include/debug/multimap.h
(multimap(multimap&&, const_allocator_type&)): Likewise.
* include/debug/set.h
(set(set&&, const_allocator_type&)): Likewise.
* include/debug/multiset.h
(multiset(multiset&&, const_allocator_type&)): Likewise.
* testsuite/23_containers/map/cons/noexcept_default_construct.cc:
Add checks.
* testsuite/23_containers/map/cons/noexcept_move_construct.cc:
Add checks.
* testsuite/23_containers/multimap/cons/noexcept_default_construct.cc:
Add checks.
* testsuite/23_containers/multimap/cons/noexcept_move_construct.cc:
Add checks.
* testsuite/23_containers/multiset/cons/noexcept_default_construct.cc:
Add checks.
* testsuite/23_containers/multiset/cons/noexcept_move_construct.cc:
Add checks.
* testsuite/23_containers/set/cons/noexcept_default_construct.cc:
Add checks.
* testsuite/23_containers/set/cons/noexcept_move_construct.cc:
Add checks.

From-SVN: r260382

6 years agoPR c++/58407 - deprecated implicit copy ops.
Jason Merrill [Fri, 18 May 2018 20:02:48 +0000 (16:02 -0400)]
PR c++/58407 - deprecated implicit copy ops.

gcc/c-family/
* c.opt (Wdeprecated-copy): New flag.
gcc/cp/
* call.c (build_over_call): Warn about deprecated trivial fns.
* class.c (classtype_has_user_copy_or_dtor): New.
(type_build_ctor_call): Check TREE_DEPRECATED.
(type_build_dtor_call): Likewise.
* decl2.c (cp_warn_deprecated_use): Move from tree.c.
Add checks.  Return bool.  Handle -Wdeprecated-copy.
(mark_used): Use it.
* decl.c (grokdeclarator): Remove redundant checks.
* typeck2.c (build_functional_cast): Likewise.
* method.c (lazily_declare_fn): Mark deprecated copy ops.
* init.c (build_aggr_init): Only set TREE_USED if there are
side-effects.
libitm/
* beginend.cc (save): Disable -Werror=deprecated-copy.

From-SVN: r260381

6 years agoSome libstdc++ fixes for -Wdeprecated-copy.
Jason Merrill [Fri, 18 May 2018 20:02:14 +0000 (16:02 -0400)]
Some libstdc++ fixes for -Wdeprecated-copy.

* include/bits/stl_deque.h (_Deque_iterator): Constrain constructor
for conversion to const_iterator.  Add defaulted copy ops.
* libsupc++/new (bad_alloc): Add defaulted copy ops.
* libsupc++/exception.h (exception): Add defaulted copy ops.
* include/std/system_error (system_error): Add defaulted copy ops.
* include/std/stdexcept (domain_error, invalid_argument)
(length_error, out_of_range, range_error, overflow_error)
(underflow_error): Add defaulted copy ops.
* include/bits/stl_iterator.h (reverse_iterator): Add defaulted
copy assignment.
* include/bits/allocator.h (allocator): Add defaulted copy assignment.
* include/ext/throw_allocator.h (condition_base): Add defaulted
default and copy ctor and copy assignment.

From-SVN: r260380

6 years agoFix typo in test-case.
Martin Liska [Fri, 18 May 2018 19:52:52 +0000 (21:52 +0200)]
Fix typo in test-case.

2018-05-18  Martin Liska  <mliska@suse.cz>

* gcc.dg/pr68766.c: Change pruned output.

From-SVN: r260379

6 years agoRemove redundand pass pass_lower_switch.
Martin Liska [Fri, 18 May 2018 19:52:23 +0000 (21:52 +0200)]
Remove redundand pass pass_lower_switch.

2018-05-18  Martin Liska  <mliska@suse.cz>

* passes.def: Remove a redundant pass.

From-SVN: r260378

6 years agore PR bootstrap/85838 (-Wmaybe-uninitialized warning in sparc.c (sparc_expand_builtin...
Eric Botcazou [Fri, 18 May 2018 18:49:20 +0000 (18:49 +0000)]
re PR bootstrap/85838 (-Wmaybe-uninitialized warning in sparc.c (sparc_expand_builtin) breaks SPARC bootstrap)

PR bootstrap/85838
* config/sparc/sparc.c (sparc_expand_builtin): Always initialize op[0].

From-SVN: r260374

6 years agoPR libstdc++/85098 add missing definitions for static constants
Jonathan Wakely [Fri, 18 May 2018 16:14:04 +0000 (17:14 +0100)]
PR libstdc++/85098 add missing definitions for static constants

In C++11 and C++14 any odr-use of these constants requires a definition
at namespace-scope.  In C++17 they are implicitly inline and so the
namespace-scope redeclarations are redundant (and allowing them is
deprecated).

PR libstdc++/85098
* include/bits/regex.h [__cplusplus < 201703L] (basic_regex::icase)
(basic_regex::nosubs, basic_regex::optimize, basic_regex::collate)
(basic_regex::ECMAScript, basic_regex::basic, basic_regex::extended)
(basic_regex::awk, basic_regex::grep, basic_regex::egrep): Add
definitions.
* include/bits/regex_automaton.h (_NFA::_M_insert_state): Adjust
whitespace.
* include/bits/regex_compiler.tcc (__INSERT_REGEX_MATCHER): Add
braces around body of do-while.
* testsuite/28_regex/basic_regex/85098.cc: New

From-SVN: r260371

6 years agore PR c++/85782 (acc loops with continue statements ICE in c++)
Cesar Philippidis [Fri, 18 May 2018 15:43:09 +0000 (08:43 -0700)]
re PR c++/85782 (acc loops with continue statements ICE in c++)

PR c++/85782

gcc/cp/
* cp-gimplify.c (cp_genericize_r): Call genericize_omp_for_stmt for
OACC_LOOPs.

gcc/testsuite/
* c-c++-common/goacc/pr85782.c: New test.

libgomp/
* testsuite/libgomp.oacc-c-c++-common/pr85782.c: New test.

From-SVN: r260369

6 years ago[AARCH64, SVE] Remove a couple of xfail from slp_5.c
Sudakshina Das [Fri, 18 May 2018 13:19:46 +0000 (13:19 +0000)]
[AARCH64, SVE]  Remove a couple of xfail from slp_5.c

*** gcc/testsuite/ChangeLog ***

2018-05-18  Sudakshina Das  <sudi.das@arm.com>

* gcc.target/aarch64/sve/slp_5.c: Remove xfail for tld1d and tld2d.

From-SVN: r260365

6 years ago[arm][2/2] Remove support for -march=armv3 and older
Kyrylo Tkachov [Fri, 18 May 2018 13:10:36 +0000 (13:10 +0000)]
[arm][2/2] Remove support for -march=armv3 and older

We deprecated architecture versions earlier than Armv4T in GCC 6 [1].
This patch removes support for architectures lower than Armv4.
That is the -march values armv2, armv2a, armv3, armv3m are removed
with this patch.  I did not remove armv4 because it's a bit more
involved code-wise and there has been some pushback on the implications
for -mcpu=strongarm support.

Removing armv3m and earlier though is pretty straightforward.
This allows us to get rid of the armv3m and mode32 feature bits
in arm-cpus.in as they can be assumed to be universally available.

Consequently the mcpu values arm2, arm250, arm3, arm6, arm60, arm600, arm610, arm620, arm7, arm7d, arm7di, arm70, arm700, arm700i, arm710, arm720, arm710c, arm7100, arm7500, arm7500fe, arm7m, arm7dm, arm7dm are now also removed.

Bootstrapped and tested on arm-none-linux-gnueabihf and on arm-none-eabi
with an aprofile multilib configuration (which builds quite a lot of library
configurations).

[1] https://gcc.gnu.org/gcc-6/changes.html#arm

* config/arm/arm-cpus.in (armv3m, mode32): Delete features.
(ARMv4): Update.
(ARMv2, ARMv3, ARMv3m): Delete fgroups.
(ARMv6m): Update.
(armv2, armv2a, armv3, armv3m): Delete architectures.
(arm2, arm250, arm3, arm6, arm60, arm600, arm610, arm620,
arm7, arm7d, arm7di, arm70, arm700, arm700i, arm710, arm720,
arm710c, arm7100, arm7500, arm7500fe, arm7m, arm7dm, arm7dmi):
Delete cpus.
* config/arm/arm.md (maddsidi4): Remove check for arm_arch3m.
(*mulsidi3adddi): Likewise.
(mulsidi3): Likewise.
(*mulsidi3_nov6): Likewise.
(umulsidi3): Likewise.
(umulsidi3_nov6): Likewise.
(umaddsidi4): Likewise.
(*umulsidi3adddi): Likewise.
(smulsi3_highpart): Likewise.
(*smulsi3_highpart_nov6): Likewise.
(umulsi3_highpart): Likewise.
(*umulsi3_highpart_nov6): Likewise.
* config/arm/arm.h (arm_arch3m): Delete.
* config/arm/arm.c (arm_arch3m): Delete.
(arm_option_override_internal): Update armv3-related comment.
(arm_configure_build_target): Delete use of isa_bit_mode32.
(arm_option_reconfigure_globals): Delete set of arm_ach3m.
(arm_rtx_costs_internal): Delete check of arm_arch3m.
* config/arm/arm-fixed.md (mulsq3): Delete check for arm_arch3m.
(mulsa3): Likewise.
(mulusa3): Likewise.
* config/arm/arm-protos.h (arm_arch3m): Delete.
* config/arm/arm-tables.opt: Regenerate.
* config/arm/arm-tune.md: Likewise.
* config/arm/t-arm-elf (all_early_nofp): Delete mentions of
deleted architectures.

* gcc.target/arm/pr62554.c: Delete.
* gcc.target/arm/pr69610-1.c: Likewise.
* gcc.target/arm/pr69610-2.c: Likewise.

From-SVN: r260363

6 years ago[arm][1/2] Remove support for deprecated -march=armv5 and armv5e
Kyrylo Tkachov [Fri, 18 May 2018 13:08:16 +0000 (13:08 +0000)]
[arm][1/2] Remove support for deprecated -march=armv5 and armv5e

The -march=armv5 and armv5e options have been deprecated in GCC 7 [1].
This patch removes support for them.
It's mostly mechanical stuff. The functionality that was previously
gated on arm_arch5 is now gated on arm_arch5t and the functionality
that was gated on arm_arch5e is now gated on arm_arch5te.

A path in TARGET_OS_CPP_BUILTINS for VxWorks is now unreachable and
therefore is deleted.

References to armv5 and armv5e are deleted/updated throughout the
source tree and testsuite.

Bootstrapped and tested on arm-none-linux-gnueabihf.
Also built a cc1 for arm-wrs-vxworks as a sanity check.

        * config/arm/arm-cpus.in (armv5, armv5e): Delete features.
        (armv5t, armv5te): New features.
        (ARMv5, ARMv5e): Delete fgroups.
        (ARMv5t, ARMv5te): Adjust for above changes.
        (ARMv6m): Likewise.
        (armv5, armv5e): Delete arches.
        * config/arm/arm.md (*call_reg_armv5): Use arm_arch5t instead of
        arm_arch5.
        (*call_reg_arm): Likewise.
        (*call_value_reg_armv5): Likewise.
        (*call_value_reg_arm): Likewise.
        (*call_symbol): Likewise.
        (*call_value_symbol): Likewise.
        (*sibcall_insn): Likewise.
        (*sibcall_value_insn): Likewise.
        (clzsi2): Likewise.
        (prefetch): Likewise.
        (define_split and define_peephole2 dependent on arm_arch5):
        Likewise.
        * config/arm/arm.h (TARGET_LDRD): Use arm_arch5te instead of
        arm_arch5e.
        (TARGET_ARM_QBIT): Likewise.
        (TARGET_DSP_MULTIPLY): Likewise.
        (enum base_architecture): Delete BASE_ARCH_5, BASE_ARCH_5E.
        (arm_arch5, arm_arch5e): Delete.
        (arm_arch5t, arm_arch5te): Declare.
        * config/arm/arm.c (arm_arch5, arm_arch5e): Delete.
        (arm_arch5t): Declare.
        (arm_option_reconfigure_globals): Update for the above.
        (arm_options_perform_arch_sanity_checks): Update comment, replace
        use of arm_arch5 with arm_arch5t.
        (use_return_insn): Likewise.
        (arm_emit_call_insn): Likewise.
        (output_return_instruction): Likewise.
        (arm_final_prescan_insn): Likewise.
        (arm_coproc_builtin_available): Likewise.
        * config/arm/arm-c.c (arm_cpu_builtins): Replace arm_arch5 and
        arm_arch5e with arm_arch5t and arm_arch5te.
        * config/arm/arm-protos.h (arm_arch5, arm_arch5e): Delete.
        (arm_arch5t, arm_arch5te): Declare.
        * config/arm/arm-tables.opt: Regenerate.
        * config/arm/t-arm-elf: Remove references to armv5, armv5e.
        * config/arm/t-multilib: Likewise.
        * config/arm/thumb1.md (*call_reg_thumb1_v5): Check arm_arch5t
        instead of arm_arch5.
        (*call_reg_thumb1): Likewise.
        (*call_value_reg_thumb1_v5): Likewise.
        (*call_value_reg_thumb1): Likewise.
        * config/arm/vxworks.h (TARGET_OS_CPP_BUILTINS): Remove now
        unreachable path.
        * doc/invoke.texi (ARM Options): Remove references to armv5, armv5e.

        * gcc.target/arm/pr40887.c: Update comment.
        * lib/target-supports.exp: Don't generate effective target checks
        and related helpers for armv5.  Update comment.
        * gcc.target/arm/armv5_thumb_isa.c: Delete.
        * gcc.target/arm/di-longlong64-sync-withhelpers.c: Update effective
        target check and options.

        * config/arm/libunwind.S: Update comment relating to armv5.

From-SVN: r260362

6 years agogcov: add new option -t that prints output to stdout (PR gcov-profile/84846).
Martin Liska [Fri, 18 May 2018 13:06:31 +0000 (15:06 +0200)]
gcov: add new option -t that prints output to stdout (PR gcov-profile/84846).

2018-05-18  Martin Liska  <mliska@suse.cz>

PR gcov-profile/84846
* gcov.c (print_usage): Add new -t option.
(process_args): Handle the option.
(generate_results): Use stdout as output when requested by
the option.
2018-05-18  Martin Liska  <mliska@suse.cz>

PR gcov-profile/84846
* doc/gcov.texi: Document -t option of gcov tool.

From-SVN: r260361

6 years agoPrint working directory to gcov files (PR gcov-profile/84846).
Martin Liska [Fri, 18 May 2018 12:46:32 +0000 (14:46 +0200)]
Print working directory to gcov files (PR gcov-profile/84846).

2018-05-18  Martin Liska  <mliska@suse.cz>

PR gcov-profile/84846
* coverage.c (coverage_init): Write PWD to .gcno file.
* doc/gcov.texi: Document how working directory is printed.
* gcov-dump.c (dump_gcov_file): Print PWD.
* gcov.c (output_intermediate_file): Likewise.
(read_graph_file): Read PWD string.
(output_lines): Print PWD.

From-SVN: r260359

6 years agore PR middle-end/85817 (ICE in expand_call at gcc/calls.c:4291)
Prathamesh Kulkarni [Fri, 18 May 2018 12:31:04 +0000 (12:31 +0000)]
re PR middle-end/85817 (ICE in expand_call at gcc/calls.c:4291)

2018-05-18  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

PR middle-end/85817
* ipa-pure-const.c (malloc_candidate_p): Remove the check integer_zerop
for retval and return false if all args to phi are zero.

testsuite/
* gcc.dg/tree-ssa/pr83648.c: Change scan-tree-dump to
scan-tree-dump-not for h.

From-SVN: r260358

6 years agogimple-ssa-evrp.c (class evrp_folder): Add simplify_stmt_using_ranges method.
Richard Biener [Fri, 18 May 2018 11:54:37 +0000 (11:54 +0000)]
gimple-ssa-evrp.c (class evrp_folder): Add simplify_stmt_using_ranges method.

2018-05-18  Richard Biener  <rguenther@suse.de>

* gimple-ssa-evrp.c (class evrp_folder): Add simplify_stmt_using_ranges
method.
(evrp_dom_walker::before_dom_children): Call it.

* gcc.dg/tree-ssa/pr21559.c: Adjust.
* gcc.dg/tree-ssa/pr45397.c: Likewise.
* gcc.dg/tree-ssa/pr61839_1.c: Likewise.
* gcc.dg/tree-ssa/pr61839_2.c: Likewise.
* gcc.dg/tree-ssa/pr61839_4.c: Likewise.
* gcc.dg/tree-ssa/vrp17.c: Likewise.
* gcc.dg/tree-ssa/vrp18.c: Likewise.
* gcc.dg/tree-ssa/vrp23.c: Likewise.
* gcc.dg/tree-ssa/vrp24.c: Likewise.
* gcc.dg/tree-ssa/vrp58.c: Likewise.
* gcc.dg/vrp-min-max-1.c: Likewise.
* gcc.dg/vrp-min-max-3.c: New testcase.

From-SVN: r260357