gcc.git
6 years agoAdd doc for branch_cost effective target.
Christophe Lyon [Fri, 12 Jan 2018 11:25:31 +0000 (11:25 +0000)]
Add doc for branch_cost effective target.

2018-01-12  Christophe Lyon  <christophe.lyon@linaro.org>

gcc/
* doc/sourcebuild.texi (Effective-Target Keywords, Other attributes):
Add item for branch_cost.

From-SVN: r256574

6 years agore PR rtl-optimization/83565 (RTL combine pass yields wrong rotate result)
Eric Botcazou [Fri, 12 Jan 2018 10:18:24 +0000 (10:18 +0000)]
re PR rtl-optimization/83565 (RTL combine pass yields wrong rotate result)

PR rtl-optimization/83565
* rtlanal.c (nonzero_bits1): On WORD_REGISTER_OPERATIONS machines, do
not extend the result to a larger mode for rotate operations.
(num_sign_bit_copies1): Likewise.

From-SVN: r256572

6 years agoAdd dg-require-effective-target indirect_jumps for g++
Tom de Vries [Fri, 12 Jan 2018 10:03:00 +0000 (10:03 +0000)]
Add dg-require-effective-target indirect_jumps for g++

2018-01-12  Tom de Vries  <tom@codesourcery.com>

* g++.dg/ext/label13.C: Add dg-require-effective-target indirect_jumps.
* g++.dg/ext/label13a.C: Same.
* g++.dg/ext/label14.C: Same.
* g++.dg/ext/label2.C: Same.
* g++.dg/ext/label3.C: Same.
* g++.dg/torture/pr42462.C: Same.
* g++.dg/torture/pr42739.C: Same.
* g++.dg/warn/Wunused-label-3.C: Same.

From-SVN: r256571

6 years agoAdd dg-require-effective-target alloca for c++ test-cases
Tom de Vries [Fri, 12 Jan 2018 10:02:45 +0000 (10:02 +0000)]
Add dg-require-effective-target alloca for c++ test-cases

2018-01-12  Tom de Vries  <tom@codesourcery.com>

* c-c++-common/dwarf2/vla1.c: Add dg-require-effective-target alloca.
* g++.dg/Walloca1.C: Same.
* g++.dg/cpp0x/pr70338.C: Same.
* g++.dg/cpp1y/lambda-generic-vla1.C: Same.
* g++.dg/cpp1y/vla10.C: Same.
* g++.dg/cpp1y/vla2.C: Same.
* g++.dg/cpp1y/vla6.C: Same.
* g++.dg/cpp1y/vla8.C: Same.
* g++.dg/debug/debug5.C: Same.
* g++.dg/debug/debug6.C: Same.
* g++.dg/debug/pr54828.C: Same.
* g++.dg/diagnostic/pr70105.C: Same.
* g++.dg/eh/cleanup5.C: Same.
* g++.dg/eh/spbp.C: Same.
* g++.dg/ext/tmplattr9.C: Same.
* g++.dg/ext/vla10.C: Same.
* g++.dg/ext/vla11.C: Same.
* g++.dg/ext/vla12.C: Same.
* g++.dg/ext/vla15.C: Same.
* g++.dg/ext/vla16.C: Same.
* g++.dg/ext/vla17.C: Same.
* g++.dg/ext/vla3.C: Same.
* g++.dg/ext/vla6.C: Same.
* g++.dg/ext/vla7.C: Same.
* g++.dg/init/array24.C: Same.
* g++.dg/init/new47.C: Same.
* g++.dg/init/pr55497.C: Same.
* g++.dg/opt/pr78201.C: Same.
* g++.dg/template/vla2.C: Same.
* g++.dg/torture/Wsizeof-pointer-memaccess1.C: Same.
* g++.dg/torture/Wsizeof-pointer-memaccess2.C: Same.
* g++.dg/torture/pr62127.C: Same.
* g++.dg/torture/pr67055.C: Same.
* g++.dg/torture/stackalign/eh-alloca-1.C: Same.
* g++.dg/torture/stackalign/eh-inline-2.C: Same.
* g++.dg/torture/stackalign/eh-vararg-1.C: Same.
* g++.dg/torture/stackalign/eh-vararg-2.C: Same.
* g++.dg/warn/Wplacement-new-size-5.C: Same.
* g++.dg/warn/Wsizeof-pointer-memaccess-1.C: Same.
* g++.dg/warn/Wvla-1.C: Same.
* g++.dg/warn/Wvla-3.C: Same.
* g++.old-deja/g++.ext/array2.C: Same.
* g++.old-deja/g++.ext/constructor.C: Same.
* g++.old-deja/g++.law/builtin1.C: Same.
* g++.old-deja/g++.other/crash12.C: Same.
* g++.old-deja/g++.other/eh3.C: Same.
* g++.old-deja/g++.pt/array6.C: Same.
* g++.old-deja/g++.pt/dynarray.C: Same.

From-SVN: r256570

6 years agoFix g++.dg/cpp0x/inh-ctor30.C
Rainer Orth [Fri, 12 Jan 2018 09:56:30 +0000 (09:56 +0000)]
Fix g++.dg/cpp0x/inh-ctor30.C

* g++.dg/cpp0x/inh-ctor30.C: Allow for alternate mangled form.

From-SVN: r256569

6 years agoLink with correct values-*.o files on Solaris (PR target/40411)
Rainer Orth [Fri, 12 Jan 2018 09:52:53 +0000 (09:52 +0000)]
Link with correct values-*.o files on Solaris (PR target/40411)

gcc/testsuite:
PR libfortran/67412
* gfortran.dg/execute_command_line_2.f90: Remove dg-xfail-run-if
on *-*-solaris2.10.

libstdc++-v3:
PR libstdc++/64054
* testsuite/27_io/basic_ostream/inserters_arithmetic/char/hexfloat.cc:
Remove dg-xfail-run-if.

gcc:
PR target/40411
* config/sol2.h (STARTFILE_ARCH_SPEC): Don't use with -shared or
-symbolic.
Use values-Xc.o for -pedantic.
Link with values-xpg4.o for C90, values-xpg6.o otherwise.

From-SVN: r256568

6 years agoInclude all x86 targets in branch_cost effective target
Rainer Orth [Fri, 12 Jan 2018 09:18:07 +0000 (09:18 +0000)]
Include all x86 targets in branch_cost effective target

* lib/target-supports.exp (check_effective_target_branch_cost):
Accept all x86 targets.

From-SVN: r256567

6 years agoInitialize type_warnings::dyn_count with a default value (PR ipa/83054).
Martin Liska [Fri, 12 Jan 2018 08:59:52 +0000 (09:59 +0100)]
Initialize type_warnings::dyn_count with a default value (PR ipa/83054).

2018-01-12  Martin Liska  <mliska@suse.cz>

PR ipa/83054
* ipa-devirt.c (final_warning_record::grow_type_warnings):
New function.
(possible_polymorphic_call_targets): Use it.
(ipa_devirt): Likewise.
2018-01-12  Martin Liska  <mliska@suse.cz>

PR ipa/83054
* g++.dg/warn/pr83054.C: New test.

From-SVN: r256566

6 years agoAdd new verification for profile-count.h.
Martin Liska [Fri, 12 Jan 2018 08:58:58 +0000 (09:58 +0100)]
Add new verification for profile-count.h.

2018-01-12  Martin Liska  <mliska@suse.cz>

* profile-count.h (enum profile_quality): Use 0 as invalid
enum value of profile_quality.

From-SVN: r256565

6 years agoAdd new NDS32 options -mext-perf, -mext-perf2 and -mext-string in the documentation.
Chung-Ju Wu [Fri, 12 Jan 2018 08:44:21 +0000 (08:44 +0000)]
Add new NDS32 options -mext-perf, -mext-perf2 and -mext-string in the documentation.

gcc/
* doc/invoke.texi (NDS32 Options): Add -mext-perf, -mext-perf2 and
-mext-string options.

From-SVN: r256564

6 years agolto-streamer-out.c (DFS::DFS_write_tree_body): Process DECL_DEBUG_EXPR conditional...
Richard Biener [Fri, 12 Jan 2018 08:22:16 +0000 (08:22 +0000)]
lto-streamer-out.c (DFS::DFS_write_tree_body): Process DECL_DEBUG_EXPR conditional on DECL_HAS_DEBUG_EXPR_P.

2018-01-12  Richard Biener  <rguenther@suse.de>

* lto-streamer-out.c (DFS::DFS_write_tree_body): Process
DECL_DEBUG_EXPR conditional on DECL_HAS_DEBUG_EXPR_P.
* tree-streamer-in.c (lto_input_ts_decl_common_tree_pointers):
Likewise.
* tree-streamer-out.c (write_ts_decl_common_tree_pointers): Likewise.

From-SVN: r256563

6 years agoDaily bump.
GCC Administrator [Fri, 12 Jan 2018 00:16:17 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r256561

6 years agoconfigure.ac (--with-long-double-format): Add support for the configuration option...
Michael Meissner [Thu, 11 Jan 2018 23:31:09 +0000 (23:31 +0000)]
configure.ac (--with-long-double-format): Add support for the configuration option to change the default long double...

2018-01-11  Michael Meissner  <meissner@linux.vnet.ibm.com>

* configure.ac (--with-long-double-format): Add support for the
configuration option to change the default long double format on
PowerPC systems.
* config.gcc (powerpc*-linux*-*): Likewise.
* configure: Regenerate.
* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): If long
double is IEEE, define __KC__ and __KF__ to allow floatn.h to be
used without modification.

From-SVN: r256558

6 years agors6000-builtin.def (BU_P7_MISC_X): New #define.
Bill Schmidt [Thu, 11 Jan 2018 22:32:41 +0000 (22:32 +0000)]
rs6000-builtin.def (BU_P7_MISC_X): New #define.

[gcc]

2018-01-11  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

* config/rs6000/rs6000-builtin.def (BU_P7_MISC_X): New #define.
(SPEC_BARRIER): New instantiation of BU_P7_MISC_X.
* config/rs6000/rs6000.c (rs6000_expand_builtin): Handle
MISC_BUILTIN_SPEC_BARRIER.
(rs6000_init_builtins): Likewise.
* config/rs6000/rs6000.md (UNSPECV_SPEC_BARRIER): New UNSPECV
enum value.
(speculation_barrier): New define_insn.
* doc/extend.texi: Document __builtin_speculation_barrier.

[gcc/testsuite]

2018-01-11  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

* gcc.target/powerpc/spec-barr-1.c: New file.

From-SVN: r256557

6 years agore PR target/83203 (Inefficient int to avx2 vector conversion)
Jakub Jelinek [Thu, 11 Jan 2018 20:49:40 +0000 (21:49 +0100)]
re PR target/83203 (Inefficient int to avx2 vector conversion)

PR target/83203
* config/i386/i386.c (ix86_expand_vector_init_one_nonzero): If one_var
is 0, for V{8,16}S[IF] and V[48]D[IF]mode use gen_vec_set<mode>_0.
* config/i386/sse.md (VI8_AVX_AVX512F, VI4F_256_512): New mode
iterators.
(ssescalarmodesuffix): Add 512-bit vectors.  Use "d" or "q" for
integral modes instead of "ss" and "sd".
(vec_set<mode>_0): New define_insns for 256-bit and 512-bit
vectors with 32-bit and 64-bit elements.
(vecdupssescalarmodesuffix): New mode attribute.
(vec_dup<mode>): Use it.

From-SVN: r256556

6 years agoi386: Align stack frame if argument is passed on stack
H.J. Lu [Thu, 11 Jan 2018 20:44:46 +0000 (20:44 +0000)]
i386: Align stack frame if argument is passed on stack

When a function call is removed, it may become a leaf function.  But if
argument may be passed on stack, we need to align the stack frame when
there is no tail call.

Tested on Linux/i686 and Linux/x86-64.

gcc/

PR target/83330
* config/i386/i386.c (ix86_compute_frame_layout): Align stack
frame if argument is passed on stack.

gcc/testsuite/

PR target/83330
* gcc.target/i386/pr83330.c: New test.

From-SVN: r256555

6 years agore PR fortran/79383 (USE statement error)
Steven G. Kargl [Thu, 11 Jan 2018 20:24:36 +0000 (20:24 +0000)]
re PR fortran/79383 (USE statement error)

2018-01-11  Steven G. Kargl <kargl@gcc.gnu.org>

PR fortran/79383
* gfortran.dg/dtio_31.f03: New test.
* gfortran.dg/dtio_32.f03: New test.

From-SVN: r256554

6 years agore PR go/83794 (misc/cgo/test uses gigabytes of memory)
Ian Lance Taylor [Thu, 11 Jan 2018 19:58:55 +0000 (19:58 +0000)]
re PR go/83794 (misc/cgo/test uses gigabytes of memory)

PR go/83794
    misc/cgo/test: avoid endless loop when we can't parse notes

    Reviewed-on: https://go-review.googlesource.com/87416

From-SVN: r256553

6 years agoAdd some reproducers for issues found developing the location-wrappers patch
David Malcolm [Thu, 11 Jan 2018 19:38:52 +0000 (19:38 +0000)]
Add some reproducers for issues found developing the location-wrappers patch

gcc/testsuite/ChangeLog:
PR c++/43486
* g++.dg/wrappers: New subdirectory.
* g++.dg/wrappers/README: New file.
* g++.dg/wrappers/alloc.C: New test case.
* g++.dg/wrappers/cow-istream-string.C: New test case.
* g++.dg/wrappers/cp-stdlib.C: New test case.
* g++.dg/wrappers/sanitizer_coverage_libcdep_new.C: New test case.
* g++.dg/wrappers/wrapper-around-type-pack-expansion.C: New test
case.

From-SVN: r256552

