Commit Graph

151209 Commits

Author SHA1 Message Date
Janne Blomqvist c1e9bbcc49 Revert r244448
From-SVN: r244454
2017-01-13 21:53:16 +02:00
David Malcolm be4aa83d6f Don't suppress bogus usage of macros from system headers in -Wformat (PR c/78304)
gcc/ChangeLog:
	PR c/78304
	* substring-locations.c (format_warning_va): Strengthen case 1 so
	that both endpoints of the substring must be within the format
	range for just the substring to be printed.

gcc/testsuite/ChangeLog:
	PR c/78304
	* gcc.dg/format/diagnostic-ranges.c (test_macro): Undef INT_FMT.
	(test_macro_2): New test.
	(test_macro_3): New test.
	(test_macro_4): New test.
	(test_non_contiguous_strings): Convert line number to line offset.
	* gcc.dg/format/pr78304-2.c: New test case.
	* gcc.dg/format/pr78304.c: New test case.

From-SVN: r244453
2017-01-13 19:27:43 +00:00
Uros Bizjak 7cdca3ec8a i386.opt (msgx): Use ix86_isa_flags2 variable.
* config/i386/i386.opt (msgx): Use ix86_isa_flags2 variable.
	* config/i386/i386.c (ix86_target_string): Add missing options
	to isa_opts and reorder options by implied ISAs.  Rename isa_opts2 to
	isa2_opts, ix86_flag_opts to flag2_opts, ix86_target_other to
	flags_other and ix86_target_other to flags2_other.  Display unknown
	isa2 options.
	(ix86_valid_target_attribute_inner_p): Add missing options and
	reorder options by implied ISAs, as in ix86_target_string.

testsuite/ChangeLog:

	* gcc.target/i386/funcspec-56.inc: Add missing options and
	reorder options by implied ISAs, as in ix86_target_string.

From-SVN: r244452
2017-01-13 19:32:44 +01:00
Jonathan Wakely 0fdba3a81c PR65411 don't retry fclose on EINTR
PR libstdc++/65411
	* config/io/basic_file_stdio.cc (__basic_file<char>::close()): Don't
	retry fclose on EINTR.

From-SVN: r244451
2017-01-13 17:52:34 +00:00
Marek Polacek e3017e522a re PR c++/71166 (ICE with nested constexpr/initializer)
PR c++/71166
	* g++.dg/cpp0x/constexpr-array18.C: New test.

From-SVN: r244450
2017-01-13 17:27:54 +00:00
Jonathan Wakely aa1ba96b87 Remove unused include from Profile Mode header
* include/profile/base.h: Remove unused header that leads to header
	cycle in C++17 mode.

From-SVN: r244449
2017-01-13 17:20:23 +00:00
Janne Blomqvist a6ab4e077b PR 78534 Change character length from int to size_t
In order to handle large character lengths on (L)LP64 targets, switch
the GFortran character length from an int to a size_t.

This is an ABI change, as procedures with character arguments take
hidden arguments with the character length.

I also changed the _size member in vtables from int to size_t, as
there were some cases where character lengths and sizes were
apparently mixed up and caused regressions otherwise. Although I
haven't tested, this might enable very large derived types as well.

Also, as there are some places in the frontend were negative character
lengths are used as special flag values, in the frontend the character
length is handled as a signed variable of the same size as a size_t,
although in the runtime library it really is size_t.

I haven't changed the character length variables for the co-array
intrinsics, as this is something that may need to be synchronized with
OpenCoarrays.

This is v4 of the patch. v3 was applied but had to reverted due to
breaking bootstrap. The fix is in resolve.c:resolve_charlen, where
it's necessary to check that an expression is constant before using
mpz_sgn.

Overview of v3 of the patch: All the issues pointed out by FX's review
of v2 have been fixed. In particular, there are now new functions
gfc_mpz_get_hwi and gfc_mpz_set_hwi, similar to the GMP functions
mpz_get_si and mpz_set_si, except that they get/set a HOST_WIDE_INT
instead of a long value. Similarly, gfc_get_int_expr now takes a
HOST_WIDE_INT instead of a long, gfc_extract_long is replaced by
gfc_extract_hwi. Also, the preliminary work to handle
gfc_charlen_type_node being unsigned has been removed.

Regtested on x86_64-pc-linux-gnu and i686-pc-linux-gnu.

frontend:

2017-01-13  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/78534
	PR fortran/66310
	* class.c (gfc_find_derived_vtab): Use gfc_size_kind instead of
	hardcoded kind.
	(find_intrinsic_vtab): Likewise.
	* expr.c (gfc_get_character_expr): Length parameter of type
	gfc_charlen_t.
	(gfc_get_int_expr): Value argument of type HOST_WIDE_INT.
	(gfc_extract_hwi): New function.
	(simplify_const_ref): Make string_len of type gfc_charlen_t.
	(gfc_simplify_expr): Use HOST_WIDE_INT for substring refs.
	* gfortran.h (gfc_mpz_get_hwi): New prototype.
	(gfc_mpz_set_hwi): Likewise.
	(gfc_charlen_t): New typedef.
	(gfc_expr): Use gfc_charlen_t for character lengths.
	(gfc_size_kind): New extern variable.
	(gfc_extract_hwi): New prototype.
	(gfc_get_character_expr): Use gfc_charlen_t for character length.
	(gfc_get_int_expr): Use HOST_WIDE_INT type for value argument.
	* iresolve.c (gfc_resolve_repeat): Pass string length directly without
	temporary, use gfc_charlen_int_kind.
	* match.c (select_intrinsic_set_tmp): Use HOST_WIDE_INT for charlen.
	* misc.c (gfc_mpz_get_hwi): New function.
	(gfc_mpz_set_hwi): New function.
	* module.c (atom_int): Change type from int to HOST_WIDE_INT.
	(parse_integer): Don't complain about large integers.
	(write_atom): Use HOST_WIDE_INT for integers.
	(mio_integer): Handle integer type mismatch.
	(mio_hwi): New function.
	(mio_intrinsic_op): Use HOST_WIDE_INT.
	(mio_array_ref): Likewise.
	(mio_expr): Likewise.
	* resolve.c (resolve_select_type): Use HOST_WIDE_INT for charlen,
	use snprintf.
	(resolve_substring_charlen): Use gfc_charlen_int_kind.
	(resolve_charlen): Use mpz_sgn to determine sign.
	* simplify.c (gfc_simplify_repeat): Use HOST_WIDE_INT/gfc_charlen_t
	instead of long.
	* target-memory.c (size_character): Length argument of type
	gfc_charlen_t.
	(gfc_encode_character): Likewise.
	(gfc_interpret_character): Use gfc_charlen_t.
	* target-memory.h (gfc_encode_character): Modify prototype.
	* trans-array.c (get_array_ctor_var_strlen): Use
	gfc_conv_mpz_to_tree_type.
	* trans-const.c (gfc_conv_mpz_to_tree_type): New function.
	* trans-const.h (gfc_conv_mpz_to_tree_type): New prototype.
	* trans-expr.c (gfc_class_len_or_zero_get): Build const of type
	gfc_charlen_type_node.
	(gfc_conv_intrinsic_to_class): Use gfc_charlen_int_kind instead of
	4, fold_convert to correct type.
	(gfc_conv_class_to_class): Build const of type size_type_node for
	size.
	(gfc_copy_class_to_class): Likewise.
	(gfc_conv_string_length): Use same type in expression.
	(gfc_conv_substring): Likewise, use HOST_WIDE_INT for charlen.
	(gfc_conv_string_tmp): Make sure len is of the right type.
	(gfc_conv_concat_op): Use same type in expression.
	(gfc_conv_procedure_call): Likewise.
	(alloc_scalar_allocatable_for_subcomponent_assignment):
	fold_convert to right type.
	(gfc_trans_subcomponent_assign): Likewise.
	(trans_class_vptr_len_assignment): Build const of correct type.
	(gfc_trans_pointer_assignment): Likewise.
	(alloc_scalar_allocatable_for_assignment): fold_convert to right
	type in expr.
	(trans_class_assignment): Build const of correct type.
	* trans-intrinsic.c (gfc_conv_associated): Likewise.
	(gfc_conv_intrinsic_repeat): Do calculation in sizetype.
	* trans-io.c (gfc_build_io_library_fndecls): Use
	gfc_charlen_type_node for character lengths.
	* trans-stmt.c (gfc_trans_label_assign): Build const of
	gfc_charlen_type_node.
	(gfc_trans_character_select): Likewise.
	(gfc_trans_allocate): Likewise, don't typecast strlen result.
	(gfc_trans_deallocate): Don't typecast strlen result.
	* trans-types.c (gfc_size_kind): New variable.
	(gfc_init_types): Determine gfc_charlen_int_kind and gfc_size_kind
	from size_type_node.

testsuite:

2017-01-13  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/78534
	PR fortran/66310
	* gfortran.dg/repeat_4.f90: Use integers of kind C_SIZE_T.
	* gfortran.dg/repeat_7.f90: New test for PR 66310.
	* gfortran.dg/scan_2.f90: Handle potential cast in assignment.
	* gfortran.dg/string_1.f90: Limit to ilp32 targets.
	* gfortran.dg/string_1_lp64.f90: New test.
	* gfortran.dg/string_3.f90: Limit to ilp32 targets.
	* gfortran.dg/string_3_lp64.f90: New test.

libgfortran:

2017-01-13  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/78534
	* intrinsics/args.c (getarg_i4): Use gfc_charlen_type.
	(get_command_argument_i4): Likewise.
	(get_command_i4): Likewise.
	* intrinsics/chmod.c (chmod_internal): Likewise.
	* intrinsics/env.c (get_environment_variable_i4): Likewise.
	* intrinsics/extends_type_of.c (struct vtype): Use size_t for size
	member.
	* intrinsics/gerror.c (gerror): Use gfc_charlen_type.
	* intrinsics/getlog.c (getlog): Likewise.
	* intrinsics/hostnm.c (hostnm_0): Likewise.
	* intrinsics/string_intrinsics_inc.c (string_len_trim): Rework to
	work if gfc_charlen_type is unsigned.
	(string_scan): Likewise.
	* io/transfer.c (transfer_character): Modify prototype.
	(transfer_character_write): Likewise.
	(transfer_character_wide): Likewise.
	(transfer_character_wide_write): Likewise.
	(transfer_array): Typecast to avoid signed-unsigned comparison.
	* io/unit.c (is_trim_ok): Use gfc_charlen_type.
	* io/write.c (namelist_write): Likewise.
	* libgfortran.h (gfc_charlen_type): Change typedef to size_t.

From-SVN: r244448
2017-01-13 19:05:48 +02:00
Richard Sandiford d3da63e543 Avoid excessively-big hash tables in empty-add cycles
A big source of cache misses when compiling a recent version of
gimple-match.ii was the call to cv_cache.empty () in clear_cv_cache.
The problem was that at one early point the hash table had grown
to 8191 entries (128k on LP64 hosts).  It then stayed at that size
for the rest of the compilation, even though subsequent uses needed
only a small number of entries (usually fewer than ten).  We would
still clear the whole 128k each time clear_cv_cache was called.

empty() already looks for cases where the hash table is very big
and cuts it down.  At the moment it fires when the table is 1M
in size and reduces it to the next selected prime above 1K (so
almost 2K in practice).  One fix would have been to lower the
threshold, but that didn't feel like the right approach.  Reducing
the current limit of 1M by a factor of 8 would be pretty significant
on its own, but I think this cv_cache behaviour would have been a
problem even with 64k or 32k tables.

I think the existing check is really for cases in which even a
well-populated table would need to be shrunk rather than cleared.
Here the problem isn't that the table is excessively big in
absolute terms, more that one outlier has made the table much
too big for the general case.

traverse() already shrinks the table if it's "too empty",
which is taken to be if:

      no. elements * 8 < capacity && capacity > 32

So an alternative would be to apply the same test (and the same choice
of shrunken size) to empty_slow too.  The patch below does this.
It gives a 2.5% improvement in gimple-match.ii compile time at -O0 -g
and doesn't seem to adversely affect any other tests I've tried.

Of course, there's a theoretical risk of a table alternating between
one large element count and one small element count.  If there was a
factor of eight difference between the two, we could shrink the table
on seeing each small element count, then grow it again when adding the
large number of elements.  That seems pretty unlikely in practice
though.

Also, empty_slow() does involve a traversal if some form of manual
gc is needed on active elements, so trying to recover from an outlier
should have even more benefit there.  (cv_cache uses automatic gc and so
the traversal gets optimised away.)

The calculation of the existing 1M threshold was assuming that each
entry was pointer-sized.  This patch makes it use the actual size of the
entry instead.

Tested on aarch64-linux-gnu and x86_64-linux-gnu.

gcc/
	* hash-table.h (hash_table::too_empty_p): New function.
	(hash_table::expand): Use it.
	(hash_table::traverse): Likewise.
	(hash_table::empty_slot): Use sizeof (value_type) instead of
	sizeof (PTR) to convert bytes to elements.  Shrink the table
	if the current size is excessive for the current number of
	elements.

From-SVN: r244447
2017-01-13 16:00:26 +00:00
Richard Sandiford 3d8e492088 Short-circuit alt_fail case in record_reg_classes
record_reg_classes is often the hottest function when generating
unoptimised output.  It seems typical for over 60% of the instructions
it handles to be moves, and of course moves tend to be the instructions
with the longest constraint strings.

Maybe we should avoid using move constraints to set costs in unoptimised
output and instead use the "natural" class for the mode being moved.
That's too invasive for stage 3 though.

However, seeing so many moves means that we see many "failing"
alternatives, usually because of '*' or because of hard registers
in function call sequences.  The frequency of alternatives that are
detected as failures after the first operand tends again to be more
than 60%.  Previously we would continue to process the other operands
of the alternative regardless.  This patch instead adds a short-cut.

As well as avoiding unnecessary work, it means that the alt_fail
variable can be jump-threaded away.

Tested on aach64-linux-gnu and x86_64-linux-gnu.  It reduces compile
time by about 1% on some tests with "-g -O0".

gcc/
	* ira-costs.c (record_reg_classes): Break from the inner loop
	early once alt_fail is known to be true.  Update outer loop
	handling accordingly.

From-SVN: r244446
2017-01-13 15:56:04 +00:00
Jonathan Wakely 92daf2dedd Add string_view support to COW std::string
PR libstdc++/79075
	* include/bits/basic_string.h [_GLIBCXX_USE_CXX11_ABI] (basic_string):
	Make _If_sv private.
	[!_GLIBCXX_USE_CXX11_ABI] (basic_string): Add member functions taking
	basic_string_view arguments.

From-SVN: r244445
2017-01-13 15:53:07 +00:00
Jeff Law 7c9560a578 tree-ssa-dse.c (decrement_count): New function.
* tree-ssa-dse.c (decrement_count): New function.
	(increment_start_addr, maybe_trim_memstar_call): Likewise.
	(dse_dom_walker::optimize_stmt): Call maybe_trim_memstar_call directly
	when we know the partially dead statement is a mem* function.

	* gcc.dg/tree-ssa/ssa-dse-25.c: New test.

From-SVN: r244444
2017-01-13 08:50:11 -07:00
Jeff Law 9e59e99a60 re PR middle-end/61912 (Missed (partial) dead store elimination for structures on GIMPLE)
PR tree-optimization/61912
	PR tree-optimization/77485
	* tree-ssa-dse.c: Include expr.h.
	(maybe_trim_constructor_store): New function.
	(maybe_trim_partially_dead_store): Call maybe_trim_constructor_store.

	PR tree-optimization/61912
	PR tree-optimization/77485
	* g++.dg/tree-ssa/ssa-dse-1.C: New test.
	* gcc.dg/tree-ssa/pr30375: Adjust expected output.
	* gcc.dg/tree-ssa/ssa-dse-24.c: New test.

From-SVN: r244443
2017-01-13 08:46:22 -07:00
Jeff Law d155c6fef0 re PR tree-optimization/33562 (aggregate DSE disabled)
PR tree-optimization/33562
        PR tree-optimization/61912
        PR tree-optimization/77485
	* doc/invoke.texi: Document new dse-max-object-size param.
	* params.def (PARM_DSE_MAX_OBJECT_SIZE): New PARAM.
	* tree-ssa-dse.c: Include params.h.
	(dse_store_status): New enum.
	(initialize_ao_ref_for_dse): New, partially extracted from
	dse_optimize_stmt.
	(valid_ao_ref_for_dse, normalize_ref): New.
	(setup_live_bytes_from_ref, compute_trims): Likewise.
	(clear_bytes_written_by, maybe_trim_complex_store): Likewise.
	(maybe_trim_partially_dead_store): Likewise.
	(maybe_trim_complex_store): Likewise.
	(dse_classify_store): Renamed from dse_possibly_dead_store_p.
	Track what bytes live from the original store.  Return tri-state
	for dead, partially dead or live.
	(dse_dom_walker): Add constructor, destructor and new private members.
	(delete_dead_call, delete_dead_assignment): New extracted from
	dse_optimize_stmt.
	(dse_optimize_stmt): Make a member of dse_dom_walker.
	Use initialize_ao_ref_for_dse.

        PR tree-optimization/33562
        PR tree-optimization/61912
        PR tree-optimization/77485
	* gcc.dg/tree-ssa/complex-4.c: Remove xfail.
	* gcc.dg/tree-ssa/complex-5.c: Likewise.
	* gcc.dg/tree-ssa/ssa-dse-9.c: Likewise.
	* gcc.dg/tree-ssa/ssa-dse-18.c: New test.
	* gcc.dg/tree-ssa/ssa-dse-19.c: Likewise.
	* gcc.dg/tree-ssa/ssa-dse-20.c: Likewise.
	* gcc.dg/tree-ssa/ssa-dse-21.c: Likewise.