6 years agore PR target/82682 (FAIL: gcc.target/i386/pr50038.c scan-assembler-times movzbl 2...
Jakub Jelinek [Thu, 11 Jan 2018 19:34:56 +0000 (20:34 +0100)]
re PR target/82682 (FAIL: gcc.target/i386/pr50038.c scan-assembler-times movzbl 2 (found 3 times) since r253958)

PR target/82682
* ree.c (combine_reaching_defs): Optimize also
reg2=exp; reg1=reg2; reg2=any_extend(reg1); into
reg2=any_extend(exp); reg1=reg2;, formatting fix.

From-SVN: r256551

6 years agoPR c++/82728 - wrong -Wunused-but-set-variable
Jason Merrill [Thu, 11 Jan 2018 19:08:41 +0000 (14:08 -0500)]
PR c++/82728 - wrong -Wunused-but-set-variable

PR c++/82799
PR c++/83690
* call.c (perform_implicit_conversion_flags): Call mark_rvalue_use.
* decl.c (case_conversion): Likewise.
* semantics.c (finish_static_assert): Call
perform_implicit_conversion_flags.

From-SVN: r256550

6 years agore PR tree-optimization/83189 (internal compiler error: in probability_in, at profile...
Jan Hubicka [Thu, 11 Jan 2018 17:47:20 +0000 (18:47 +0100)]
re PR tree-optimization/83189 (internal compiler error: in probability_in, at profile-count.h:1050)

PR middle-end/83189
* gimple-ssa-isolate-paths.c (isolate_path): Fix profile update.

From-SVN: r256545

6 years agore PR middle-end/83718 (ICE: Floating point exception in profile_count::apply_scale)
Jan Hubicka [Thu, 11 Jan 2018 17:46:01 +0000 (18:46 +0100)]
re PR middle-end/83718 (ICE: Floating point exception in profile_count::apply_scale)

PR middle-end/83718
* tree-inline.c (copy_cfg_body): Adjust num&den for scaling
after they are computed.
* g++.dg/torture/pr83718.C: New testcase.

From-SVN: r256544

6 years ago[C++ PATCH] kill unused enum
Nathan Sidwell [Thu, 11 Jan 2018 16:57:31 +0000 (16:57 +0000)]
[C++ PATCH] kill unused enum

https://gcc.gnu.org/ml/gcc-patches/2018-01/msg00923.html
* method.c (enum mangling_flags): Delete long-dead enum.

From-SVN: r256543

6 years agore PR ipa/83178 (g++.dg/ipa/devirt-22.C fail)
Martin Jambor [Thu, 11 Jan 2018 15:56:07 +0000 (16:56 +0100)]
re PR ipa/83178 (g++.dg/ipa/devirt-22.C fail)

PR ipa/83178
* g++.dg/ipa/devirt-22.C: Adjust scan-dump-times count.

From-SVN: r256542

6 years agore PR tree-optimization/83695 (ICE on valid code at -O3: Segmentation fault)
Bin Cheng [Thu, 11 Jan 2018 15:41:41 +0000 (15:41 +0000)]
re PR tree-optimization/83695 (ICE on valid code at -O3: Segmentation fault)

PR tree-optimization/83695
* gimple-loop-linterchange.cc
(tree_loop_interchange::interchange_loops): Call scev_reset_htab to
reset cached scev information after interchange.
(pass_linterchange::execute): Remove call to scev_reset_htab.

gcc/testsuite
PR tree-optimization/83695
* gcc.dg/tree-ssa/pr83695.c: New test.

From-SVN: r256541

6 years ago[arm][3/3] Implement fp16fml lane intrinsics
Kyrylo Tkachov [Thu, 11 Jan 2018 15:24:26 +0000 (15:24 +0000)]
[arm][3/3] Implement fp16fml lane intrinsics

This patch implements the lane-wise fp16fml intrinsics.
There's quite a few of them so I've split them up from
the other simpler fp16fml intrinsics.

These ones expose instructions such as

vfmal.f16 Dd, Sn, Sm[<index>]  0 <= index <= 1
vfmal.f16 Qd, Dn, Dm[<index>]  0 <= index <= 3
vfmsl.f16 Dd, Sn, Sm[<index>]  0 <= index <= 1
vfmsl.f16 Qd, Dn, Dm[<index>]  0 <= index <= 3

These instructions extract a single half-precision
floating-point value from one of the source regs
and perform a vfmal/vfmsl operation as per the
normal variant with that value.

The nuance here is that some of the intrinsics want
to do things like:

float32x2_t vfmlal_laneq_low_u32 (float32x2_t __r, float16x4_t __a, float16x8_t __b, const int __index)

where the float16x8_t value of '__b' is held in a Q
register, so we need to be a bit smart about finding
the right D or S sub-register and translating the
lane number to a lane in that sub-register, instead
of just passing the language-level const-int down to
the assembly instruction.

That's where most of the complexity of this patch comes from
but hopefully it's orthogonal enough to make sense.

Bootstrapped and tested on arm-none-linux-gnueabihf as well as
armeb-none-eabi.

* config/arm/arm_neon.h (vfmlal_lane_low_u32, vfmlal_lane_high_u32,
vfmlalq_laneq_low_u32, vfmlalq_lane_low_u32, vfmlal_laneq_low_u32,
vfmlalq_laneq_high_u32, vfmlalq_lane_high_u32, vfmlal_laneq_high_u32,
vfmlsl_lane_low_u32, vfmlsl_lane_high_u32, vfmlslq_laneq_low_u32,
vfmlslq_lane_low_u32, vfmlsl_laneq_low_u32, vfmlslq_laneq_high_u32,
vfmlslq_lane_high_u32, vfmlsl_laneq_high_u32): Define.
* config/arm/arm_neon_builtins.def (vfmal_lane_low,
vfmal_lane_lowv4hf, vfmal_lane_lowv8hf, vfmal_lane_high,
vfmal_lane_highv4hf, vfmal_lane_highv8hf, vfmsl_lane_low,
vfmsl_lane_lowv4hf, vfmsl_lane_lowv8hf, vfmsl_lane_high,
vfmsl_lane_highv4hf, vfmsl_lane_highv8hf): New sets of builtins.
* config/arm/iterators.md (VFMLSEL2, vfmlsel2): New mode attributes.
(V_lane_reg): Likewise.
* config/arm/neon.md (neon_vfm<vfml_op>l_lane_<vfml_half><VCVTF:mode>):
New define_expand.
(neon_vfm<vfml_op>l_lane_<vfml_half><vfmlsel2><mode>): Likewise.
(vfmal_lane_low<mode>_intrinsic,
vfmal_lane_low<vfmlsel2><mode>_intrinsic,
vfmal_lane_high<vfmlsel2><mode>_intrinsic,
vfmal_lane_high<mode>_intrinsic, vfmsl_lane_low<mode>_intrinsic,
vfmsl_lane_low<vfmlsel2><mode>_intrinsic,
vfmsl_lane_high<vfmlsel2><mode>_intrinsic,
vfmsl_lane_high<mode>_intrinsic): New define_insns.

* gcc.target/arm/simd/fp16fml_lane_high.c: New test.
* gcc.target/arm/simd/fp16fml_lane_low.c: New test.

From-SVN: r256540

6 years ago[arm][2/3] Implement fp16fml extension for ARMv8.4-A
Kyrylo Tkachov [Thu, 11 Jan 2018 15:21:26 +0000 (15:21 +0000)]
[arm][2/3] Implement fp16fml extension for ARMv8.4-A

This patch adds the +fp16fml extension that enables some
half-precision floating-point Advanced SIMD instructions,
available through arm_neon.h intrinsics.

This extension is on by default for armv8.4-a
if fp16 is available, so it can be enabled by -march=armv8.4-a+fp16.

fp16fml is also available for armv8.2-a and armv8.3-a through the
+fp16fml option that is added for these architectures.

The new instructions that this patch adds support for are:
vfmal.f16 Dr, Sm, Sn
vfmal.f16 Qr, Dm, Dn
vfmsl.f16 Dr, Sm, Sn
vfmsl.f16 Qr, Dm, Dn

They interpret their input registers as a vector of half-precision
floating-point values, extend them to single-precision vectors
and perform a fused multiply-add or subtract of them with the
destination vector.

This patch exposes these instructions through arm_neon.h intrinsics.
The set of intrinsics allows us to do stuff such as perform
the multiply-add/subtract operation on the low or top half of
float16x4_t and float16x8_t values.  This maps naturally in aarch64
to the FMLAL and FMLAL2 instructions but on arm we have to use the
fact that consecutive NEON registers overlap the wider register
(i.e. d0 is s0 plus s1, q0 is d0 plus d1 etc). This just means
we have to be careful to use the right subreg operand print code.

New arm-specific builtins are defined to expand to the new patterns.
I've managed to compress the define_expands using code, mode and int
iterators but the define_insns don't compress very well without two-tiered
iterators (iterator attributes expanding to iterators) which we
don't support.

Bootstrapped and tested on arm-none-linux-gnueabihf and also on
armeb-none-eabi.

* config/arm/arm-cpus.in (fp16fml): New feature.
(ALL_SIMD): Add fp16fml.
(armv8.2-a): Add fp16fml as an option.
(armv8.3-a): Likewise.
(armv8.4-a): Add fp16fml as part of fp16.
* config/arm/arm.h (TARGET_FP16FML): Define.
* config/arm/arm-c.c (arm_cpu_builtins): Define __ARM_FEATURE_FP16_FML
when appropriate.
* config/arm/arm-modes.def (V2HF): Define.
* config/arm/arm_neon.h (vfmlal_low_u32, vfmlsl_low_u32,
vfmlal_high_u32, vfmlsl_high_u32, vfmlalq_low_u32,
vfmlslq_low_u32, vfmlalq_high_u32, vfmlslq_high_u32): Define.
* config/arm/arm_neon_builtins.def (vfmal_low, vfmal_high,
vfmsl_low, vfmsl_high): New set of builtins.
* config/arm/iterators.md (PLUSMINUS): New code iterator.
(vfml_op): New code attribute.
(VFMLHALVES): New int iterator.
(VFML, VFMLSEL): New mode attributes.
(V_reg): Define mapping for V2HF.
(V_hi, V_lo): New mode attributes.
(VF_constraint): Likewise.
(vfml_half, vfml_half_selector): New int attributes.
* config/arm/neon.md (neon_vfm<vfml_op>l_<vfml_half><mode>): New
define_expand.
(vfmal_low<mode>_intrinsic, vfmsl_high<mode>_intrinsic,
vfmal_high<mode>_intrinsic, vfmsl_low<mode>_intrinsic):
New define_insn.
* config/arm/t-arm-elf (v8_fps): Add fp16fml.
* config/arm/t-multilib (v8_2_a_simd_variants): Add fp16fml.
* config/arm/unspecs.md (UNSPEC_VFML_LO, UNSPEC_VFML_HI): New unspecs.
* doc/invoke.texi (ARM Options): Document fp16fml.  Update armv8.4-a
documentation.
* doc/sourcebuild.texi (arm_fp16fml_neon_ok, arm_fp16fml_neon):
Document new effective target and option set.

* gcc.target/arm/multilib.exp: Add combination tests for fp16fml.
* gcc.target/arm/simd/fp16fml_high.c: New test.
* gcc.target/arm/simd/fp16fml_low.c: Likewise.
* lib/target-supports.exp
(check_effective_target_arm_fp16fml_neon_ok_nocache,
check_effective_target_arm_fp16fml_neon_ok,
add_options_for_arm_fp16fml_neon): New procedures.

From-SVN: r256539

6 years ago[arm][1/3] Add -march=armv8.4-a option
Kyrylo Tkachov [Thu, 11 Jan 2018 15:18:04 +0000 (15:18 +0000)]
[arm][1/3] Add -march=armv8.4-a option

This patch adds support for the Armv8.4-A architecture [1]
in the arm backend. This is done through the new
-march=armv8.4-a option.

With this patch armv8.4-a is recognised as an argument
and supports the extensions: simd, fp16, crypto, nocrypto,
nofp with the familiar meaning of these options.
Worth noting that there is no dotprod option like in
armv8.2-a and armv8.3-a because Dot Product support is
mandatory in Armv8.4-A when simd is available, so when using
+simd (of fp16 which enables +simd), the +dotprod is implied.

The various multilib selection makefile fragments are updated
too and the mutlilib.exp test gets a few armv8.4-a combination
tests.

Bootstrapped and tested on arm-none-linux-gnueabihf.

From-SVN: r256537

6 years agore PR target/81821 ([RX] xchg_mem<mode> uses wrong memory operand size)
Oleg Endo [Thu, 11 Jan 2018 15:16:21 +0000 (15:16 +0000)]
re PR target/81821 ([RX] xchg_mem<mode> uses wrong memory operand size)

gcc/
PR target/81821
* config/rx/rx.md (BW): New mode attribute.
(sync_lock_test_and_setsi): Add mode suffix to insn output.

From-SVN: r256536

6 years agore PR tree-optimization/83435 (ICE in set_value_range, at tree-vrp.c:211)
Richard Biener [Thu, 11 Jan 2018 13:42:29 +0000 (13:42 +0000)]
re PR tree-optimization/83435 (ICE in set_value_range, at tree-vrp.c:211)

2018-01-11  Richard Biener  <rguenther@suse.de>

PR tree-optimization/83435
* graphite.c (canonicalize_loop_form): Ignore fake loop exit edges.
* graphite-scop-detection.c (scop_detection::get_sese): Likewise.
* tree-vrp.c (add_assert_info): Drop TREE_OVERFLOW if they appear.

* gcc.dg/graphite/pr83435.c: New testcase.

From-SVN: r256535

6 years ago[AArch64] Add const_offset field to aarch64_address_info
Richard Sandiford [Thu, 11 Jan 2018 13:18:23 +0000 (13:18 +0000)]
[AArch64] Add const_offset field to aarch64_address_info

This patch records the integer value of the address offset in
aarch64_address_info, so that it doesn't need to be re-extracted
from the rtx.  The SVE port will make more use of this.  The patch
also uses poly_int64 routines to manipulate the offset, rather than
just handling CONST_INTs.

2018-01-11  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* config/aarch64/aarch64.c (aarch64_address_info): Add a const_offset
field.
(aarch64_classify_address): Initialize it.  Track polynomial offsets.
(aarch64_print_address_internal): Use it to check for a zero offset.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r256534

6 years ago[AArch64] Set NUM_POLY_INT_COEFFS to 2
Richard Sandiford [Thu, 11 Jan 2018 13:17:02 +0000 (13:17 +0000)]
[AArch64] Set NUM_POLY_INT_COEFFS to 2

This patch switches the AArch64 port to use 2 poly_int coefficients
and updates code as necessary to keep it compiling.

One potentially-significant change is to
aarch64_hard_regno_caller_save_mode.  The old implementation
was written in a pretty conservative way: it changed the default
behaviour for single-register values, but used the default handling
for multi-register values.

I don't think that's necessary, since the interesting cases for this
macro are usually the single-register ones.  Multi-register modes take
up the whole of the constituent registers and the move patterns for all
multi-register modes should be equally good.

Using the original mode for multi-register cases stops us from using
SVE modes to spill multi-register NEON values.  This was caught by
gcc.c-torture/execute/pr47538.c.

Also, aarch64_shift_truncation_mask used GET_MODE_BITSIZE - 1.
GET_MODE_UNIT_BITSIZE - 1 is equivalent for the cases that it handles
(which are all scalars), and I think it's more obvious, since if we ever
do use this for elementwise shifts of vector modes, the mask will depend
on the number of bits in each element rather than the number of bits in
the whole vector.

2018-01-11  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* config/aarch64/aarch64-modes.def (NUM_POLY_INT_COEFFS): Set to 2.
* config/aarch64/aarch64-protos.h (aarch64_initial_elimination_offset):
Return a poly_int64 rather than a HOST_WIDE_INT.
(aarch64_offset_7bit_signed_scaled_p): Take the offset as a poly_int64
rather than a HOST_WIDE_INT.
* config/aarch64/aarch64.h (aarch64_frame): Protect with
HAVE_POLY_INT_H rather than HOST_WIDE_INT.  Change locals_offset,
hard_fp_offset, frame_size, initial_adjust, callee_offset and
final_offset from HOST_WIDE_INT to poly_int64.
* config/aarch64/aarch64-builtins.c (aarch64_simd_expand_args): Use
to_constant when getting the number of units in an Advanced SIMD
mode.
(aarch64_builtin_vectorized_function): Check for a constant number
of units.
* config/aarch64/aarch64-simd.md (mov<mode>): Handle polynomial
GET_MODE_SIZE.
(aarch64_ld<VSTRUCT:nregs>_lane<VALLDIF:mode>): Use the nunits
attribute instead of GET_MODE_NUNITS.
* config/aarch64/aarch64.c (aarch64_hard_regno_nregs)
(aarch64_class_max_nregs): Use the constant_lowest_bound of the
GET_MODE_SIZE for fixed-size registers.
(aarch64_const_vec_all_same_in_range_p): Use const_vec_duplicate_p.
(aarch64_hard_regno_call_part_clobbered, aarch64_classify_index)
(aarch64_mode_valid_for_sched_fusion_p, aarch64_classify_address)
(aarch64_legitimize_address_displacement, aarch64_secondary_reload)
(aarch64_print_operand, aarch64_print_address_internal)
(aarch64_address_cost, aarch64_rtx_costs, aarch64_register_move_cost)
(aarch64_short_vector_p, aapcs_vfp_sub_candidate)
(aarch64_simd_attr_length_rglist, aarch64_operands_ok_for_ldpstp):
Handle polynomial GET_MODE_SIZE.
(aarch64_hard_regno_caller_save_mode): Likewise.  Return modes
wider than SImode without modification.
(tls_symbolic_operand_type): Use strip_offset instead of split_const.
(aarch64_pass_by_reference, aarch64_layout_arg, aarch64_pad_reg_upward)
(aarch64_gimplify_va_arg_expr): Assert that we don't yet handle
passing and returning SVE modes.
(aarch64_function_value, aarch64_layout_arg): Use gen_int_mode
rather than GEN_INT.
(aarch64_emit_probe_stack_range): Take the size as a poly_int64
rather than a HOST_WIDE_INT, but call sorry if it isn't constant.
(aarch64_allocate_and_probe_stack_space): Likewise.
(aarch64_layout_frame): Cope with polynomial offsets.
(aarch64_save_callee_saves, aarch64_restore_callee_saves): Take the
start_offset as a poly_int64 rather than a HOST_WIDE_INT.  Track
polynomial offsets.
(offset_9bit_signed_unscaled_p, offset_12bit_unsigned_scaled_p)
(aarch64_offset_7bit_signed_scaled_p): Take the offset as a
poly_int64 rather than a HOST_WIDE_INT.
(aarch64_get_separate_components, aarch64_process_components)
(aarch64_expand_prologue, aarch64_expand_epilogue)
(aarch64_use_return_insn_p): Handle polynomial frame offsets.
(aarch64_anchor_offset): New function, split out from...
(aarch64_legitimize_address): ...here.
(aarch64_builtin_vectorization_cost): Handle polynomial
TYPE_VECTOR_SUBPARTS.
(aarch64_simd_check_vect_par_cnst_half): Handle polynomial
GET_MODE_NUNITS.
(aarch64_simd_make_constant, aarch64_expand_vector_init): Get the
number of elements from the PARALLEL rather than the mode.
(aarch64_shift_truncation_mask): Use GET_MODE_UNIT_BITSIZE
rather than GET_MODE_BITSIZE.
(aarch64_evpc_trn, aarch64_evpc_uzp, aarch64_evpc_ext)
(aarch64_evpc_rev, aarch64_evpc_dup, aarch64_evpc_zip)
(aarch64_expand_vec_perm_const_1): Handle polynomial
d->perm.length () and d->perm elements.
(aarch64_evpc_tbl): Likewise.  Use nelt rather than GET_MODE_NUNITS.
Apply to_constant to d->perm elements.
(aarch64_simd_valid_immediate, aarch64_vec_fpconst_pow_of_2): Handle
polynomial CONST_VECTOR_NUNITS.
(aarch64_move_pointer): Take amount as a poly_int64 rather
than an int.
(aarch64_progress_pointer): Avoid temporary variable.
* config/aarch64/aarch64.md (aarch64_<crc_variant>): Use
the mode attribute instead of GET_MODE.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r256533

6 years ago[AArch64] Rework interface to add constant/offset routines
Richard Sandiford [Thu, 11 Jan 2018 13:13:54 +0000 (13:13 +0000)]
[AArch64] Rework interface to add constant/offset routines

The port had aarch64_add_offset and aarch64_add_constant routines
that did similar things.  This patch replaces them with an expanded
version of aarch64_add_offset that takes separate source and
destination registers.  The new routine also takes a poly_int64 offset
instead of a HOST_WIDE_INT offset, but it leaves the HOST_WIDE_INT
case to aarch64_add_offset_1, which is basically a repurposed
aarch64_add_constant_internal.  The SVE patch will put the handling
of VL-based constants in aarch64_add_offset, while still using
aarch64_add_offset_1 for the constant part.

The vcall_offset == 0 path in aarch64_output_mi_thunk will use temp0
as well as temp1 once SVE is added.

A side-effect of the patch is that we now generate:

        mov     x29, sp

instead of:

        add     x29, sp, 0

in the pr70044.c test.

2018-01-11  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* config/aarch64/aarch64.c (aarch64_force_temporary): Assert that
x exists before using it.
(aarch64_add_constant_internal): Rename to...
(aarch64_add_offset_1): ...this.  Replace regnum with separate
src and dest rtxes.  Handle the case in which they're different,
including when the offset is zero.  Replace scratchreg with an rtx.
Use 2 additions if there is no spare register into which we can
move a 16-bit constant.
(aarch64_add_constant): Delete.
(aarch64_add_offset): Replace reg with separate src and dest
rtxes.  Take a poly_int64 offset instead of a HOST_WIDE_INT.
Use aarch64_add_offset_1.
(aarch64_add_sp, aarch64_sub_sp): Take the scratch register as
an rtx rather than an int.  Take the delta as a poly_int64
rather than a HOST_WIDE_INT.  Use aarch64_add_offset.
(aarch64_expand_mov_immediate): Update uses of aarch64_add_offset.
(aarch64_expand_prologue): Update calls to aarch64_sub_sp,
aarch64_allocate_and_probe_stack_space and aarch64_add_offset.
(aarch64_expand_epilogue): Update calls to aarch64_add_offset
and aarch64_add_sp.
(aarch64_output_mi_thunk): Use aarch64_add_offset rather than
aarch64_add_constant.

gcc/testsuite/
* gcc.target/aarch64/pr70044.c: Allow "mov x29, sp" too.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r256532

6 years ago[AArch64] Extra scalar_float_mode patch
Richard Sandiford [Thu, 11 Jan 2018 13:11:12 +0000 (13:11 +0000)]
[AArch64] Extra scalar_float_mode patch

In preparation for the switch to NUM_POLY_INT_COEFFS==2.

2018-01-11  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* config/aarch64/aarch64.c (aarch64_reinterpret_float_as_int):
Use scalar_float_mode.

From-SVN: r256531

6 years ago[AArch64] Avoid GET_MODE_NUNITS in v8.4 support
Richard Sandiford [Thu, 11 Jan 2018 13:07:17 +0000 (13:07 +0000)]
[AArch64] Avoid GET_MODE_NUNITS in v8.4 support

This patch replaces GET_MODE_NUNITS in some of the v8.4 support
with equivalent values, in preparation for the switch to
NUM_POLY_INT_COEFFS==2.

2018-01-11  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* config/aarch64/aarch64-simd.md
(aarch64_fml<f16mac1>l<f16quad>_low<mode>): Avoid GET_MODE_NUNITS.
(aarch64_fml<f16mac1>l<f16quad>_high<mode>): Likewise.
(aarch64_fml<f16mac1>l_lane_lowv2sf): Likewise.
(aarch64_fml<f16mac1>l_lane_highv2sf): Likewise.
(aarch64_fml<f16mac1>lq_laneq_lowv4sf): Likewise.
(aarch64_fml<f16mac1>lq_laneq_highv4sf): Likewise.
(aarch64_fml<f16mac1>l_laneq_lowv2sf): Likewise.
(aarch64_fml<f16mac1>l_laneq_highv2sf): Likewise.
(aarch64_fml<f16mac1>lq_lane_lowv4sf): Likewise.
(aarch64_fml<f16mac1>lq_lane_highv4sf): Likewise.

From-SVN: r256530

6 years agore PR target/83514 (ABRT in arm_declare_function_name passing a null pointer to std...
Prathamesh Kulkarni [Thu, 11 Jan 2018 12:13:42 +0000 (12:13 +0000)]
re PR target/83514 (ABRT in arm_declare_function_name passing a null pointer to std::string)

2018-01-11  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

PR target/83514
* config/arm/arm.c (arm_declare_function_name): Set arch_to_print if
targ_options->x_arm_arch_string is non NULL.

From-SVN: r256529

6 years agore PR lto/81968 (early lto debug objects make Solaris ld SEGV)
Richard Biener [Thu, 11 Jan 2018 12:12:39 +0000 (12:12 +0000)]
re PR lto/81968 (early lto debug objects make Solaris ld SEGV)

2018-01-11  Richard Biener  <rguenther@suse.de>
Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

PR lto/81968
libiberty/
* simple-object-common.h (struct simple_object_functions):
Change copy_lto_debug_sections callback signature.
* simple-object-elf.c (SHN_HIRESERVE, SHT_SYMTAB_SHNDX,
SHF_INFO_LINK): Add defines.
(simple_object_elf_copy_lto_debug_sections): Instead of
leaving not to be copied sections empty unnamed SHT_NULL
remove them from the target section headers and adjust section
reference everywhere.  Handle SHN_XINDEX in the symbol table
processing properly.
* simple-object.c (handle_lto_debug_sections): Change
interface to return a modified string and handle renaming
of relocation sections.

Co-Authored-By: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
From-SVN: r256528

6 years ago2018-01-11 Tamar Christina <tamar.christina@arm.com>
Tamar Christina [Thu, 11 Jan 2018 11:56:22 +0000 (11:56 +0000)]
2018-01-11  Tamar Christina  <tamar.christina@arm.com>

* config/aarch64/aarch64.h
(AARCH64_FL_FOR_ARCH8_4): Add  AARCH64_FL_DOTPROD.

gcc/testsuite/
2018-01-11  Tamar Christina  <tamar.christina@arm.com>

* gcc.target/aarch64/advsimd-intrinsics/vdot-compile-2.c: New.

From-SVN: r256527

6 years ago[PR82096] Fix ICE in int_mode_for_mode with arm-linux-gnueabi
Sudakshina Das [Thu, 11 Jan 2018 10:46:59 +0000 (10:46 +0000)]
[PR82096] Fix ICE in int_mode_for_mode with arm-linux-gnueabi

The bug reported a particular test di-longlong64-sync-1.c failing when run
on arm-linux-gnueabi with options -mthumb -march=armv5t -O[g,1,2,3] and
-mthumb -march=armv6 -O[g,1,2,3].

The crash was caused because of the explicit VOIDmode argument that is sent
to emit_store_flag_force () and that the emit_store_flag_force () was not
handling the VOIDmode adequately. This patch fixes that.

ChangeLog entries:

*** gcc/ChangeLog ***

2017-01-11  Sudakshina Das  <sudi.das@arm.com>

PR target/82096
* expmed.c (emit_store_flag_force): Swap if const op0
and change VOIDmode to mode of op0.

*** gcc/testsuite/ChangeLog ***

2017-01-11  Sudakshina Das  <sudi.das@arm.com>

PR target/82096
* gcc.c-torture/compile/pr82096.c: New test.

From-SVN: r256526

6 years agoFix mode_for_size units in caller-save.c (PR83761)
Richard Sandiford [Thu, 11 Jan 2018 09:54:26 +0000 (09:54 +0000)]
Fix mode_for_size units in caller-save.c (PR83761)

The new opt_mode asserts triggered for replace_reg_with_saved_mem
because it was passing bytes rather than bits to mode_for_size.
Previously we ended up with a BLKmode register instead, but
presumably that didn't matter because this is "only" used for
debug insns.

2018-01-11  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
PR rtl-optimization/83761
* caller-save.c (replace_reg_with_saved_mem): Pass bits rather
than bytes to mode_for_size.

From-SVN: r256525

6 years ago[Ada] Warning on out-of-range value for default-initialized scalar object
Gary Dismukes [Thu, 11 Jan 2018 08:56:18 +0000 (08:56 +0000)]
[Ada] Warning on out-of-range value for default-initialized scalar object

When an object of a type with a specified Default_Value aspect is
declared without an explicit initial value and the default value is
out of range of the objects subtype, the compiler now issues a warning
that Constraint_Error will be raised due to an out-of-range value.

The test below must output a compiler warning as follows:

$ gcc -c -gnatj70 default_warning.adb
default_warning.adb:7:08: warning: value not in range of type
                          "Subint" defined at line 5,
                          "Constraint_Error" will be raised at run
                          time

procedure Default_Warning is

   type Int_With_Default is new Integer with Default_Value => 0;

   subtype Subint is Int_With_Default range 1 .. 100;

   S : Subint;

begin
   null;
end Default_Warning;

2018-01-11  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

* exp_ch3.adb (Default_Initialize_Object): Call New_Copy_Tree on the
result of Get_Simple_Init_Value and pass the source location of the
object declaration's object_definition.

From-SVN: r256524

6 years ago[Ada] Crash on build-in-place call with address specification for target
Ed Schonberg [Thu, 11 Jan 2018 08:56:12 +0000 (08:56 +0000)]
[Ada] Crash on build-in-place call with address specification for target

The presence of an address clause complicates the build-in-place expansion
because the indicated address must be processed before the indirect call is
generated, including the definition of a local pointer to the object.

The address clause may come from an aspect specification or from an explicit
attribute specification appearing after the object declaration. These two
cases require different processing.

2018-01-11  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_ch6.adb (Make_Build_In_Place_Call_In_Object_Declaration): Handle
properly object declarations with initializations that are
build-in-place function calls, when there is an address specification,
either as an aspect specification or an explicit attribute
specification clause, for the initialized object.
* freeze.adb (Check_Address_Clause): Do not remove side-effects from
initial expressions in the case of a build-in-place call.

gcc/testsuite/

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

From-SVN: r256523

6 years ago[Ada] Allow uses of range utility routines on private types
Piotr Trojanek [Thu, 11 Jan 2018 08:56:07 +0000 (08:56 +0000)]
[Ada] Allow uses of range utility routines on private types

Frontend only calls Is_Null_Range and Not_Null_Range routines on full views
of types, but backends (for example GNATprove) might call them also on
private types. This patch adapts those routines to transparently retrieve
the full type when called on a private type.

No frontend test, because only external backends are affected.

2018-01-11  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* sem_eval.adb (Is_Null_Range): Retrieve the full view when called on a
private (sub)type; refactor to avoid early return statement.
(Not_Null_Range): Same as above.

From-SVN: r256522

6 years ago[Ada] Prohibit concurrent types in Ghost regions
Hristian Kirtchev [Thu, 11 Jan 2018 08:55:57 +0000 (08:55 +0000)]
[Ada] Prohibit concurrent types in Ghost regions

This patch ensures that single concurrent type declarations are marked as Ghost
when they appear within a Ghost region. In addition, the patch verifies that no
concurrent type is declared within a Ghost region and issues an error.

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

--  types.ads

package Types with Ghost is
   protected Prot_Obj is                                             --  Error
   end Prot_Obj;

   protected type Prot_Typ is                                        --  Error
   end Prot_Typ;

   task Task_Obj;                                                    --  Error

   task type Task_Typ;                                               --  Error
end Types;

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

$ gcc -c types.ads
types.ads:2:14: ghost type "Prot_Obj" cannot be concurrent
types.ads:5:19: ghost type "Prot_Typ" cannot be concurrent
types.ads:8:09: ghost type "Task_Obj" cannot be concurrent
types.ads:10:14: ghost type "Task_Typ" cannot be concurrent

2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* freeze.adb (Freeze_Entity): Ensure that a Ghost type is not
concurrent, nor effectively volatile.
* ghost.adb (Check_Ghost_Type): New routine.
* ghost.ads (Check_Ghost_Type): New routine.
* sem_util.adb (Is_Declaration): Reimplemented. The routine can now
consider specific subsets of declarations.
(Is_Declaration_Other_Than_Renaming): Removed. Its functionality is
replicated by Is_Declaration.
* sem_util.ads (Is_Declaration): New parameter profile. Update the
comment on usage.
(Is_Declaration_Other_Than_Renaming): Removed.

From-SVN: r256521

6 years ago[Ada] Detection of illegal constituent assignments
Hristian Kirtchev [Thu, 11 Jan 2018 08:55:52 +0000 (08:55 +0000)]
[Ada] Detection of illegal constituent assignments

This patch modifies the analysis of assignment statements to detect an illegal
attempt to alter the value of single protected type Part_Of constituent when
inside a protected function.

2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* sem_ch5.adb (Analyze_Assignment): Assignments to variables that act
as Part_Of consituents of single protected types are illegal when they
take place inside a protected function.
(Diagnose_Non_Variable_Lhs): Use Within_Function to check for an
enclosing function.
(Is_Protected_Part_Of_Constituent): New routine.
(Within_Function): New routine.

gcc/testsuite/

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

From-SVN: r256520

6 years ago[Ada] Bump copyright notices to 2018
Arnaud Charlet [Thu, 11 Jan 2018 08:55:25 +0000 (08:55 +0000)]
[Ada] Bump copyright notices to 2018

2018-01-11  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

Bump copyright notices to 2018.

From-SVN: r256519

6 years ago[Ada] Minor reformatting
Hristian Kirtchev [Thu, 11 Jan 2018 08:54:39 +0000 (08:54 +0000)]
[Ada] Minor reformatting

2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* binde.adb, par-ch6.adb, par-ch9.adb, sem_ch12.adb, sem_ch13.adb:
Minor reformatting.

From-SVN: r256518

6 years ago[Ada] No error on missing enclosing parentheses in Expression Function
Justin Squirek [Thu, 11 Jan 2018 08:54:34 +0000 (08:54 +0000)]
[Ada] No error on missing enclosing parentheses in Expression Function

This patch fixes an issue whereby an expression within an expression
function declaration or completion without proper parenthesization is
incorrectly accepted by the compiler.

2018-01-11  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* par-ch6.adb (Scan_Body_Or_Expression_Function): Add additional check
to make sure a given expression function is properly parenthesized.

gcc/testsuite/

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

From-SVN: r256517

6 years ago[Ada] Missing diagnostic of categorization dependency
Hristian Kirtchev [Thu, 11 Jan 2018 08:54:26 +0000 (08:54 +0000)]
[Ada] Missing diagnostic of categorization dependency

This patch modifies the analysis of subprogram bodies to catch a case where a
pure subprogram body unit depends on non-pure units.

2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Check the
categorization of a subprogram body which does not complete a previous
declaration.

gcc/testsuite/

* gnat.dg/pure_subp_body.adb, gnat.dg/pure_subp_body_pkg.ads: New
testcase.

From-SVN: r256516

6 years ago[Ada] Incorrect diagnostic on illegal with clause
Hristian Kirtchev [Thu, 11 Jan 2018 08:54:21 +0000 (08:54 +0000)]
[Ada] Incorrect diagnostic on illegal with clause

This patch updates the detection of illegal with clauses which import private
child packages to properly detect a grandchild of Ada.

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

--  fake.ads

package Fake is
end Fake;

--  fake-ada.ads

package Fake.Ada is
end Fake.Ada;

--  fake-ada-text_io.ads

package Fake.Ada.Text_IO is
end Fake.Ada.Text_IO;

--  fake-ada-text_io-float_io.ads

private generic
   type Num is digits <>;

package Fake.Ada.Text_IO.Float_IO is
end Fake.Ada.Text_IO.Float_IO;

--  fake-float_io.ads

private generic
   type Num is digits <>;

package Fake.Float_IO is
end Fake.Float_IO;

--  main.ads

with Fake.Ada.Text_IO.Float_IO;
with Fake.Float_IO;

package Main is
end Main;

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

$ gcc -c main.ads
main.ads:1:06: unit in with clause is private child unit
main.ads:1:06: current unit must also have parent "Text_IO"
main.ads:2:06: unit in with clause is private child unit
main.ads:2:06: current unit must also have parent "Fake"

2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* sem_ch10.adb (Check_Private_Child_Unit): Ensure that the enclosing
scope of package Ada is Standard.

From-SVN: r256515

6 years ago[Ada] Spurious error on referene to subcoponrnt in dynamic predicate
Ed Schonberg [Thu, 11 Jan 2018 08:54:17 +0000 (08:54 +0000)]
[Ada] Spurious error on referene to subcoponrnt in dynamic predicate

This patch fixes a visibility error in the expression for a dynamic predicate
of a record type, when the expression contains a reference to a subcomponent
of the record given by a selected component whose prefix is the name of the
enclosing component.

Executing

   gnatmake -q -gnata main
   ./main

must yield:

   TGV OK
   Amtrak broken, as usual

----
with Text_IO; use Text_IO;
with Recpred; use Recpred;
procedure Main is
   TGV : Train_Data;
   Amtrak : Train_Data;
begin
  TGV  := (20, (10,10));
  Put_Line ("TGV OK");

  begin
     Amtrak := (30, (40, 40));
  exception
     when Others =>
        Put_Line ("Amtrak broken, as usual");
  end;
end;
----
package Recpred is

   type Train_Position is record
      TTD : Integer;
      VSS : Integer;
   end record;

   type Train_Data is record
      MA             : Integer;
      Front_Position : Train_Position;
   end record
     with Dynamic_Predicate => MA >= Front_Position.TTD;

end Recpred;

2018-01-11  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch13.adb (Replace_Type_Ref): Handle properly reference to a
subcomponent of the current entity when building the body for a dynamic
predicate function for a record with composite subcomponents.

From-SVN: r256514

6 years ago[Ada] Secondary stack leaks during object initialization
Hristian Kirtchev [Thu, 11 Jan 2018 08:54:12 +0000 (08:54 +0000)]
[Ada] Secondary stack leaks during object initialization

This patch modifies the transient scope mechanism to prevent secondary stack
leaks during object initialization. The modifications are as follows:

1) Prior to this change, the secondary stack was never managed within type
initialization procedures, for reasons unknown. It is speculated that the
controlled type model used at that time may have influenced this decision.
The secondary stack is now managed within type initialization procedures
in order to recover the memory once individual components or whole objects
are initialized.

2) A transient scope now delegates the secondary stack management to an
enclosing scope if there is no suitable context to wrap. This ensures that
the requirement to manage the secondary stack is not lost when the scope was
established for that purpose in mind.

3) A previous mechanism which examined the definition of a type (recursively)
to determine whether the type will involve the secondary stack was removed
because a) the mechanism could not detect this need with certainty, and b) the
trigger for secondary stack usage is now moved to the resolution of function
calls, which is always accurate.

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

--  types.ads

with Ada.Finalization; use Ada.Finalization;

package Types is
   type Ctrl is new Controlled with record
      Id : Integer;
   end record;

   procedure Initialize (Obj : in out Ctrl);

   function Make_Ctrl return Ctrl;
   function Make_Ctrl_From (Obj : Ctrl) return Ctrl;

   type Constr is array (1 .. 3) of Ctrl;
   type Unconstr is array (Integer range <>) of Ctrl;

   function Make_Constr return Constr;
   function Make_Unconstr (Low : Integer; High : Integer) return Unconstr;

   type Rec_1 is new Controlled with record
      Comp : Ctrl := Make_Ctrl;
   end record;

   type Rec_2 is new Controlled with record
      Comp : Ctrl := Make_Ctrl_From (Make_Ctrl);
   end record;

   type Rec_3 is new Controlled with record
      Comp : Constr := Make_Constr;
   end record;

   type Rec_4 is new Controlled with record
      Comp : Unconstr (1 .. 3) := Make_Unconstr (1, 3);
   end record;

   type Rec_5 is record
      Comp : Integer := 1 + Make_Ctrl.Id;
   end record;

   type Rec_6 is record
      Comp : Boolean := (for all X in 1 .. Make_Ctrl.Id =>
                           X = Make_Ctrl.Id);
   end record;