From-SVN: r244442
2017-01-13 08:42:08 -07:00
Jeff Law 68b36e5903 re PR tree-optimization/33562 (aggregate DSE disabled)
PR tree-optimization/33562
	PR tree-optimization/61912
	PR tree-optimization/77485
	* sbitmap.h (bitmap_count_bits): Prototype.
	(bitmap_clear_range, bitmap_set_range): Likewise.
	* sbitmap.c (bitmap_clear_range): New function.
	(bitmap_set_range, sbitmap_popcount, bitmap_count_bits): Likewise.

From-SVN: r244441
2017-01-13 08:37:09 -07:00
Jonathan Wakely 90aa73309e Define cxx11-abi effective target for libstdc++ tests
PR libstdc++/79075
	* testsuite/lib/libstdc++.exp (check_v3_target_filesystem_ts): Remove
	redundant option from cxxflags.
	(check_effective_target_cxx11-abi): Define.
	* testsuite/21_strings/basic_string/allocator/71964.cc: Use cxx11-abi
	effective target.
	* testsuite/21_strings/basic_string/allocator/char/copy.cc: Likewise.
	* testsuite/21_strings/basic_string/allocator/char/copy_assign.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/char/minimal.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/char/move.cc: Likewise.
	* testsuite/21_strings/basic_string/allocator/char/move_assign.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/char/noexcept.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/char/swap.cc: Likewise.
	* testsuite/21_strings/basic_string/allocator/wchar_t/copy.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/wchar_t/minimal.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/wchar_t/move.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/wchar_t/noexcept.cc:
	Likewise.
	* testsuite/21_strings/basic_string/allocator/wchar_t/swap.cc:
	Likewise.
	* testsuite/23_containers/list/61347.cc: Likewise.
	* testsuite/27_io/basic_fstream/cons/base.cc: Likewise.
	* testsuite/27_io/ios_base/failure/cxx11.cc: Likewise.

From-SVN: r244440
2017-01-13 14:57:33 +00:00
Ville Voutilainen e5dcfacf43 re PR libstdc++/78389 (list::merge and list::sort are not exception safe)
PR libstdc++/78389
* include/bits/list.tcc (merge(list&&)):
Adjust list sizes if the comparator throws.
(merge(list&&, _StrictWeakOrdering)): Likewise.
(sort()): Splice elements back from the scratch buffers
if the comparator throws.
(sort(_StrictWeakOrdering)): Likewise.
* testsuite/23_containers/list/operations/78389.cc: New.

From-SVN: r244439
2017-01-13 16:46:25 +02:00
Jonathan Wakely 45cac8baeb Mark test as XFAIL for C++17 mode
* testsuite/23_containers/unordered_set/allocator/ext_ptr.cc: Mark
	XFAIL for C++17 until node reinsertion supports fancy pointers.

From-SVN: r244436
2017-01-13 13:01:48 +00:00
Martin Liska 77719b0675 Reload global options when strict aliasing is dropped (PR ipa/79043).
2017-01-13  Martin Liska  <mliska@suse.cz>

	PR ipa/79043
	* function.c (set_cfun): Add new argument force.
	* function.h (set_cfun): Likewise.
	* ipa-inline-transform.c (inline_call): Use the function when
	strict alising from is dropped for function we inline to.
2017-01-13  Martin Liska  <mliska@suse.cz>

	PR ipa/79043
	* gcc.c-torture/execute/pr79043.c: New test.

From-SVN: r244435
2017-01-13 12:56:54 +00:00
Richard Biener b1c95bb595 gimple-parser.c (c_parser_gimple_compound_statement): Handle nops.
2017-01-13  Richard Biener  <rguenther@suse.de>

	* gimple-parser.c (c_parser_gimple_compound_statement): Handle
	nops.

From-SVN: r244434
2017-01-13 12:55:12 +00:00
Richard Biener 3d78845f1c tree-pretty-print.c (dump_generic_node): Fix inverted condition for dumping GIMPLE INTEGER_CSTs.
2017-01-13  Richard Biener  <rguenther@suse.de>

	* tree-pretty-print.c (dump_generic_node): Fix inverted condition
	for dumping GIMPLE INTEGER_CSTs.

From-SVN: r244433
2017-01-13 12:54:16 +00:00
Jonathan Wakely c6ab906191 PR78361 recognise noexcept functions as referenceable
2017-01-13  Jonathan Wakely  <jwakely@redhat.com>

	PR libstdc++/78361
	* testsuite/20_util/add_pointer/value.cc: Test forming function
	pointers.

2017-01-13  Michael Brune  <lucdanton@free.fr>

	PR libstdc++/78361
	* include/std/type_traits (__is_referenceable): Handle noexcept
	function types.

From-SVN: r244432
2017-01-13 12:18:42 +00:00
Rainer Orth b3686dde2c Restore Solaris/SPARC Ada bootstrap
* gcc-interface/Makefile.in (SPARC/Solaris): Fix typo.

From-SVN: r244431
2017-01-13 12:14:06 +00:00
Rainer Orth acd8b8dc7d Require C11 for C++17 on Solaris
* config/sol2.h (TARGET_OS_CPP_BUILTINS): Define __STDC_VERSION__
	to 201112L since C++17.

From-SVN: r244430
2017-01-13 12:11:00 +00:00
Matthias Klose b7aa844d13 2017-01-13 Matthias Klose <doko@ubuntu.com>
* Import zlib 1.2.10.
        * configure: Regenerate.