end Types;

--  types.adb

package body Types is
   Id_Gen : Integer := 0;

   procedure Initialize (Obj : in out Ctrl) is
   begin
      Id_Gen := Id_Gen + 1;
      Obj.Id := Id_Gen;
   end Initialize;

   function Make_Constr return Constr is
      Result : constant Constr := (others => Make_Ctrl);
   begin
      return Result;
   end Make_Constr;

   function Make_Ctrl return Ctrl is
      Result : Ctrl;
   begin
      return Result;
   end Make_Ctrl;

   function Make_Ctrl_From (Obj : Ctrl) return Ctrl is
      Result : Ctrl;
   begin
      Result.Id := Obj.Id;
      return Result;
   end Make_Ctrl_From;

   function Make_Unconstr (Low : Integer; High : Integer) return Unconstr is
      Result : constant Unconstr (Low .. High) := (others => Make_Ctrl);
   begin
      return Result;
   end Make_Unconstr;
end Types;

--  maker.ads

generic
   type Obj_Typ is private;
procedure Maker (Count : Positive);

--  maker.adb

procedure Maker (Count : Positive) is
   procedure Create is
      Obj : Obj_Typ;
      pragma Warnings (Off, Obj);
   begin null; end Create;

begin
   for Iter in 1 .. Count loop
      Create;
   end loop;
end Maker;

--  leaks.adb

with Maker;
with Types; use Types;

with Maker;
with Types; use Types;

procedure Leaks is
   procedure Make_1 is new Maker (Rec_1);
   procedure Make_2 is new Maker (Rec_2);
   procedure Make_3 is new Maker (Rec_3);
   procedure Make_4 is new Maker (Rec_4);
   procedure Make_5 is new Maker (Rec_5);
   procedure Make_6 is new Maker (Rec_6);

begin
   Make_1 (5_000);
   Make_2 (5_000);
   Make_3 (5_000);
   Make_4 (5_000);
   Make_5 (5_000);
   Make_6 (5_000);
end Leaks;

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

$ gnatmake -q leaks.adb
$ valgrind ./leaks > leaks.txt 2>&1
$ grep -c "still reachable" leaks.txt
0

2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* exp_aggr.adb (Convert_Aggr_In_Object_Decl): Update the call to
Establish_Transient_Scope.
(Convert_To_Assignments): Update the call to Establish_Transient_Scope.
(Expand_Array_Aggregate): Update the call to Establish_Transient_Scope.
* exp_ch6.adb (Expand_Call_Helper): Update the call to
Establish_Transient_Scope.
(Make_Build_In_Place_Call_In_Object_Declaration): Update the call to
Establish_Transient_Scope.
* exp_ch7.adb (Establish_Transient_Scope): Restructured. Delegate the
management of the secondary stack to an enclosing scope if there is no
suitable construct to wrap, and the transient scope was intended to
manage the secondary stack.
(Find_Node_To_Be_Wrapped): Restructured. A case_statement_alternative
is a valid boundary for a transient expression which comes from the
statements of the alternative, otherwise alternatives cannot be
wrapped. Assignments of controlled objects which have controlled
actions suppressed now stop the traversal as there is no point in
looking for an enclosing construct. Add several N_xxx_Body choices to
the termination conditions for completeness.
* exp_ch7.ads (Establish_Transient_Scope): Update the parameter profile
and the associated comment on usage.
* exp_smem.adb (Add_Shared_Var_Lock_Procs): Update the call to
Establish_Transient_Scope.
(Add_Write_After): Update the call to Establish_Transient_Scope.
* sem_res.adb (Check_Initialization_Call): Removed.
(Resolve_Actuals): Account for additional cases where finalization
actions are required by utilizing predicate Needs_Finalization rather
than Is_Controlled.
(Resolve_Call): Type initialization procedures can now utilize
transient scopes to manage the secondary stack, thus preventing leaks
during initialization.  Remove the previous kludgy algorithm which
attempts to manage the secondary stack at the object creation site.

From-SVN: r256513

6 years ago[Ada] QNX: various runtime fixes for file I/O, timers, timezone
Jerome Lambourg [Thu, 11 Jan 2018 08:53:52 +0000 (08:53 +0000)]
[Ada] QNX: various runtime fixes for file I/O, timers, timezone

2018-01-11  Jerome Lambourg  <lambourg@adacore.com>

gcc/ada/

* libgnat/g-soliop__qnx.ads: New.
* adaint.c, adaint.h, cstreams.c, s-oscons-tmplt.c, sysdep.c: Update
for QNX.

From-SVN: r256512

6 years ago[Ada] Null procedures not allowed in protected definitions
Bob Duff [Thu, 11 Jan 2018 08:53:48 +0000 (08:53 +0000)]
[Ada] Null procedures not allowed in protected definitions

The syntax rules do not allow null procedures in protected definitions. This
patch fixes a bug that accidentally allowed them.

2018-01-11  Bob Duff  <duff@adacore.com>

gcc/ada/

* par-ch9.adb (P_Protected_Operation_Declaration_Opt): Give an error if
a null procedure occurs in a protected definition.

gcc/testsuite/

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

From-SVN: r256511

6 years ago[Ada] Minor reformatting
Bob Duff [Thu, 11 Jan 2018 08:53:36 +0000 (08:53 +0000)]
[Ada] Minor reformatting

2018-01-11  Bob Duff  <duff@adacore.com>

gcc/ada/

* binderr.ads, namet.ads: Minor reformatting.

From-SVN: r256510

6 years ago[Ada] Improve documentation of xml2gnat
Bob Duff [Thu, 11 Jan 2018 08:53:32 +0000 (08:53 +0000)]
[Ada] Improve documentation of xml2gnat

2018-01-11  Bob Duff  <duff@adacore.com>

gcc/ada/

* doc/gnat_ugn/gnat_utility_programs.rst: Improve documentation of
xml2gnat.

From-SVN: r256509

6 years ago[Ada] gnatbind -f switch gives an error for duplicates
Bob Duff [Thu, 11 Jan 2018 08:53:27 +0000 (08:53 +0000)]
[Ada] gnatbind -f switch gives an error for duplicates

If the -felab-order.txt switch is given to gnatbind, and there are duplicate
unit names in elab-order.txt, an error will be given.

The following test should get errors:

this (spec) <-- that (body)
error: elab-order.txt:5: duplicate unit name "this (spec)" from line 1
error: elab-order.txt:7: duplicate unit name "that (body)" from line 3
gnatmake: *** bind failed.

Content of elab-order.txt (7 lines):

this%s

that%b

this (spec)

that%b

gnatmake -q -f -g -O0 -gnata that-main.adb -bargs -felab-order.txt

package body That is
end That;
package That is
   pragma Elaborate_Body;
end That;
with This, That;
procedure That.Main is
begin
   null;
end That.Main;
package body This is
end This;
package This is
   pragma Elaborate_Body;
end This;

2018-01-11  Bob Duff  <duff@adacore.com>

gcc/ada/

* binde.adb (Force_Elab_Order): Give an error if there are duplicate
unit names.

From-SVN: r256508

6 years ago[Ada] Crash on expression function as completion, with implicit dereference
Ed Schonberg [Thu, 11 Jan 2018 08:53:15 +0000 (08:53 +0000)]
[Ada] Crash on expression function as completion, with implicit dereference

An implicit dereference freezes the corresponding designated type. Most
implicit dereferences are made explicit during expansion, but this is not the
case for a dispatching call where the the controlling parameter and the
corresponding controlling argument are access to a tagged type. In that case,
to enforce the rule that an expression function that is a completion freezes
type references within, we must locate controlling arguments of an access type
and freeze explicitly the corresponding designated type.

2018-01-11  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch6.adb (Freeze_Expr_Types): If an access value is the
controlling argument of a dispatching call. freeze the corresponding
designated type.

gcc/testsuite/

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

From-SVN: r256507

6 years ago[Ada] Add Sphinx option -W to treat warnings as errors
Ben Brosgol [Thu, 11 Jan 2018 08:52:59 +0000 (08:52 +0000)]
[Ada] Add Sphinx option -W to treat warnings as errors

2018-01-11  Ben Brosgol  <brosgol@adacore.com>

gcc/ada/

* doc/Makefile: Add Sphinx option -W to treat warnings as errors.

From-SVN: r256506

6 years ago[Ada] Minor type/wording corrections
Ben Brosgol [Thu, 11 Jan 2018 08:52:55 +0000 (08:52 +0000)]
[Ada] Minor type/wording corrections

2018-01-11  Ben Brosgol  <brosgol@adacore.com>

gcc/ada/

* doc/gnat_rm/implementation_defined_aspects.rst: Minor type/wording
corrections.
* gnat_rm.texi: Regenerate.

From-SVN: r256505

6 years ago[Ada] Warning on use of predefined operations on an actual fixed-point type
Ed Schonberg [Thu, 11 Jan 2018 08:52:51 +0000 (08:52 +0000)]
[Ada] Warning on use of predefined operations on an actual fixed-point type

The compiler warns when a generic actual is a fixed-point type, because
arithmetic operations in the instance will use the predefined operations on
it, even if the type has user-defined primitive operations (unless formsl
surprograms for these operations appear in the generic). This patch refines
this warning to exclude the case where the formsal type is private, because
in this case there can be no suspicious arithmetic operastions in the generic
unit.

2018-01-11  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch12.adb (Check_Fixed_Point_Type): Do not apply check if the
formsl type corresponding to the actual fixed point type is private,
because in this case there can be no suspicious arithmetic operations
in the generic unless they reference a formal subprogram.  Clarify
warning.

gcc/testsuite/

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

From-SVN: r256504

6 years agoexp_util.adb (Remove_Side_Effects): No action done for functions returning class...
Javier Miranda [Thu, 11 Jan 2018 08:52:47 +0000 (08:52 +0000)]
exp_util.adb (Remove_Side_Effects): No action done for functions returning class-wide types since it requires...

2018-01-11  Javier Miranda  <miranda@adacore.com>

gcc/ada/

* exp_util.adb (Remove_Side_Effects): No action done for functions
returning class-wide types since it requires generating code using
'reference and the CCG target has no secondary stack.
* gnat1drv.adb: Disable building static dispatch tables when generating
C code.

From-SVN: r256503

6 years ago[Ada] Annotate standard File_Type with Default_Initial_Condition (for SPARK)
Piotr Trojanek [Thu, 11 Jan 2018 08:52:43 +0000 (08:52 +0000)]
[Ada] Annotate standard File_Type with Default_Initial_Condition (for SPARK)

GNATprove was emitting spurious checks about objects of the File_Type being
uninitialized and there was no easy to fix that (those checks could only be
silenced by pragma Annotate or by hiding File_Type behind as SPARK wrapper).

Now the full view of File_Type is annotated with Default_Initial_Condition
and GNATprove knows that objects of that type are default-initialized. The
default initialization is implicitly defined in the Ada RM (as indeed
there is no procedure that would take an IN OUT parameter of that type).

Semantics of Ada programs shall not be affected by these annotations,
so no frontend test is provided. It only affects GNATprove.

2018-01-11  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* libgnat/a-direio.ads, libgnat/a-sequio.ads, libgnat/a-ststio.ads,
libgnat/a-textio.ads, libgnat/a-witeio.ads, libgnat/a-ztexio.ads
(File_Type): Add Default_Initial_Condition aspect.

From-SVN: r256502

6 years ago[Ada] New implementation for Normalize_Pathname
Pascal Obry [Thu, 11 Jan 2018 08:52:39 +0000 (08:52 +0000)]
[Ada] New implementation for Normalize_Pathname