From-SVN: r244429
2017-01-13 12:10:39 +00:00
Rainer Orth 2252a8025d Only declare gets for C++ < 2014 on Solaris (PR libstdc++/78979)
PR libstdc++/78979
	* inclhack.def (solaris_gets_c11, solaris_gets_cxx14)
	(solaris_std_gets_cxx14, solaris_stdlib_noreturn): New fixes.
	* fixincl.x: Regenerate.
	* tests/base/iso/stdio_iso.h [SOLARIS_GETS_C11_CHECK,
	SOLARIS_GETS_CXX14_CHECK, SOLARIS_STD_GETS_CXX14_CHECK,
	SOLARIS_STDLIB_NORETURN_CHECK]: New tests.

From-SVN: r244428
2017-01-13 12:09:13 +00:00
Richard Biener a181b2bcd7 re PR middle-end/78411 (FAIL: gcc.target/i386/pr45685.c scan-assembler-times cmov 6)
2017-01-13  Richard Biener  <rguenther@suse.de>

	PR middle-end/78411
	* gcc.target/i386/pr45685.c: Add -ftree-loop-if-convert.

From-SVN: r244427
2017-01-13 11:34:40 +00:00
Arnaud Charlet 33c51287cd getting_started_with_gnat.rst, [...]: Update documentation.
* doc/gnat_ugn/getting_started_with_gnat.rst,
	doc/gnat_ugn/inline_assembler.rst,
	doc/gnat_ugn/building_executable_programs_with_gnat.rst,
	doc/gnat_ugn/elaboration_order_handling_in_gnat.rst,
	doc/gnat_ugn/about_this_guide.rst,
	doc/gnat_ugn/platform_specific_information.rst,
	doc/gnat_ugn/example_of_binder_output.rst,
	doc/gnat_ugn/gnat_and_program_execution.rst,
	doc/gnat_ugn/gnat_utility_programs.rst,
	doc/gnat_ugn/the_gnat_compilation_model.rst,
	doc/gnat_rm/implementation_defined_attributes.rst,
	doc/gnat_rm/compatibility_and_porting_guide.rst,
	doc/gnat_rm/standard_library_routines.rst,
	doc/gnat_rm/standard_and_implementation_defined_restrictions.rst,
	doc/gnat_rm/implementation_defined_pragmas.rst,
	doc/gnat_rm/the_gnat_library.rst,
	doc/gnat_rm/obsolescent_features.rst,
	doc/gnat_rm/about_this_guide.rst,
	doc/gnat_rm/the_implementation_of_standard_i_o.rst,
	doc/gnat_rm/implementation_of_ada_2012_features.rst,
	doc/gnat_rm/interfacing_to_other_languages.rst,
	doc/gnat_rm/implementation_defined_aspects.rst,
	doc/gnat_rm.rst: Update documentation.
	* gnat_rm.texi, gnat_ugn.texi: Regenerated.

From-SVN: r244426
2017-01-13 12:23:42 +01:00
Arnaud Charlet b5f3c91301 [multiple changes]
2017-01-13  Ed Schonberg  <schonberg@adacore.com>

	* einfo.ads: minor grammar fixes in comment of Normalized_Position_Max.
	* scil_ll.adb: Minor style fix in comment.
	* sem_ch8.adb (Analyze_Expanded_Name): Perform dimension analysis
	even if entity is already set, because the node may be renalyzed
	after inlining transformations.

2017-01-13  Javier Miranda  <miranda@adacore.com>

	* sem_res.adb (Resolve_Call): Do not establish a transient scope
	for a call to inlinable expression function (since the call will
	be replaced by its returned object).
	* exp_ch6.ads (Is_Inlinable_Expression_Function): New subprogram.
	* exp_ch6.adb (Expression_Of_Expression_Function): New subprogram.
	(Expand_Call): For inlinable expression function call replace the
	call by its returned object.
	(Is_Inlinable_Expression_Function): New subprogram.

From-SVN: r244425
2017-01-13 12:16:56 +01:00
Arnaud Charlet 82e5c2434e [multiple changes]
2017-01-13  Gary Dismukes  <dismukes@adacore.com>

	* checks.adb: Minor typo fix and reformatting.

2017-01-13  Javier Miranda  <miranda@adacore.com>

	* contracts.adb (Contract_Only_Subprograms): Remove formal.
	(Copy_Original_Specification): Removed.
	(Skip_Contract_Only_Subprogram): Move here checks previously
	located in the caller of this routine (to leave the code more clean).
	(Build_Contract_Only_Subprogram): Code cleanup.
	* scil_ll.ads, scil_ll.adb (Get_Contract_Only_Body_Name): Removed.
	(Get_Contract_Only_Missing_Body_Name): Removed.

From-SVN: r244424
2017-01-13 12:13:00 +01:00
Arnaud Charlet f8981f1984 [multiple changes]
2017-01-13  Javier Miranda  <miranda@adacore.com>

	* sem_ch6.adb (Cloned_Expression): New subprogram.
	(Freeze_Expr_Types): Complete previous patch since the expression
	of an expression-function may have iterators and loops with
	defining identifiers which, as part of the preanalysis of the
	expression, may be left decorated with itypes that will not be
	available in the tree passed to the backend.

2017-01-13  Ed Schonberg  <schonberg@adacore.com>

	* checks.adb (Apply_Type_Conversion_Checks): Optimize a type
	conversion to Integer of an expression that is an attribute
	reference 'Pos on an enumeration type.

2017-01-13  Bob Duff  <duff@adacore.com>

	* atree.ads: Minor comment fix.

From-SVN: r244423
2017-01-13 12:08:57 +01:00
Justin Squirek 996ce809cd sem_ch6.adb (Check_Aggregate_Accessibility): Ignore function calls in accessibility check on return statement.
2017-01-13  Justin Squirek  <squirek@adacore.com>

	* sem_ch6.adb (Check_Aggregate_Accessibility): Ignore function
	calls in accessibility check on return statement.

From-SVN: r244422
2017-01-13 12:06:54 +01:00
Hristian Kirtchev 36be008200 sem_ch6.adb (Analyze_Subprogram_Body_Helper): Ensure that the input body is a subprogram body before trying to determine...
2017-01-13  Hristian Kirtchev  <kirtchev@adacore.com>

	* sem_ch6.adb (Analyze_Subprogram_Body_Helper):
	Ensure that the input body is a subprogram body before trying to
	determine whether it denoted an expression function.  Note that
	subprogram body stubs cannot denote expression functions.

From-SVN: r244421
2017-01-13 11:57:01 +01:00
Gary Dismukes 804ec349d0 bindgen.adb, [...]: Minor reformatting and typo fixes.
2017-01-13  Gary Dismukes  <dismukes@adacore.com>

	* bindgen.adb, sem_ch6.adb, binde.adb, exp_ch3.adb: Minor reformatting
	and typo fixes.

From-SVN: r244420
2017-01-13 11:56:14 +01:00
Arnaud Charlet 354ae44943 [multiple changes]
2017-01-13  Javier Miranda  <miranda@adacore.com>

	* einfo.ads (Component_Bit_Offset): Fix documentation.
	* sem_ch13.adb (Check_Record_Representation_Clause): Skip check
	on record holes for components with unknown compile-time offsets.

2017-01-13  Bob Duff  <duff@adacore.com>

	* ali.ads, ali.adb (Static_Elaboration_Model_Used): Remove unused flag.
	* g-locfil.ads: Minor comment fix.

2017-01-13  Bob Duff  <duff@adacore.com>

	* binde.adb (Elab_New): New elaboration order algorithm
	that is expected to cause fewer ABE issues. This is a work in
	progress. The new algorithm is currently disabled, and can be
	enable by the -dp switch, or by modifying the Do_Old and Do_New
	etc. flags and rebuilding. Experimental code is included to
	compare the results of the old and new algorithms.
	* binde.ads: Use GNAT.Dynamic_Tables instead of Table, so we
	can have multiple of these tables, so the old and new algorithms
	can coexist.
	* bindgen.ads (Gen_Output_File): Pass Elab_Order as an 'in'
	parameter of type array. This avoids the global variable, and
	allows bounds checking (which is normally defeated by the tables
	packages). It also ensures that the Elab_Order is read-only
	to Bindgen.
	* bindgen.adb: Pass Elab_Order as an 'in' parameter to all
	subprograms that need it, as above.
	* debug.adb: Document new -dp switch. Modify doc of old -do
	switch.
	* gnatbind.adb (Gnatbind): Make use of new interfaces to Binde
	and Bindgen.  Move writing of closure (-R and -Ra switches)
	to Binde; that's more convenient.

2017-01-13  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch6.adb (Analyze_Expression_Function): If the expression
	function is a completion, all entities referenced in the
	expression are frozen. As a consequence, a reference to an
	uncompleted private type from an enclosing scope is illegal.

From-SVN: r244419
2017-01-13 11:54:43 +01:00
Arnaud Charlet 448a1eb3eb [multiple changes]
2017-01-13  Javier Miranda  <miranda@adacore.com>

	* sem_ch6.adb (Freeze_Expr_Types): New subprogram.
	(Analyze_Subprogram_Body_Helper): At the occurrence of an
	expression function declaration that is a completion, its
	expression causes freezing (AI12-0103).

2017-01-13  Vadim Godunko  <godunko@adacore.com>

	* a-coinho-shared.adb: Fix memory leaks in Constant_Reference and
	Reference functions of Ada.Containers.Indefinite_Holders.

2017-01-13  Bob Duff  <duff@adacore.com>

	* s-os_lib.ads: Minor comment fixes.

2017-01-13  Hristian Kirtchev  <kirtchev@adacore.com>

	* exp_ch3.adb (Default_Initialize_Object): Do not default
	initialize an object when it is of a task type and restriction
	No_Tasking is in effect because the initialization is obsolete.
	* exp_ch9.adb (Build_Master_Entity): Do not generate a master when
	restriction No_Tasking is in effect.
	(Build_Master_Renaming): Do not rename a master when restriction
	No_Tasking is in effect.

From-SVN: r244418
2017-01-13 11:51:45 +01:00
Arnaud Charlet b2c1aa8fe9 [multiple changes]
2017-01-13  Ed Schonberg  <schonberg@adacore.com>

	* sem_aggr.adb (Resolve_Array_Aggregate): The code that verifies
	the legality of An others clause applies as well to a choice in
	an Iterated_component_ association.
	(Resolve_Iterated_Component_Association): An others choice
	is legal.
	* exp_aggr.adb (Aggr_Assignment_OK_For_Backend): An
	Iterated_Component_Association is not static.

2017-01-13  Hristian Kirtchev  <kirtchev@adacore.com>

	* exp_ch3.adb (Freeze_Type): Mark the Ghost mode as set in case
	control is passed to the expresion handler before the new mode
	is set.
	* sem_ch12.adb (Analyze_Package_Instantiation,
	Analyze_Subprogram_Instantiation): Mark the Ghost mode as set
	in case control is passed to the expresion handler before the
	new mode is set.

From-SVN: r244417
2017-01-13 11:48:57 +01:00
Hristian Kirtchev 72cdccfa16 sem_aggr.adb, [...]: Minor reformatting.
2017-01-13  Hristian Kirtchev  <kirtchev@adacore.com>

	* sem_aggr.adb, sem_ch3.adb, inline.adb, sem_util.adb, exp_ch4.adb,
	exp_aggr.adb: Minor reformatting.

From-SVN: r244416
2017-01-13 11:47:25 +01:00
Gary Dismukes fae8eb5b96 inline.adb: Minor reformatting and typo fix.
2017-01-13  Gary Dismukes  <dismukes@adacore.com>

	* inline.adb: Minor reformatting and typo fix.