This implementation fixes an issue on Windows where a single drive letter
was not followed by a directory separator. On Windows the following
program:

   with Ada.Text_IO; use Ada.Text_IO;
   with GNAT.OS_Lib; use GNAT.OS_Lib;
   procedure Main is
   begin
      Put_Line (Normalize_Pathname ("c:\"));
      Put_Line (Normalize_Pathname ("c:\toto\.."));
   end Main;

Must output:

C:\
C:\

2018-01-11  Pascal Obry  <obry@adacore.com>

gcc/ada/

* libgnat/s-os_lib.adb (Normalize_Pathname): New implementation.

From-SVN: r256501

6 years ago[Ada] Update gnatpp documentation after engine change
Bob Duff [Thu, 11 Jan 2018 08:52:20 +0000 (08:52 +0000)]
[Ada] Update gnatpp documentation after engine change

2018-01-11  Bob Duff  <duff@adacore.com>

gcc/ada/

* doc/gnat_ugn/gnat_utility_programs.rst: Rewrite gnatpp documentation
to match what the Libadalang-based version does.
* doc/gnat_ugn/about_this_guide.rst: Update reference.

From-SVN: r256500

6 years ago[Ada] Secondary stack leak due to controlled component
Hristian Kirtchev [Thu, 11 Jan 2018 08:52:16 +0000 (08:52 +0000)]
[Ada] Secondary stack leak due to controlled component

This pach modifies the expansion related to initialization calls and secondary
stack usage to inspec the components of a type derived from Limited_Controlled
or Controlled. Previously controlled types were treated as never utilizing the
secondary stack, however this is not true because a controlled type may contain
a component initialized by a function which returns on the secondary stack.

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

--  pack1.ads

with Ada.Finalization; use Ada.Finalization;

package Pack1 is
   type Ctrl is new Controlled with record
      Comp : Integer;
   end record;

   function Make_Ctrl return Ctrl;
end Pack1;

--  pack1.adb

package body Pack1 is
   Empty : constant Ctrl := (Controlled with Comp => 123);

   function Make_Ctrl return Ctrl is
   begin
      return Empty;
   end Make_Ctrl;
end Pack1;

--  pack2.ads

with Ada.Finalization; use Ada.Finalization;
with Pack1;            use Pack1;

package Pack2 is
   type Ctrl_Wrap is new Controlled with record
      Comp : Ctrl := Make_Ctrl;
   end record;
end Pack2;

--  main.adb

with Pack2; use Pack2;

procedure Main is
   procedure Make_Ctrl_Wrap is
      Obj : Ctrl_Wrap;
      pragma Warnings (Off, Obj);
   begin null; end Make_Ctrl_Wrap;

begin
   for Iter in 1 .. 10_000 loop
      Make_Ctrl_Wrap;
   end loop;
end Main;

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

$ gnatmake -q main.adb
$ valgrind ./main >& valgrind.log
$ grep -c "still reachable" valgrind.log
0

2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* sem_res.adb (Uses_SS): A controlled type requires the secondary stack
if it contains at least one component declaration employing a function
call returning on the secondary stack.

From-SVN: r256499

6 years ago[Ada] Update description of restriction SPARK_05 with SPARK 2014
Yannick Moy [Thu, 11 Jan 2018 08:52:12 +0000 (08:52 +0000)]
[Ada] Update description of restriction SPARK_05 with SPARK 2014

2018-01-11  Yannick Moy  <moy@adacore.com>

gcc/ada/

* doc/gnat_rm/standard_and_implementation_defined_restrictions.rst:
Update description of restriction SPARK_05 with SPARK 2014.
* gnat_rm.texi: Regenerate.

From-SVN: r256498

6 years ago[Ada] Minor layout fix in documentation sources
Vasiliy Fofanov [Thu, 11 Jan 2018 08:51:56 +0000 (08:51 +0000)]
[Ada] Minor layout fix in documentation sources

2018-01-11  Vasiliy Fofanov  <fofanov@adacore.com>

gcc/ada/

* doc/gnat_ugn/gnat_utility_programs.rst: Fix layout.

From-SVN: r256497

6 years ago[Ada] Minor reformatting
Hristian Kirtchev [Thu, 11 Jan 2018 08:51:51 +0000 (08:51 +0000)]
[Ada] Minor reformatting

2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* exp_aggr.adb, exp_ch9.adb, exp_util.adb, sem_aggr.adb, sem_ch3.adb,
sem_res.adb, sem_util.adb: Minor reformatting.

From-SVN: r256496

6 years ago[Ada] Handling of pragma Predicate
Ed Schonberg [Thu, 11 Jan 2018 08:51:47 +0000 (08:51 +0000)]
[Ada] Handling of pragma Predicate

This patch fixes an omission in the processing of pragma Predicate, which
should have the same semantics as the corresponding aspect, which is more
commonly used.

Executing
   gnatmake -q -gnata predicate
   predicate

must yield:

   Even1 violated
   Even2 violated

----
with Text_IO; use Text_IO;
procedure Predicate is
begin
   begin
      declare
         subtype Even1 is Integer;
         pragma Predicate (Even1, Even1 mod 2 = 0);
         X1 : constant Even1 := 1; --  This should fail first
      begin
         null;
      end;
   exception
      when Others => Put_Line ("Even1 violated");
   end;

   begin
      declare
         subtype Even2 is Integer with Predicate => Even2 mod 2 = 0;
         X2 : constant Even2 := 1; --  This should fail later, if reached
      begin
         null;
      end;
   exception
      when Others => Put_Line ("Even2 violated");
   end;
end;

2018-01-11  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_prag.adb (Analyze_Pragma, case Predicate): Indicate that the type
has a delayed aspect which must be processed at the point the type is
frozen. This mimics what is done when the predicate is provided by a
source aspect.

From-SVN: r256495

6 years ago[Ada] Enable sigtramp for aarch64-vx7
Doug Rupp [Thu, 11 Jan 2018 08:51:43 +0000 (08:51 +0000)]
[Ada] Enable sigtramp for aarch64-vx7

2018-01-11  Doug Rupp  <rupp@adacore.com>

gcc/ada/

* init.c (vxworks): Add macro checks for __aarch64__.

From-SVN: r256494

6 years ago[Ada] Different runtime behavior of Predicate_Failure
Hristian Kirtchev [Thu, 11 Jan 2018 08:51:39 +0000 (08:51 +0000)]
[Ada] Different runtime behavior of Predicate_Failure

This patch corrects the generation of predicate checks to handle the case where
Predicate_Failure appears as a pragma.

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

--  main.adb

with Ada.Assertions; use Ada.Assertions;
with Ada.Exceptions; use Ada.Exceptions;
with Ada.Text_IO;    use Ada.Text_IO;

procedure Main is
   subtype Even_Asp is Integer
     with Predicate => Even_Asp mod 2 = 0,
          Predicate_Failure => "Even_Asp failed";

   subtype Even_Prag is Integer
     with Predicate => Even_Prag mod 2 = 0;
   pragma Predicate_Failure (Even_Prag, "Even_Prag failed");

begin
   begin
      declare
         Val : constant Even_Asp := 1;
      begin
         Put_Line ("ERROR: Even_Asp: did not fail");
      end;
   exception
      when AE : Assertion_Error => Put_Line (Exception_Message (AE));
      when others => Put_Line ("ERROR: Even_Asp: raised unexpected error");
   end;

   begin
      declare
         Val : constant Even_Prag := 3;
      begin
         Put_Line ("ERROR: Even_Prag: did not fail");
      end;
   exception
      when AE : Assertion_Error => Put_Line (Exception_Message (AE));
      when others => Put_Line ("ERROR: Even_Prag: raised unexpected error");
   end;
end Main;

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

$ gnatmake -q main.adb
$ ./main
Even_Asp failed
Even_Prag failed

2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* exp_util.adb (Add_Failure_Expression): New routine.
(Make_Predicate_Check): Reimplement the handling of Predicate_Failure.
* sem_util.adb (Is_Current_Instance): Code cleanup.

From-SVN: r256493

6 years ago[Ada] Integer overflow in SS_Allocate
Patrick Bernardi [Thu, 11 Jan 2018 08:51:23 +0000 (08:51 +0000)]
[Ada] Integer overflow in SS_Allocate

This patch imposes a new check and rewrites existing ones to ensure operations
involving SS_Ptr do not cause an Integer overflow. The Default_Sec_Stack_Size
function was removed in the process to simplify System.Parameter.

SS_Ptr was derived from the integer System.Parameters.Size_Type to ease the
creation of objects of type SS_Stack by the binder and imposes a maximum
secondary stack size of 2GB. In most cases, the user will not hit this limit as
they cannot specify task stack sizes of more than 2GB via the Storage_Size and
Secondary_Stack_Size pragmas. Additionally, most operating systems limit the
primary stack size to less than 2GB, with defaults under 10MB. Linux is the
rare exception where the user can unbound the primary stack.

Executing the following:
gnatmake -q overflow
./overflow

must yield:

raised STORAGE_ERROR : s-secsta.adb:140 explicit raise

--  overflow.adb:

with String_Pack;

procedure Overflow is
begin
   null;
end Overflow;

-- string_pack.ads:

package String_Pack is
   function Return_Big_String return String;
end String_Pack;

-- string_pack.adb:

with Ada.Strings.Fixed; use Ada.Strings.Fixed;

package body String_Pack is
   function Return_Big_String return String is
   begin
      return Integer'Last * "P";
   end Return_Big_String;

   S : String := Return_Big_String;

end String_Pack;

2018-01-11  Patrick Bernardi  <bernardi@adacore.com>

gcc/ada/

* libgnat/s-parame*.adb, libgnat/s-parame*.ads: Remove unneeded
Default_Sec_Stack_Size.
* libgnat/s-secsta.adb (SS_Allocate): Handle the fixed secondary stack
limit check so that the integer index does not overflow. Check the
dynamic stack allocation does not cause the secondary stack pointer to
overflow.
(SS_Info): Align colons.
(SS_Init): Cover the case when bootstraping with an old compiler that
does not set Default_SS_Size.

From-SVN: r256492

6 years ago[Ada] Illegal protected calls in inherited pre/postconditions
Ed Schonberg [Thu, 11 Jan 2018 08:51:18 +0000 (08:51 +0000)]
[Ada] Illegal protected calls in inherited pre/postconditions

AI12-0166 specifies that it is illegal for a pre/postcondition of a
protected operation to contain an internal call to a protected function.
This patch completes the implementation of this rule in the case the
condition is inherited from a classwide condition of an abstract operation
of an interface type.

Compiling inheritpo.adb must yield:

   inheritpo.ads:9:04: instantiation error at line 6
   inheritpo.ads:9:04: internal call to "F" cannot appear
      in inherited precondition of protected operation "P"
   inheritpo.ads:9:04: instantiation error at line 7
   inheritpo.ads:9:04: internal call to "F" cannot appear
      in inherited precondition of protected operation "P"

--
package InheritPO is

   type T is limited interface;
   function F (X : T) return Boolean is abstract;
   procedure P (X : in out T) is abstract with
     Pre'Class  => X.F,
     Post'Class => X.F;

   protected type PT is new T with
     overriding function F return Boolean;
     overriding procedure P;
   end PT;

end InheritPO;
----
package body InheritPO is
   protected body PT is
     function F return Boolean is begin return True; end;
     procedure P is begin null; end;
   end PT;
end InheritPO;

2018-01-11  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch3.adb (Add_Internal_Interface_Entities): When checking the
legality of an inherited operation that may require overriding, ignore
primitive_wrappers that correspond to explicit operations that override
an interface primitive.

* exp_util.adb (Build_Class_Wide_Expression, Replace_Entity): If the
operation to which the class-wide expression applies is a protected op.
with a primitive_wrapper, verify that the updated inherited expression
does not contain an internal call to a protected function.  This
completes the implementation of AI12-0166.

From-SVN: r256491

6 years ago[Ada] Encoding of with clauses in ALI files
Hristian Kirtchev [Thu, 11 Jan 2018 08:51:13 +0000 (08:51 +0000)]
[Ada] Encoding of with clauses in ALI files

This patch modifies the encodings of with clauses in ALI files to adhere to the
existing API. The encodigs are as follows:

   * Explicit with clauses are encoded on a 'W' line (same as before).

   * Implicit with clauses for ancestor units are encoded on a 'W' line (same
     as before).

   * Limited_with clauses are encoded on a 'Y' line (same as before).

   * ABE and RTSfind-related with clauses are encoded on a 'Z' line.

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

--  case_10_func.adb

function Case_10_Func return Boolean is
begin
   return True;
end Case_10_Func;

--  case_10_gen_func.ads

generic
function Case_10_Gen_Func return Boolean;

--  case_10_gen_func.adb

function Case_10_Gen_Func return Boolean is
begin
   return True;
end Case_10_Gen_Func;

--  case_10_tasks.ads

package Case_10_Tasks is
   task type Task_Typ is
   end Task_Typ;
end Case_10_Tasks;

--  case_10_tasks.adb

package body Case_10_Tasks is
   task body Task_Typ is begin null; end Task_Typ;
end Case_10_Tasks;

--  case_10_gen.ads

with Case_10_Func;
with Case_10_Gen_Func;
with Case_10_Tasks;

generic
package Case_10_Gen is
   Val : constant Boolean := Case_10_Func;

   function Inst is new Case_10_Gen_Func;

   Tsk : Case_10_Tasks.Task_Typ;
end Case_10_Gen;

--  case_10.ads

with Case_10_Gen;

package Case_10 is
   package Inst is new Case_10_Gen;
end Case_10;

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

$ gcc -c case_10.ads
$ grep "W " case_10.ali | sort
$ grep "Z " case_10.ali | sort
W case_10_gen%s case_10_gen.ads case_10_gen.ali
Z case_10_func%b case_10_func.adb case_10_func.ali
Z case_10_gen_func%s case_10_gen_func.adb case_10_gen_func.ali  ED
Z case_10_tasks%s case_10_tasks.adb case_10_tasks.ali  AD
Z system.soft_links%s s-soflin.adb s-soflin.ali
Z system.tasking%s s-taskin.adb s-taskin.ali
Z system.tasking.stages%s  s-tassta.adb s-tassta.ali

2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* ali.adb: Document the remaining letters available for ALI lines.
(Scan_ALI): A with clause is internal when it is encoded on a 'Z' line.
* ali.ads: Update type With_Record. Field
Implicit_With_From_Instantiation is no longer in use. Add field
Implicit_With.
* csinfo.adb (CSinfo): Remove the setup for attribute
Implicit_With_From_Instantiation.
* lib-writ.adb (Collect_Withs): Correct the logic which marks a unit as
either implicitly or explicitly withed.
(Is_Implicit_With_Clause): New routine.
(Write_ALI): Rename array Implicit_With to Has_Implicit_With to avoid
confusion with the with clause attribute by the same name.
(Write_With_Lines): Update the emission of 'W', 'Y', and 'Z' headers.
* rtsfind.adb (Maybe_Add_With): Code cleanup.
* sem_ch8.adb (Present_System_Aux): Code cleanup.
* sem_ch10.adb (Expand_With_Clause): Mark the with clause as generated
for a parent unit.
(Implicit_With_On_Parent): Mark the with clause as generated for a
parent unit.
* sem_ch12.adb (Inherit_Context): With clauses inherited by an
instantiation are no longer marked as Implicit_With_From_Instantiation
because they are already marked as implicit.
* sem_elab.adb (Ensure_Prior_Elaboration_Static): Remove the kludge
which marks implicit with clauses as related to an instantiation.
* sinfo.adb (Implicit_With_From_Instantiation): Removed.
(Parent_With): New routine.
(Set_Implicit_With_From_Instantiation): Removed.
(Set_Parent_With): New routine.
* sinfo.ads: Update the documentation of attribute Implicit_With.
Remove attribute Implicit_With_From_Instantiation along with
occurrences in nodes.  Add attribute Parent_With along with occurrences
in nodes.
(Implicit_With_From_Instantiation): Removed along with pragma Inline.
(Parent_With): New routine along with pragma Inline.
(Set_Implicit_With_From_Instantiation): Removed along with pragma Inline.
(Set_Parent_With): New routine along with pragma Inline.

From-SVN: r256490

6 years ago[Ada] Finding proper scope when inside entry body
Hristian Kirtchev [Thu, 11 Jan 2018 08:51:09 +0000 (08:51 +0000)]
[Ada] Finding proper scope when inside entry body

This patch modifies routine Find_Enclosing_Scope which obtains the scope of an
arbitrary node to return the unique defining entity of an enclosing body. This
automatically takes care of the following corner cases:

   * The body is a subprogram body which does not complete a previous
     declaration. In this case the proper scope is the entity of the
     body.

   * The body is an entry body. Due to a limitation in the AST, the
     entry body does not store its correcponsing spec, but utilizes a
     roundabout way of obtaining it. Regardless of the limitation, the
     proper scope is the entity of the entry declaration.

The issue was discovered during the development of the GNATprove tool and
is not visible to end users. No simple test is available because this would
require a debug session.

2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* sem_util.adb (Find_Enclosing_Scope): Return the unique defining
entity when the enclosing construct is a body.

From-SVN: r256489

6 years ago[Ada] Aspect/pragma Secondary_Stack_Size can evaluate non-literals as zero
Patrick Bernardi [Thu, 11 Jan 2018 08:50:43 +0000 (08:50 +0000)]
[Ada] Aspect/pragma Secondary_Stack_Size can evaluate non-literals as zero

This patch fixes the problem of aspect/pragma Secondary_Stack_Size expressions
with non-literals evaluating as zero in static secondary stacks allocations.
The aspect Secondary_Stack_Size is now converted to a pragma instead of an
attribute as the attribute does not have visibility on the discriminant.
Additionally, the discriminant of the corresponding record type is now
referenced if the pragma expression contains a discriminant.

No simple test available as the problem only impacts programs when
System.Parameters.Sec_Stack_Dynamic = False

2018-01-11  Patrick Bernardi  <bernardi@adacore.com>

gcc/ada/

* exp_ch9.adb (Expand_N_Task_Type_Declaration): Simplified
Secondary_Stack_Size handling as a pragma is now generated for the
corresponding aspect instead of an attribute.  Pragma expression is
relocated instead of evaluated. Discriminant of the corresponding
record type is referenced rather than the type discriminant.
(Create_Secondary_Stack_For_Task, Make_Task_Create_Call): Update
Secondary_Stack_Size rep item checks to only look for the pragma rep.
* sem_ch13.adb (Analyze_One_Aspect): Transform
Aspect_Secondary_Stack_Size into a pragma instead of an attribute
because the attribute does not have visibility on a task type's
discriminants when the type's definition is expanded.
(Analyze_Attribute_Definition_Clause): Remove handling of
Attribute_Secondary_Stack_Size.
* snames.adb-tmpl, snames.ads-tmpl: Remove
Attribute_Secondary_Stack_Size, no longer used.

From-SVN: r256488

6 years ago[Ada] Minor reformatting
Justin Squirek [Thu, 11 Jan 2018 08:50:38 +0000 (08:50 +0000)]
[Ada] Minor reformatting

2018-01-11  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* sem_ch8.adb: Minor comment fix.

From-SVN: r256487

6 years ago[Ada] Missing finalization in case expression
Hristian Kirtchev [Thu, 11 Jan 2018 08:50:34 +0000 (08:50 +0000)]
[Ada] Missing finalization in case expression

This patch modifies the processing of controlled transient objects within case
expressions represented by an Expression_With_Actions node. The inspection of
an individual action must continue in case it denotes a complex expression,
such as a case statement, which in turn may contain additional transients.

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

--  pack.ads

with Ada.Finalization; use Ada.Finalization;

package Pack is
   function Next_Id return Natural;

   type Ctrl is new Controlled with record
      Id : Natural := 0;
   end record;

   procedure Adjust (Obj : in out Ctrl);
   procedure Finalize (Obj : in out Ctrl);
   procedure Initialize (Obj : in out Ctrl);

   function New_Ctrl return Ctrl;

   Empty : constant Ctrl := (Controlled with Id => 1);

   type Enum is (One, Two, Three);

   type Ctrl_Rec is record
      Comp : Ctrl;
      Kind : Enum;
   end record;

   procedure Proc (Obj : Ctrl_Rec);
end Pack;

--  pack.adb

with Ada.Text_IO; use Ada.Text_IO;

package body Pack is
   Id_Gen : Natural := 1;

   procedure Adjust (Obj : in out Ctrl) is
      Old_Id : constant Natural := Obj.Id;
      New_Id : Natural;

   begin
      if Old_Id = 0 then
         Put_Line ("  adj: ERROR already finalized");
      else
         New_Id := Old_Id * 100;
         Put_Line ("  adj: " & Old_Id'Img & " ->" & New_Id'Img);
         Obj.Id := New_Id;
      end if;
   end Adjust;

   procedure Finalize (Obj : in out Ctrl) is
      Old_Id : constant Natural := Obj.Id;

   begin
      if Old_Id = 0 then
         Put_Line ("  fin: ERROR already finalized");
      else
         Put_Line ("  fin: " & Old_Id'Img);
         Obj.Id := 0;
      end if;
   end Finalize;

   procedure Initialize (Obj : in out Ctrl) is
      New_Id : constant Natural := Next_Id;
   begin
      Put_Line ("  ini: " & New_Id'Img);
      Obj.Id := New_Id;
   end Initialize;

   procedure Proc (Obj : Ctrl_Rec) is
   begin
      Put_Line ("proc : " & Obj.Comp.Id'Img);
   end Proc;

   function Next_Id return Natural is
   begin
      Id_Gen := Id_Gen + 1;
      return Id_Gen;
   end Next_Id;

   function New_Ctrl return Ctrl is
      Obj : Ctrl;
   begin
      return Obj;
   end New_Ctrl;
end Pack;

--  main.adb

with Ada.Text_IO; use Ada.Text_IO;
with Pack;        use Pack;

procedure Main is
   procedure Proc_Case_Expr (Mode : Enum) is
   begin
      Put_Line ("proc_case_expr: " & Mode'Img);
      Proc (case Mode is
               when One   => (Kind => Two,   Comp => Empty),
               when Two   => (Kind => Three, Comp => Empty),
               when Three => (Kind => One,   Comp => New_Ctrl));
   end Proc_Case_Expr;

   procedure Proc_If_Expr (Mode : Enum) is
   begin
      Put_Line ("proc_if_expr: " & Mode'Img);
      Proc ((if    Mode = One then (Kind => Two,   Comp => Empty)
             elsif Mode = Two then (Kind => Three, Comp => Empty)
             else                  (Kind => One,   Comp => New_Ctrl)));
   end Proc_If_Expr;

begin
   Proc_Case_Expr (One);
   Proc_Case_Expr (Two);
   Proc_Case_Expr (Three);

   Proc_If_Expr (One);
   Proc_If_Expr (Two);
   Proc_If_Expr (Three);
end Main;

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

$ gnatmake -q main.adb
$ ./main
proc_case_expr: ONE
  adj:  1 -> 100
proc :  100
  fin:  100
proc_case_expr: TWO
  adj:  1 -> 100
proc :  100
  fin:  100
proc_case_expr: THREE
  ini:  2
  adj:  2 -> 200
  fin:  2
  adj:  200 -> 20000
proc :  20000
  fin:  20000
  fin:  200
proc_if_expr: ONE
  adj:  1 -> 100
proc :  100
  fin:  100
proc_if_expr: TWO
  adj:  1 -> 100
proc :  100
  fin:  100
proc_if_expr: THREE
  ini:  3
  adj:  3 -> 300
  fin:  3
  adj:  300 -> 30000
proc :  30000
  fin:  30000
  fin:  300
  fin:  1

2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* exp_ch4.adb (Process_Action): Do not abandon the inspection of an
individual action because the action may denote a complex expression,
such as a case statement, which in turn may contain additional
transient objects.

From-SVN: r256486

6 years ago[Ada] Crash on iterated_component_association in expression function
Ed Schonberg [Thu, 11 Jan 2018 08:50:29 +0000 (08:50 +0000)]
[Ada] Crash on iterated_component_association in expression function

This patch improves on the handling of the Ada2020 construct Iterated_
Component_Association in various contexts, when the expression involved
is a record or array aggregate.

Executing:
   gnatmake -gnatX -q main
   ./main

must yield:

   123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ

----
with Text_IO; use Text_IO;
with Exfor; use Exfor;
procedure Main is
   Map : String := Table_ASCII;
begin
   Put_Line (Map (50..91));
end;
----
package Exfor is
   function Table_ASCII return String is
      (for I in 1 .. Character'Pos (Character'Last) + 1 => Character'Val(I-1));
end Exfor;

2018-01-11  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_aggr.adb (Resolve_Iterated_Component_Association): Perform
analysis on a copy of the expression with a copy of the index variable,
because full expansion will rewrite construct into a loop with the
original loop variable.
* exp_aggr.adb (Gen_Assign): Defer analysis and resolution if the
expression is an iterated component association. Full analysis takes
place when construct is rewritten as a loop.
(In_Place_Assign_OK, Safe_Component): An iterated_component_association
is not safe for in-place assignment.
* sem_util.adb (Remove_Entity): Handle properly the case of an isolated
entity with no homonym and no other entity in the scope.

From-SVN: r256485

6 years ago[Ada] Wrong column in sloc of "expect name" error for loop variant
Justin Squirek [Thu, 11 Jan 2018 08:50:25 +0000 (08:50 +0000)]
[Ada] Wrong column in sloc of "expect name" error for loop variant

This patch corrects error messages printed when using the pragma Loop_Variant
without a named argument from having an incorrect column number in some cases.

2018-01-11  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* sem_prag.adb (Analyze_Pragma:Pragma_Loop_Variant): Modify error
message to be printed on the pragma argument identifier.

gcc/testsuite/

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

From-SVN: r256484

6 years ago[Ada] Inconsistent scope chain due to quantified expression
Hristian Kirtchev [Thu, 11 Jan 2018 08:50:18 +0000 (08:50 +0000)]
[Ada] Inconsistent scope chain due to quantified expression

This patch corrects the minor decoration performed on invariant procedures in
case the procedure is not inserted into the tree and analyzed. The decoration
now constructs a proper first/next/last entity chain containing the single
formal parameter which represents the object of the related type. The chain
then ensures that any other entities generated by the [pre]analysis of the
invariant expression will be properly added to the chain.

The issue was discovered during the development of the GNATprove tool and
is not visible to end users. No simple test is available because this would
require a debug session.

2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* exp_util.adb (Build_Invariant_Procedure_Declaration): Set the last
entity of the generated invariant procedure in order to construct a
proper entity chain.

From-SVN: r256483

6 years ago[Ada] Fix minor comment issues
Piotr Trojanek [Thu, 11 Jan 2018 08:50:12 +0000 (08:50 +0000)]
[Ada] Fix minor comment issues

2018-01-11  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* sem_ch13.adb (Build_Predicate_Functions): Fix minor issues in
comment.

From-SVN: r256482

6 years agoeinfo.ads, einfo.adb (Activation_Record_Component, [...]): Allow E_Discriminant.
Arnaud Charlet [Thu, 11 Jan 2018 08:50:08 +0000 (08:50 +0000)]
einfo.ads, einfo.adb (Activation_Record_Component, [...]): Allow E_Discriminant.

2018-01-11  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* einfo.ads, einfo.adb (Activation_Record_Component,
Set_Activation_Record_Component, Set_Is_Uplevel_Referenced_Entity):
Allow E_Discriminant.

From-SVN: r256481

6 years agore PR tree-optimization/83189 (internal compiler error: in probability_in, at profile...
Jan Hubicka [Thu, 11 Jan 2018 08:14:33 +0000 (09:14 +0100)]
re PR tree-optimization/83189 (internal compiler error: in probability_in, at profile-count.h:1050)

PR middle-end/83189
* gfortran.fortran-torture/compile/pr83189.f90: New testcase.
* tree-ssa-loop-manip.c (tree_transform_and_unroll_loop): Handle zero
profile.

From-SVN: r256480

6 years agore PR rtl-optimization/83575 (ICE: verify_flow_info failed (error: multiple hot/cold...
Jan Hubicka [Thu, 11 Jan 2018 08:02:26 +0000 (09:02 +0100)]
re PR rtl-optimization/83575 (ICE: verify_flow_info failed (error: multiple hot/cold transitions found))

PR middle-end/83575
* cfgrtl.c (rtl_verify_edges): Only verify fixability of partition
when in layout mode.
(cfg_layout_finalize): Do not verify cfg before we are out of layout.
* cfgcleanup.c (try_optimize_cfg): Only verify flow info when doing
partition fixup.

* gcc.c-torture/compile/pr83575.c: New testcase.

From-SVN: r256479

6 years agoaarch64-modes.def (V2HF): New VECTOR_MODE.
Michael Collison [Thu, 11 Jan 2018 06:04:17 +0000 (06:04 +0000)]
aarch64-modes.def (V2HF): New VECTOR_MODE.

2018-01-10  Michael Collison  <michael.collison@arm.com>

* config/aarch64/aarch64-modes.def (V2HF): New VECTOR_MODE.
* config/aarch64/aarch64-option-extension.def: Add
AARCH64_OPT_EXTENSION of 'fp16fml'.
* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins):
(__ARM_FEATURE_FP16_FML): Define if TARGET_F16FML is true.
* config/aarch64/predicates.md (aarch64_lane_imm3): New predicate.
* config/aarch64/constraints.md (Ui7): New constraint.
* config/aarch64/iterators.md (VFMLA_W): New mode iterator.
(VFMLA_SEL_W): Ditto.
(f16quad): Ditto.
(f16mac1): Ditto.
(VFMLA16_LOW): New int iterator.
(VFMLA16_HIGH): Ditto.
(UNSPEC_FMLAL): New unspec.
(UNSPEC_FMLSL): Ditto.
(UNSPEC_FMLAL2): Ditto.
(UNSPEC_FMLSL2): Ditto.
(f16mac): New code attribute.
* config/aarch64/aarch64-simd-builtins.def
(aarch64_fmlal_lowv2sf): Ditto.
(aarch64_fmlsl_lowv2sf): Ditto.
(aarch64_fmlalq_lowv4sf): Ditto.
(aarch64_fmlslq_lowv4sf): Ditto.
(aarch64_fmlal_highv2sf): Ditto.
(aarch64_fmlsl_highv2sf): Ditto.
(aarch64_fmlalq_highv4sf): Ditto.
(aarch64_fmlslq_highv4sf): Ditto.
(aarch64_fmlal_lane_lowv2sf): Ditto.
(aarch64_fmlsl_lane_lowv2sf): Ditto.
(aarch64_fmlal_laneq_lowv2sf): Ditto.
(aarch64_fmlsl_laneq_lowv2sf): Ditto.
(aarch64_fmlalq_lane_lowv4sf): Ditto.
(aarch64_fmlsl_lane_lowv4sf): Ditto.
(aarch64_fmlalq_laneq_lowv4sf): Ditto.
(aarch64_fmlsl_laneq_lowv4sf): Ditto.
(aarch64_fmlal_lane_highv2sf): Ditto.
(aarch64_fmlsl_lane_highv2sf): Ditto.
(aarch64_fmlal_laneq_highv2sf): Ditto.
(aarch64_fmlsl_laneq_highv2sf): Ditto.
(aarch64_fmlalq_lane_highv4sf): Ditto.
(aarch64_fmlsl_lane_highv4sf): Ditto.
(aarch64_fmlalq_laneq_highv4sf): Ditto.
(aarch64_fmlsl_laneq_highv4sf): Ditto.
* config/aarch64/aarch64-simd.md:
(aarch64_fml<f16mac1>l<f16quad>_low<mode>): New pattern.
(aarch64_fml<f16mac1>l<f16quad>_high<mode>): Ditto.
(aarch64_simd_fml<f16mac1>l<f16quad>_low<mode>): Ditto.
(aarch64_simd_fml<f16mac1>l<f16quad>_high<mode>): Ditto.
(aarch64_fml<f16mac1>l_lane_lowv2sf): Ditto.
(aarch64_fml<f16mac1>l_lane_highv2sf): Ditto.
(aarch64_simd_fml<f16mac>l_lane_lowv2sf): Ditto.
(aarch64_simd_fml<f16mac>l_lane_highv2sf): Ditto.
(aarch64_fml<f16mac1>lq_laneq_lowv4sf): Ditto.
(aarch64_fml<f16mac1>lq_laneq_highv4sf): Ditto.
(aarch64_simd_fml<f16mac>lq_laneq_lowv4sf): Ditto.
(aarch64_simd_fml<f16mac>lq_laneq_highv4sf): Ditto.
(aarch64_fml<f16mac1>l_laneq_lowv2sf): Ditto.
(aarch64_fml<f16mac1>l_laneq_highv2sf): Ditto.
(aarch64_simd_fml<f16mac>l_laneq_lowv2sf): Ditto.
(aarch64_simd_fml<f16mac>l_laneq_highv2sf): Ditto.
(aarch64_fml<f16mac1>lq_lane_lowv4sf): Ditto.
(aarch64_fml<f16mac1>lq_lane_highv4sf): Ditto.
(aarch64_simd_fml<f16mac>lq_lane_lowv4sf): Ditto.
(aarch64_simd_fml<f16mac>lq_lane_highv4sf): Ditto.
* config/aarch64/arm_neon.h (vfmlal_low_u32): New intrinsic.
(vfmlsl_low_u32): Ditto.
(vfmlalq_low_u32): Ditto.
(vfmlslq_low_u32): Ditto.
(vfmlal_high_u32): Ditto.
(vfmlsl_high_u32): Ditto.
(vfmlalq_high_u32): Ditto.
(vfmlslq_high_u32): Ditto.
(vfmlal_lane_low_u32): Ditto.
(vfmlsl_lane_low_u32): Ditto.
(vfmlal_laneq_low_u32): Ditto.
(vfmlsl_laneq_low_u32): Ditto.
(vfmlalq_lane_low_u32): Ditto.
(vfmlslq_lane_low_u32): Ditto.
(vfmlalq_laneq_low_u32): Ditto.
(vfmlslq_laneq_low_u32): Ditto.
(vfmlal_lane_high_u32): Ditto.
(vfmlsl_lane_high_u32): Ditto.
(vfmlal_laneq_high_u32): Ditto.
(vfmlsl_laneq_high_u32): Ditto.
(vfmlalq_lane_high_u32): Ditto.
(vfmlslq_lane_high_u32): Ditto.
(vfmlalq_laneq_high_u32): Ditto.
(vfmlslq_laneq_high_u32): Ditto.
* config/aarch64/aarch64.h (AARCH64_FL_F16SML): New flag.
(AARCH64_FL_FOR_ARCH8_4): New.
(AARCH64_ISA_F16FML): New ISA flag.
(TARGET_F16FML): New feature flag for fp16fml.
(doc/invoke.texi): Document new fp16fml option.

2018-01-10  Michael Collison  <michael.collison@arm.com>

* config/aarch64/aarch64-builtins.c:
(aarch64_types_ternopu_imm_qualifiers, TYPES_TERNOPUI): New.
* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins):
(__ARM_FEATURE_SHA3): Define if TARGET_SHA3 is true.
* config/aarch64/aarch64.h (AARCH64_FL_SHA3): New flags.
(AARCH64_ISA_SHA3): New ISA flag.
(TARGET_SHA3): New feature flag for sha3.
* config/aarch64/iterators.md (sha512_op): New int attribute.
(CRYPTO_SHA512): New int iterator.
(UNSPEC_SHA512H): New unspec.
(UNSPEC_SHA512H2): Ditto.
(UNSPEC_SHA512SU0): Ditto.
(UNSPEC_SHA512SU1): Ditto.
* config/aarch64/aarch64-simd-builtins.def
(aarch64_crypto_sha512hqv2di): New builtin.
(aarch64_crypto_sha512h2qv2di): Ditto.
(aarch64_crypto_sha512su0qv2di): Ditto.
(aarch64_crypto_sha512su1qv2di): Ditto.
(aarch64_eor3qv8hi): Ditto.
(aarch64_rax1qv2di): Ditto.
(aarch64_xarqv2di): Ditto.
(aarch64_bcaxqv8hi): Ditto.
* config/aarch64/aarch64-simd.md:
(aarch64_crypto_sha512h<sha512_op>qv2di): New pattern.
(aarch64_crypto_sha512su0qv2di): Ditto.
(aarch64_crypto_sha512su1qv2di): Ditto.
(aarch64_eor3qv8hi): Ditto.
(aarch64_rax1qv2di): Ditto.
(aarch64_xarqv2di): Ditto.
(aarch64_bcaxqv8hi): Ditto.
* config/aarch64/arm_neon.h (vsha512hq_u64): New intrinsic.
(vsha512h2q_u64): Ditto.
(vsha512su0q_u64): Ditto.
(vsha512su1q_u64): Ditto.
(veor3q_u16): Ditto.
(vrax1q_u64): Ditto.
(vxarq_u64): Ditto.
(vbcaxq_u16): Ditto.
* config/arm/types.md (crypto_sha512): New type attribute.
(crypto_sha3): Ditto.
(doc/invoke.texi): Document new sha3 option.

2018-01-10  Michael Collison  <michael.collison@arm.com>

* config/aarch64/aarch64-builtins.c:
(aarch64_types_quadopu_imm_qualifiers, TYPES_QUADOPUI): New.
* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins):
(__ARM_FEATURE_SM3): Define if TARGET_SM4 is true.
(__ARM_FEATURE_SM4): Define if TARGET_SM4 is true.
* config/aarch64/aarch64.h (AARCH64_FL_SM4): New flags.
(AARCH64_ISA_SM4): New ISA flag.
(TARGET_SM4): New feature flag for sm4.
* config/aarch64/aarch64-simd-builtins.def
(aarch64_sm3ss1qv4si): Ditto.
(aarch64_sm3tt1aq4si): Ditto.
(aarch64_sm3tt1bq4si): Ditto.
(aarch64_sm3tt2aq4si): Ditto.
(aarch64_sm3tt2bq4si): Ditto.
(aarch64_sm3partw1qv4si): Ditto.
(aarch64_sm3partw2qv4si): Ditto.
(aarch64_sm4eqv4si): Ditto.
(aarch64_sm4ekeyqv4si): Ditto.
* config/aarch64/aarch64-simd.md:
(aarch64_sm3ss1qv4si): Ditto.
(aarch64_sm3tt<sm3tt_op>qv4si): Ditto.
(aarch64_sm3partw<sm3part_op>qv4si): Ditto.
(aarch64_sm4eqv4si): Ditto.
(aarch64_sm4ekeyqv4si): Ditto.
* config/aarch64/iterators.md (sm3tt_op): New int iterator.
(sm3part_op): Ditto.
(CRYPTO_SM3TT): Ditto.
(CRYPTO_SM3PART): Ditto.
(UNSPEC_SM3SS1): New unspec.
(UNSPEC_SM3TT1A): Ditto.
(UNSPEC_SM3TT1B): Ditto.
(UNSPEC_SM3TT2A): Ditto.
(UNSPEC_SM3TT2B): Ditto.
(UNSPEC_SM3PARTW1): Ditto.
(UNSPEC_SM3PARTW2): Ditto.
(UNSPEC_SM4E): Ditto.
(UNSPEC_SM4EKEY): Ditto.
* config/aarch64/constraints.md (Ui2): New constraint.
* config/aarch64/predicates.md (aarch64_imm2): New predicate.
* config/arm/types.md (crypto_sm3): New type attribute.
(crypto_sm4): Ditto.
* config/aarch64/arm_neon.h (vsm3ss1q_u32): New intrinsic.
(vsm3tt1aq_u32): Ditto.
(vsm3tt1bq_u32): Ditto.
(vsm3tt2aq_u32): Ditto.
(vsm3tt2bq_u32): Ditto.
(vsm3partw1q_u32): Ditto.
(vsm3partw2q_u32): Ditto.
(vsm4eq_u32): Ditto.
(vsm4ekeyq_u32): Ditto.
(doc/invoke.texi): Document new sm4 option.

2018-01-10  Michael Collison  <michael.collison@arm.com>

* config/aarch64/aarch64-arches.def (armv8.4-a): New architecture.
* config/aarch64/aarch64.h (AARCH64_ISA_V8_4): New ISA flag.
(AARCH64_FL_FOR_ARCH8_4): New.
(AARCH64_FL_V8_4): New flag.
(doc/invoke.texi): Document new armv8.4-a option.

2018-01-10  Michael Collison  <michael.collison@arm.com>

* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins):
(__ARM_FEATURE_AES): Define if TARGET_AES is true.
(__ARM_FEATURE_SHA2): Define if TARGET_SHA2 is true.
* config/aarch64/aarch64-option-extension.def: Add
AARCH64_OPT_EXTENSION of 'sha2'.
(aes): Add AARCH64_OPT_EXTENSION of 'aes'.
(crypto): Disable sha2 and aes if crypto disabled.
(crypto): Enable aes and sha2 if enabled.
(simd): Disable sha2 and aes if simd disabled.
* config/aarch64/aarch64.h (AARCH64_FL_AES, AARCH64_FL_SHA2):
New flags.
(AARCH64_ISA_AES, AARCH64_ISA_SHA2): New ISA flags.
(TARGET_SHA2): New feature flag for sha2.
(TARGET_AES): New feature flag for aes.
* config/aarch64/aarch64-simd.md:
(aarch64_crypto_aes<aes_op>v16qi): Make pattern
conditional on TARGET_AES.
(aarch64_crypto_aes<aesmc_op>v16qi): Ditto.
(aarch64_crypto_sha1hsi): Make pattern conditional
on TARGET_SHA2.
(aarch64_crypto_sha1hv4si): Ditto.
(aarch64_be_crypto_sha1hv4si): Ditto.
(aarch64_crypto_sha1su1v4si): Ditto.
(aarch64_crypto_sha1<sha1_op>v4si): Ditto.
(aarch64_crypto_sha1su0v4si): Ditto.
(aarch64_crypto_sha256h<sha256_op>v4si): Ditto.
(aarch64_crypto_sha256su0v4si): Ditto.
(aarch64_crypto_sha256su1v4si): Ditto.
(doc/invoke.texi): Document new aes and sha2 options.

From-SVN: r256478

6 years agoPR tree-optimization/83781 - Bootstrap failed on x86 with --with-arch=corei7
Martin Sebor [Thu, 11 Jan 2018 05:13:57 +0000 (05:13 +0000)]
PR tree-optimization/83781 - Bootstrap failed on x86 with --with-arch=corei7

PR tree-optimization/83781 - Bootstrap failed on x86 with --with-arch=corei7
  --with-cpu=corei7

gcc/ChangeLog:
* gimple-fold.c (get_range_strlen): Avoid treating arrays of pointers
as string arrays.

gcc/testsuite/ChangeLog:
* gcc.dg/strlenopt-42.c: New test.

From-SVN: r256477

6 years agore PR tree-optimization/83501 (strlen(a) not folded after strcpy(a, "..."))
Martin Sebor [Thu, 11 Jan 2018 04:37:48 +0000 (04:37 +0000)]
re PR tree-optimization/83501 (strlen(a) not folded after strcpy(a, "..."))

2018-01-11  Martin Sebor  <msebor@gmail.com>
    Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

PR tree-optimization/83501
PR tree-optimization/81703

* tree-ssa-strlen.c (get_string_cst): Rename...
(get_string_len): ...to this.  Handle global constants.
(handle_char_store): Adjust.

testsuite/
* gcc.dg/strlenopt-39.c: New test-case.
* gcc.dg/pr81703.c: Likewise.

Co-Authored-By: Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
From-SVN: r256475

6 years agodebug/dwarf: formStrp uses a 64-bit value for 64-bit DWARF
Ian Lance Taylor [Thu, 11 Jan 2018 01:51:16 +0000 (01:51 +0000)]
debug/dwarf: formStrp uses a 64-bit value for 64-bit DWARF

    No test as the only system I know that uses 64-bit DWARF is AIX.

    Backport of https://golang.org/cl/84379, which will be in Go 1.11.
    Backporting now for AIX support in gccgo.

    Reviewed-on: https://go-review.googlesource.com/87296

From-SVN: r256474

6 years agoDaily bump.
GCC Administrator [Thu, 11 Jan 2018 00:16:14 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r256472

6 years agodecl.c (gnat_to_gnu_component_type): Apply the check for atomic access once the compo...
Eric Botcazou [Wed, 10 Jan 2018 23:36:02 +0000 (23:36 +0000)]
decl.c (gnat_to_gnu_component_type): Apply the check for atomic access once the component size is taken into account...

* gcc-interface/decl.c (gnat_to_gnu_component_type): Apply the check
for atomic access once the component size is taken into account and
also do it if the component type is Atomic or Volatile_Full_Access.

From-SVN: r256465

6 years agore PR fortran/82367 (ICE with deferred length string allocate on non-deferred length...
Steven G. Kargl [Wed, 10 Jan 2018 23:26:15 +0000 (23:26 +0000)]
re PR fortran/82367 (ICE with deferred length string allocate on non-deferred length argument)

2018-01-10  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/82367
* resolve.c (resolve_allocate_expr): Check for NULL pointer.

2018-01-10  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/82367
* gfortran.dg/deferred_character_18.f90: New test.

From-SVN: r256464

6 years agoc-ada-spec.c (dump_number): Add FLOAT_P parameter.
Eric Botcazou [Wed, 10 Jan 2018 23:14:49 +0000 (23:14 +0000)]
c-ada-spec.c (dump_number): Add FLOAT_P parameter.

* c-ada-spec.c (dump_number): Add FLOAT_P parameter.
Skip 'f' and 'F' characters if it is true.
(store_ada_macro): Minor tweak.
(dump_ada_macros) <CPP_COMMENT>: Likewise.
<CPP_WSTRING>: Likewise.
<CPP_STRING>: Output '&' in the buffer if not the first string.
<CPP_NUMBER>: Adjust calls to dump_number.

From-SVN: r256463

6 years agoRISC-V: Add naked function support.
Kito Cheng [Wed, 10 Jan 2018 23:00:38 +0000 (23:00 +0000)]
RISC-V: Add naked function support.

2018-01-10  Kito Cheng  <kito.cheng@gmail.com>

gcc/
* config/riscv/riscv-protos.h (riscv_output_return): New.
* config/riscv/riscv.c (struct machine_function): New naked_p field.
(riscv_attribute_table, riscv_output_return),
(riscv_handle_fndecl_attribute, riscv_naked_function_p),
(riscv_allocate_stack_slots_for_args, riscv_warn_func_return): New.
(riscv_compute_frame_info): Only compute frame->mask if not a naked
function.
(riscv_expand_prologue): Add early return for naked function.
(riscv_expand_epilogue): Likewise.
(riscv_function_ok_for_sibcall): Return false for naked function.
(riscv_set_current_function): New.
(TARGET_SET_CURRENT_FUNCTION, TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS),
(TARGET_ATTRIBUTE_TABLE, TARGET_WARN_FUNC_RETURN): New.
* config/riscv/riscv.md (simple_return): Call riscv_output_return.
* doc/extend.texi (RISC-V Function Attributes): New.

Co-Authored-By: Jim Wilson <jimw@sifive.com>
From-SVN: r256462

6 years agoargv.c (expandargv): Correct check for dynamically allocated argv.
Daniel van Gerpen [Wed, 10 Jan 2018 22:40:53 +0000 (22:40 +0000)]
argv.c (expandargv): Correct check for dynamically allocated argv.

2018-01-10  Daniel van Gerpen  <daniel@vangerpen.de>

* argv.c (expandargv): Correct check for dynamically
allocated argv.

From-SVN: r256460

6 years agors6000.c (is_complex_IBM_long_double): Explicitly check for 128-bit long double befor...
Michael Meissner [Wed, 10 Jan 2018 22:02:31 +0000 (22:02 +0000)]
rs6000.c (is_complex_IBM_long_double): Explicitly check for 128-bit long double before checking TCmode.

2018-01-10  Michael Meissner  <meissner@linux.vnet.ibm.com>

* config/rs6000/rs6000.c (is_complex_IBM_long_double): Explicitly
check for 128-bit long double before checking TCmode.
* config/rs6000/rs6000.h (FLOAT128_IEEE_P): Explicitly check for
128-bit long doubles before checking TFmode or TCmode.
(FLOAT128_IBM_P): Likewise.

From-SVN: r256458

6 years agoPR tree-optimization/83671 - Fix for false positive reported by -Wstringop-overflow...
Martin Sebor [Wed, 10 Jan 2018 21:40:14 +0000 (21:40 +0000)]
PR tree-optimization/83671 - Fix for false positive reported by -Wstringop-overflow does not work with inlining

gcc/testsuite/ChangeLog:

PR tree-optimization/83671
* gcc.dg/strlenopt-40.c: New test.
* gcc.dg/strlenopt-41.c: New test.

gcc/ChangeLog:

PR tree-optimization/83671
* builtins.c (c_strlen): Unconditionally return zero for the empty
string.
Use -Warray-bounds for warnings.
* gimple-fold.c (get_range_strlen): Handle non-constant lengths
for non-constant array indices with COMPONENT_REF, arrays of
arrays, and pointers to arrays.
(gimple_fold_builtin_strlen): Determine and set length range for
non-constant character arrays.

From-SVN: r256457

6 years agore PR middle-end/81897 (spurious -Wmaybe-uninitialized warning)
Aldy Hernandez [Wed, 10 Jan 2018 21:39:20 +0000 (21:39 +0000)]
re PR middle-end/81897 (spurious -Wmaybe-uninitialized warning)

PR middle-end/81897
* tree-ssa-uninit.c (convert_control_dep_chain_into_preds): Skip
empty blocks.

From-SVN: r256456