From-SVN: r244415
2017-01-13 11:45:17 +01:00
Arnaud Charlet 00f45f3090 [multiple changes]
2017-01-13  Ed Schonberg  <schonberg@adacore.com>

	* sem_util.ads, sem_util.adb (Choice_List): Move function here
	from sem_aggr.adb, for use elsewhere.
	* sem_ch3.adb (Analyze_Object_Declaration): Use Choice_List.
	* sem_aggr.adb (Resolve_Array_Aggregate): Remove
	Iterated_Component_Present.
	* exp_aggr.adb: Use Choice_List throughout, to handle
	Iterated_Component_Associations.
	(Gen_Loop): Generate proper loop for an
	Iterated_Component_Association: loop variable has the identifier
	of the original association. Generate a loop even for a single
	component choice, in order to make loop parameter visible in
	expression.
	(Flatten): An Iterated_Component_Association is not static.

2017-01-13  Yannick Moy  <moy@adacore.com>

	* exp_ch4.adb (Expand_N_Op_Expon): Ensure that the value of
	float exponentiation for statically known small negative values
	is the reciprocal of the exponentiation for the opposite value
	of the exponent.
	* s-exnllf.adb (Exn_Float, Exn_Long_Float, Exn_Long_Long_Float):
	Ensure that the value of float exponentiation for negative values
	is the reciprocal of the exponentiation for the opposite value
	of the exponent.
	* inline.adb (Expand_Inlined_Call): Fix the count
	for the number of generated gotos.

From-SVN: r244414
2017-01-13 11:42:37 +01:00
Andre Vehreschild eaed322611 re PR fortran/70697 ([Coarray] ICE on EVENT WAIT with array element UNTIL_COUNT argument)
gcc/testsuite/ChangeLog:

2017-01-13  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/70697
	* gfortran.dg/coarray/event_4.f08: New test.


gcc/fortran/ChangeLog:

2017-01-13  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/70697
	* resolve.c (resolve_lock_unlock_event): Resolve the expression for
	event's until_count.

From-SVN: r244413
2017-01-13 11:39:52 +01:00
Arnaud Charlet 3603fa5cfb Code cleanups.
From-SVN: r244412
2017-01-13 11:39:38 +01:00
Arnaud Charlet 3abbc5c240 [multiple changes]
2017-01-13  Yannick Moy  <moy@adacore.com>

	* inline.adb: Code cleanup.
	* sem_util.adb (Is_OK_Volatile_Context): Add
	expression in delay statement as OK for volatile context.

2017-01-13  Ed Schonberg  <schonberg@adacore.com>

	* sem_aggr.adb (Resolve_Array_Aggregate): In normal compilation
	mode a choice that is a subtype with a static predicate is
	replaced by the values it covers. This transformation must not
	be performed in ASIS mode, to preserve the source for analysis.

2017-01-13  Justin Squirek  <squirek@adacore.com>

	* nlists.ads: Correct minor typo.

From-SVN: r244411
2017-01-13 11:38:56 +01:00
Arnaud Charlet ef74daead6 [multiple changes]
2017-01-13  Gary Dismukes  <dismukes@adacore.com>

	* sem_ch13.adb: Minor reformatting and typo fix.

2017-01-13  Ed Schonberg  <schonberg@adacore.com>

	* par-ch4.adb (P_Aggregate_Or_Parent_Expr): An
	Iterated_Component_Association is a named association in an
	array aggregate.
	* sem_aggr.adb (Resolve_Iterated_Component_Association): New
	procedure, subsidiary of Resolve_Array_Aggregate, to analyze
	and resolve the discrete choices and the expression of the
	new construct.
	* sinfo.adb, sinfo.ads: In analogy with N_Component_Association,
	Loop_Actions and Box_Present are attributes of
	N_Iterated_Component_Association nodes. Box_Present is always
	False in this case.
	* sprint.adb (Sprint_Node): An Iterated_Component_Association
	has a Discrete_Choices list, as specified in the RM. A
	Component_Association for aggregate uses instead a Choices list.
	We have to live with this small inconsistency because the new
	construct also has a defining identifier, and there is no way
	to merge the two node structures.

From-SVN: r244410
2017-01-13 11:33:37 +01:00
Arnaud Charlet da9683f4db [multiple changes]
2017-01-13  Yannick Moy  <moy@adacore.com>

	* inline.adb (Remove_Aspects_And_Pragmas): Add Unused to the
	list of pragmas to remove.  Remove pragmas from the list of
	statements in the body to inline.
	* namet.adb, namet.ads (Nam_In): New version with 12 parameters.

2017-01-13  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch3.adb (Resolve_Aspects): New procedure, subsidiary of
	Analyze_Declarations, to analyze and resolve the expressions of
	aspect specifications in the current declarative list, so that
	the expressions have proper entity and type info.  This is needed
	for ASIS when there is no subsequent expansion to generate this
	semantic information.
	* sem_ch13.adb (Check_Aspect_At_End_Of_Declarations): Use Etype of
	original expression, to suppress cascaded errors when expression
	has been constant-folded.
	(Resolve_Aspect_Expressions, Resolve_Name): Preserve entities in
	ASIS mode, because there is no subsequent expansion to decorate
	the tree.

From-SVN: r244409
2017-01-13 11:24:28 +01:00
Yannick Moy 3de3a1be9e inline.adb, inline.ads (Call_Can_Be_Inlined_In_GNATprove_Mode): New function to detect when a call may be inlined or not in GNATprove mode.
2017-01-13  Yannick Moy  <moy@adacore.com>

	* inline.adb, inline.ads (Call_Can_Be_Inlined_In_GNATprove_Mode):
	New function to detect when a call may be inlined or not in
	GNATprove mode.
	(Expand_Inlined_Call): Ensure that a temporary
	is always created in the cases where a type conversion may be
	needed on an input parameter in GNATprove mode, so that GNATprove
	sees the check to perform.
	* sem_res.adb (Resolve_Call): In GNATprove mode, skip inlining
	when not applicable due to actual requiring type conversion
	with possible check but no temporary value can be copied for
	GNATprove to see the check.

From-SVN: r244408
2017-01-13 11:22:23 +01:00
Andre Vehreschild 4ccff88b71 re PR fortran/70696 ([Coarray] ICE on EVENT POST of host-associated EVENT_TYPE coarray)
gcc/testsuite/ChangeLog:

2017-01-13  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/70696
	* gfortran.dg/coarray/event_3.f08: New test.

gcc/fortran/ChangeLog:

2017-01-13  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/70696
	* trans-expr.c (gfc_get_tree_for_caf_expr): Ensure the backend_decl
	is valid before accessing it.

libgfortran/ChangeLog:

2017-01-13  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/70696
	* caf/single.c (_gfortran_caf_register): Allocate enough memory for
	the event counter.

From-SVN: r244407
2017-01-13 11:22:21 +01:00
Hristian Kirtchev d8f43ee6d0 sem_aggr.adb, [...]: Update all eligible case statements to reflect the new style for case alternatives.
2017-01-13  Hristian Kirtchev  <kirtchev@adacore.com>

	* sem_aggr.adb, par_sco.adb, s-osprim-mingw.adb, exp_ch5.adb,
	exp_prag.adb, sem_ch3.adb, xr_tabls.adb, lib-xref-spark_specific.adb,
	layout.adb, sem_dist.adb, exp_spark.adb, exp_ch7.adb, gnatcmd.adb,
	exp_util.adb, prj-proc.adb, sem_aux.adb, comperr.adb, g-memdum.adb,
	exp_attr.adb, s-intman-solaris.adb, exp_ch9.adb, make.adb, live.adb,
	g-sercom-linux.adb, sem_dim.adb, mlib-prj.adb, s-intman-posix.adb,
	sem_ch9.adb, sem_ch10.adb, prep.adb, einfo.adb, scng.adb, checks.adb,
	prj-strt.adb, sem_prag.adb, eval_fat.adb, sem_ch12.adb, sem.adb,
	a-numaux-x86.adb, a-stwifi.adb, i-cobol.adb, prj.adb,
	get_spark_xrefs.adb, s-tasini.adb, rtsfind.adb, freeze.adb,
	g-arrspl.adb, par-ch4.adb, sem_util.adb, sem_res.adb, expander.adb,
	sem_attr.adb, exp_dbug.adb, prj-pp.adb, a-stzfix.adb, s-interr.adb,
	s-wchcnv.adb, switch-m.adb, gnat1drv.adb, sinput-l.adb, stylesw.adb,
	contracts.adb, s-intman-android.adb, g-expect.adb, exp_ch4.adb,
	g-comlin.adb, errout.adb, sinput.adb, s-exctra.adb, repinfo.adb,
	g-spipat.adb, g-debpoo.adb, exp_ch6.adb, sem_ch4.adb, exp_ch13.adb,
	a-wtedit.adb, validsw.adb, pprint.adb, widechar.adb, makeutl.adb,
	ali.adb, set_targ.adb, sem_mech.adb, sem_ch6.adb, gnatdll.adb,
	get_scos.adb, g-pehage.adb, s-tratas-default.adb, gnatbind.adb,
	prj-dect.adb, g-socthi-mingw.adb, par-prag.adb, prj-nmsc.adb,
	exp_disp.adb, par-ch12.adb, binde.adb, sem_ch8.adb,
	s-tfsetr-default.adb, s-regexp.adb, gprep.adb, s-tpobop.adb,
	a-teioed.adb, sem_warn.adb, sem_eval.adb, g-awk.adb, s-io.adb,
	a-ztedit.adb, xoscons.adb, exp_intr.adb, sem_cat.adb, sprint.adb,
	g-socket.adb, exp_dist.adb, sem_ch13.adb, s-tfsetr-vxworks.adb,
	par-ch3.adb, treepr.adb, g-forstr.adb, g-catiio.adb, par-ch5.adb,
	uname.adb, osint.adb, exp_ch3.adb, prj-env.adb, a-strfix.adb,
	a-stzsup.adb, prj-tree.adb, s-fileio.adb: Update all eligible case
	statements to reflect the new style for case alternatives. Various
	code clean up and reformatting.

From-SVN: r244406
2017-01-13 11:19:19 +01:00
Arnaud Charlet d4bf622fbf [multiple changes]
2017-01-13  Gary Dismukes  <dismukes@adacore.com>

	* exp_util.adb: Minor reformatting.

2017-01-13  Yannick Moy  <moy@adacore.com>

	* exp_spark.adb: Code cleanup.
	* sem_ch9.adb (Analyze_Delay_Until): Resolve
	expression so that calls are identified as such inside delay
	until.

From-SVN: r244405
2017-01-13 11:13:41 +01:00
Arnaud Charlet 53a5377aac Minor reformatting.
From-SVN: r244404
2017-01-13 11:11:43 +01:00
Ed Schonberg a702c9b9ee exp_util.adb (Insert_Actions): Handle Iterated_Component_Association.
2017-01-13  Ed Schonberg  <schonberg@adacore.com>

	* exp_util.adb (Insert_Actions): Handle Iterated_Component_Association.
	* par-ch3.adb (P_Discrete_Choice_List): An
	Iterated_Component_Association is an array aggregate component.
	* par-ch4.adb (P_Iterated_Component_Association): New procedure.
	(Is_Quantified_Expression): New function that performs a lookahead
	to distinguish quantified expressions from iterated component
	associations.
	(P_Aggregate_Or_Paren_Expr): Recognize iterated component
	associations.
	(P_Unparen_Cond_Case_Quant_Expression, P_Primary): Ditto.
	* sem.adb (Analyze): Handle Iterated_Component_Association.
	* sem_aggr.adb (Resolve_Array_Aggregate): Dummy handling of iterated
	component associations.
	* sinfo.ads, sinfo.adb: Entries for for
	N_Iterated_Component_Association and its fields.
	* sprint.adb (Sprint_Node_Actual): Handle
	N_Iterated_Component_Association.

From-SVN: r244403
2017-01-13 11:11:17 +01:00