Commit Graph

159038 Commits

Author SHA1 Message Date
Daniel van Gerpen
3ec62f5406 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
2018-01-10 15:40:53 -07:00
Michael Meissner
83cbbe3aa8 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
2018-01-10 22:02:31 +00:00
Martin Sebor
c42d0aa089 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
2018-01-10 14:40:14 -07:00
Aldy Hernandez
e7c6abad7f 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
2018-01-10 21:39:20 +00:00
Steven G. Kargl
266404a8d6 [multiple changes]
2018-01-10 Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/83093
	* resolve.c (resolve_charlen): Check the type of cl->length
	after resolution.

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

	PR fortran/83093
	* gfortran.dg/allocate_with_typespec_7.f90: New test.

From-SVN: r256455
2018-01-10 21:31:43 +00:00
Eric Botcazou
88324fd006 * dwarf2out.c (dwarf2out_var_location): Do not pass NULL to fprintf.
From-SVN: r256454
2018-01-10 20:59:04 +00:00
Peter Bergner
2025a48d08 re PR target/83399 (Power8 ICE During LRA with 2-op rtl pattern for lvx instruction)
gcc/
	PR target/83399
	* config/rs6000/rs6000.c (print_operand) <'y'>: Use
	VECTOR_MEM_ALTIVEC_OR_VSX_P.
	* config/rs6000/vsx.md (*vsx_le_perm_load_<mode> for VSX_D): Use
	indexed_or_indirect_operand predicate.
	(*vsx_le_perm_load_<mode> for VSX_W): Likewise.
	(*vsx_le_perm_load_v8hi): Likewise.
	(*vsx_le_perm_load_v16qi): Likewise.
	(*vsx_le_perm_store_<mode> for VSX_D): Likewise.
	(*vsx_le_perm_store_<mode> for VSX_W): Likewise.
	(*vsx_le_perm_store_v8hi): Likewise.
	(*vsx_le_perm_store_v16qi): Likewise.
	(eight unnamed splitters): Likewise.

gcc/testsuite/
	PR target/83399
	* gcc.target/powerpc/pr83399.c: New test.

From-SVN: r256453
2018-01-10 14:49:36 -06:00
Peter Bergner
9e0fa36ae8 x86intrin.h: Change #warning to #error.
* config/rs6000/x86intrin.h: Change #warning to #error. Update message.
	* config/rs6000/emmintrin.h: Likewise.
	* config/rs6000/mmintrin.h: Likewise.
	* config/rs6000/xmmintrin.h: Likewise.

From-SVN: r256452
2018-01-10 14:19:26 -06:00
Paolo Carlini
d90a25424a parser.c (cp_parser_std_attribute_spec): When token_pair::require_open / require_close return false simply return...
2018-01-10  Paolo Carlini  <paolo.carlini@oracle.com>

	* parser.c (cp_parser_std_attribute_spec): When
        token_pair::require_open / require_close return false simply
	return error_mark_node, avoid duplicate cp_parser_error about
	expected '(' / ')', respectively.

From-SVN: r256451
2018-01-10 19:54:17 +00:00
Ian Lance Taylor
bbb31a1d5c os, syscall: handle _st_timespec for AIX stat
Reviewed-on: https://go-review.googlesource.com/87197

From-SVN: r256450
2018-01-10 19:51:24 +00:00
David Malcolm
9a004410d9 Preserving locations for variable-uses and constants (PR c++/43486)
This patch implements location wrapper nodes, preserving source locations
of the uses of variables and constants in various places in the
C++ frontend: at the arguments at callsites, and for typeid, alignof,
sizeof, and offsetof.

For example, it allows the C++ FE to underline the pertinent argument
for mismatching calls, for such expressions, improving:

extern int callee (int one, const char *two, float three);

int caller (int first, int second, float third)
{
  return callee (first, second, third);
}

from

test.cc: In function 'int caller(int, int, float)':
test.cc:5:38: error: invalid conversion from 'int' to 'const char*' [-fpermissive]
   return callee (first, second, third);
                                      ^
test.cc:1:41: note:   initializing argument 2 of 'int callee(int, const char*, float)'
 extern int callee (int one, const char *two, float three);
                             ~~~~~~~~~~~~^~~

to:

test.cc: In function 'int caller(int, int, float)':
test.cc:5:25: error: invalid conversion from 'int' to 'const char*' [-fpermissive]
   return callee (first, second, third);
                         ^~~~~~
test.cc:1:41: note:   initializing argument 2 of 'int callee(int, const char*, float)'
 extern int callee (int one, const char *two, float three);
                             ~~~~~~~~~~~~^~~

This is the combination of the following patches:

  "[PATCH 01/14] C++: preserve locations within build_address"
     https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00883.html

  "[PATCH v2.4 of 02/14] Support for adding and stripping location_t wrapper nodes"
    https://gcc.gnu.org/ml/gcc-patches/2018-01/msg00591.html

  "[PATCH] Eliminate location wrappers in tree_nop_conversion/STRIP_NOPS"
    https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01330.html

  "[PATCH v4 of 03/14] C++: add location_t wrapper nodes during parsing (minimal impl)"
    https://gcc.gnu.org/ml/gcc-patches/2018-01/msg00660.html

  "[PATCH 04/14] Update testsuite to show improvements"
    https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00891.html

  "[v3 of 05/14] C++: handle locations wrappers when calling warn_for_memset"
    https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01378.html

  "[PATCH 07/14] reject_gcc_builtin: strip any location wrappers"
    https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00886.html

  "[v3 of PATCH 08/14] cp/tree.c: strip location wrappers in lvalue_kind"
    https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01433.html

  "[PATCH 09/14] Strip location wrappers in null_ptr_cst_p"
    https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00888.html

  "[PATCH 11/14] Handle location wrappers in string_conv_p"
    https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00890.html

  "[PATCH 12/14] C++: introduce null_node_p"
    https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00894.html

  "[v3 of PATCH 13/14] c-format.c: handle location wrappers"
    https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01494.html

  "[PATCH 14/14] pp_c_cast_expression: don't print casts for location wrappers"
    https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00893.html

  "[v3 of PATCH 15/14] Use fold_for_warn in get_atomic_generic_size"
    https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01380.html

  "[PATCH] Add selftest for "fold_for_warn (error_mark_node)""
    https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01385.html

gcc/c-family/ChangeLog:
	PR c++/43486
	* c-common.c: Include "selftest.h".
	(get_atomic_generic_size): Perform the test for integral type
	before the range test for any integer constant, fixing indentation
	of braces.  Call fold_for_warn before testing for an INTEGER_CST.
	(reject_gcc_builtin): Strip any location wrapper from EXPR.
	(selftest::test_fold_for_warn): New function.
	(selftest::c_common_c_tests): New function.
	(selftest::c_family_tests): Call it, and
	selftest::c_pretty_print_c_tests.
	* c-common.h (selftest::c_pretty_print_c_tests): New decl.
	* c-format.c (check_format_arg): Convert VAR_P check to a
	fold_for_warn.
	* c-pretty-print.c: Include "selftest.h".
	(pp_c_cast_expression): Don't print casts for location wrappers.
	(selftest::assert_c_pretty_printer_output): New function.
	(ASSERT_C_PRETTY_PRINTER_OUTPUT): New macro.
	(selftest::test_location_wrappers): New function.
	(selftest::c_pretty_print_c_tests): New function.
	* c-warn.c (warn_for_memset): Call fold_for_warn on the arguments.

gcc/cp/ChangeLog:
	PR c++/43486
	* call.c (null_ptr_cst_p): Strip location wrappers when
	converting from '0' to a pointer type in C++11 onwards.
	(conversion_null_warnings): Replace comparison with null_node with
	call to null_node_p.
	(build_over_call): Likewise.
	* cp-gimplify.c (cp_fold): Remove the early bailout when
	processing_template_decl.
	* cp-lang.c (selftest::run_cp_tests): Call
	selftest::cp_pt_c_tests and selftest::cp_tree_c_tests.
	* cp-tree.h (cp_expr::maybe_add_location_wrapper): New method.
	(selftest::run_cp_tests): Move decl to bottom of file.
	(null_node_p): New inline function.
	(selftest::cp_pt_c_tests): New decl.
	(selftest::cp_tree_c_tests): New decl.
	* cvt.c (build_expr_type_conversion): Replace comparison with
	null_node with call to null_node_p.
	* error.c (args_to_string): Likewise.
	* except.c (build_throw): Likewise.
	* mangle.c (write_expression): Skip location wrapper nodes.
	* parser.c (literal_integer_zerop): New function.
	(cp_parser_postfix_expression): Call maybe_add_location_wrapper on
	the result for RID_TYPEID. Pass true for new "wrap_locations_p"
	param of cp_parser_parenthesized_expression_list.  When calling
	warn_for_memset, replace integer_zerop calls with
	literal_integer_zerop, eliminating the double logical negation
	cast to bool.  Eliminate the special-casing for CONST_DECL in
	favor of the fold_for_warn within warn_for_memset.
	(cp_parser_parenthesized_expression_list): Add "wrap_locations_p"
	param, defaulting to false.  Convert "expr" to a cp_expr, and call
	maybe_add_location_wrapper on it when wrap_locations_p is true.
	(cp_parser_unary_expression): Call maybe_add_location_wrapper on
	the result for RID_ALIGNOF and RID_SIZEOF.
	(cp_parser_builtin_offsetof): Likewise.
	* pt.c: Include "selftest.h".
	(tsubst_copy): Handle location wrappers.
	(tsubst_copy_and_build): Likewise.
	(build_non_dependent_expr): Likewise.
	(selftest::test_build_non_dependent_expr): New function.
	(selftest::cp_pt_c_tests): New function.
	* tree.c: Include "selftest.h".
	(lvalue_kind): Handle VIEW_CONVERT_EXPR location wrapper nodes.
	(selftest::test_lvalue_kind): New function.
	(selftest::cp_tree_c_tests): New function.
	* typeck.c (string_conv_p): Strip any location wrapper from "exp".
	(cp_build_binary_op): Replace comparison with null_node with call
	to null_node_p.
	(build_address): Use location of operand when building address
	expression.

gcc/testsuite/ChangeLog:
	PR c++/43486
	* g++.dg/diagnostic/param-type-mismatch.C: Update expected results
	to reflect that the arguments are correctly underlined.
	* g++.dg/plugin/diagnostic-test-expressions-1.C: Add test coverage
	for globals, params, locals and literals.
	(test_sizeof): Directly test the location of "sizeof", rather than
	when used in compound expressions.
	(test_alignof): Likewise for "alignof".
	(test_string_literals): Likewise for string literals.
	(test_numeric_literals): Likewise for numeric literals.
	(test_builtin_offsetof): Likewise for "__builtin_offsetof".
	(test_typeid): Likewise for typeid.
	(test_unary_plus): New.
	* g++.dg/warn/Wformat-1.C: Add tests of pointer arithmetic on
	format strings.

gcc/ChangeLog:
	PR c++/43486
	* tree-core.h: Document EXPR_LOCATION_WRAPPER_P's usage of
	"public_flag".
	* tree.c (tree_nop_conversion): Return true for location wrapper
	nodes.
	(maybe_wrap_with_location): New function.
	(selftest::check_strip_nops): New function.
	(selftest::test_location_wrappers): New function.
	(selftest::tree_c_tests): Call it.
	* tree.h (STRIP_ANY_LOCATION_WRAPPER): New macro.
	(maybe_wrap_with_location): New decl.
	(EXPR_LOCATION_WRAPPER_P): New macro.
	(location_wrapper_p): New inline function.
	(tree_strip_any_location_wrapper): New inline function.

From-SVN: r256448
2018-01-10 19:40:55 +00:00
Uros Bizjak
60d87d8616 pr82618.c (dg-options): Add -mno-stv.
* gcc.target/i386/pr82618.c (dg-options): Add -mno-stv.

From-SVN: r256447
2018-01-10 20:39:04 +01:00
Ian Lance Taylor
fd0c1dd167 libgo: add platform support for SuperH
Reviewed-on: https://go-review.googlesource.com/84555

From-SVN: r256446
2018-01-10 19:19:02 +00:00
Aaron Sawdey
ec2f999b10 memcmp-1.c: Reduce runtime to something reasonable.
2018-01-10  Aaron Sawdey  <acsawdey@linux.vnet.ibm.com>

	* gcc.dg/memcmp-1.c: Reduce runtime to something reasonable.

From-SVN: r256443
2018-01-10 12:30:41 -06:00
Ian Lance Taylor
7074b41bdc Add missing .a files.
Add missing .a files.  These should have been committed with the
update to go1.10beta1, but were skipped because by default Subversion
ignores all files matching *.a.

From-SVN: r256442
2018-01-10 18:02:33 +00:00
Marek Polacek
6bebae7503 re PR c++/82541 (Wduplicated-branches triggers in template context)
PR c++/82541
	* call.c (build_conditional_expr_1): Check complain before warning.
	* pt.c (tsubst_copy_and_build) <case COND_EXPR>: Suppress
	-Wduplicated-branches.

	* g++.dg/warn/Wduplicated-branches4.C: New test.

From-SVN: r256441
2018-01-10 17:05:14 +00:00
Jakub Jelinek
e99ef40892 re PR c++/81327 (cast to void* does not suppress -Wclass-memaccess)
PR c++/81327
	* call.c (maybe_warn_class_memaccess): Add forward declaration.
	Change last argument from tree * to const vec<tree, va_gc> *, adjust
	args uses and check number of operands too.  Don't strip away any
	nops.  Use maybe_constant_value when looking for INTEGER_CST args.
	Deal with src argument not having pointer type.  Check
	tree_fits_uhwi_p before calling tree_to_uhwi.  Remove useless
	test.
	(build_over_call): Call maybe_warn_class_memaccess here on the
	original arguments.
	(build_cxx_call): Rather than here on converted arguments.

	* g++.dg/Wclass-memaccess-2.C: Don't expect a warning when explicitly
	cast to void *.

From-SVN: r256440
2018-01-10 17:59:09 +01:00
François Dumont
75ce74bbdd 2018-01-10 François Dumont <fdumont@gcc.gnu.org>
* include/bits/forward_list.h
	(_Fwd_list_node_base(_Fwd_list_node_base&&)): New.
	(_Fwd_list_node_base& operator=(_Fwd_list_node_base&&)): New.
	(_Fwd_list_node_base(const _Fwd_list_node_base&)): Explicit delete.
	(_Fwd_list_node_base& operator=(const _Fwd_list_node_base&)): Likewise.
	(_Fwd_list_impl()): Add noexcept qualification.
	(_Fwd_list_impl(const _Node_alloc_type&)): Delete.
	(_Fwd_list_impl(_Fwd_list_impl&&)): New, default.
	(_Fwd_list_impl(_Fwd_list_impl&&, _Node_alloc_type&&)): New.
	(_Fwd_list_base()): Default.
	(_Fwd_list_base(_Fwd_list_base&&, _Node_alloc_type&&, true_type)): New.
	(_Fwd_list_base(_Fwd_list_base&&)): Default.
	(forward_list<>()): Default.
	(forward_list<>(forward_list&&)): Default.
	(forward_list(forward_list&&, _Node_alloc_type&&, false_type)): New.
	(forward_list(forward_list&&, _Node_alloc_type&&, true_type)): New.
	(forward_list(forward_list&&, const _Alloc&)): Adapt to use latters.
	* include/bits/forward_list.tcc
	(_Fwd_list_base(_Fwd_list_base&&, _Node_alloc_type&&)): Adapt to use
	_M_impl._M_head move assignment.
	(forward_list<>::merge(forward_list<>&&, _Comp)): Likewise.
	* testsuite/23_containers/forward_list/allocator/default_init.cc: New.

From-SVN: r256439
2018-01-10 16:59:02 +00:00
Paolo Carlini
143aa5cc4a re PR c++/81055 (ICE with invalid initializer for array new)
/cp
2018-01-10  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/81055
	* init.c (build_vec_init): Avoid building an INIT_EXPR with
	error_mark_node as second argument.

/testsuite
2018-01-10  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/81055
	* g++.dg/cpp0x/new2.C: New.

From-SVN: r256438
2018-01-10 16:37:22 +00:00
Ian Lance Taylor
389578d7a6 re PR c/82922 (Request: add -Wstrict-prototypes to -Wextra as K&R style is obsolescent)
PR c/82922

    runtime, syscall: use full prototypes in C code
    
    Based on patch by Martin Sebor.
    
    Reviewed-on: https://go-review.googlesource.com/86815

From-SVN: r256437
2018-01-10 15:42:23 +00:00
H.J. Lu
cd3410cc7b i386: Also adjust stack frame for stack slot alignment
We should also adjust stack_realign_offset for the largest alignment of
stack slot actually used when stack realignment isn't needed.  This is
required to keep stack frame properly aligned to satisfy the largest
alignment of stack slots.

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

gcc/

	PR target/83735
	* config/i386/i386.c (ix86_compute_frame_layout): Always adjust
	stack_realign_offset for the largest alignment of stack slot
	actually used.
	(ix86_find_max_used_stack_alignment): New function.
	(ix86_finalize_stack_frame_flags): Use it.  Set
	max_used_stack_alignment if we don't realign stack.
	* config/i386/i386.h (machine_function): Add
	max_used_stack_alignment.

gcc/testsuite/

	PR target/83735
	* gcc.target/i386/pr83735.c: New test.

From-SVN: r256436
2018-01-10 07:37:49 -08:00
Ian Lance Taylor
447fb74d97 exp: remove exp/proxy and exp/terminal packages
The exp/proxy package was removed from the master library in
    https://golang.org/cl/6461056 (August, 2012).
    
    The exp/terminal package was removed from the master library in
    https://golang.org/cl/5970044 (March, 2012).
    
    I'm not sure why they lingered in the gofrontend copy, but let's
    finally remove them now.
    
    Reviewed-on: https://go-review.googlesource.com/87138

From-SVN: r256435
2018-01-10 15:37:45 +00:00
Christophe Lyon
227e57986a [ARM] Add -mbranch-cost option, and update a few tests
2018-01-10  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/
	* config/arm/arm.opt (-mbranch-cost): New option.
	* config/arm/arm.h (BRANCH_COST): Take arm_branch_cost into
	account.

	gcc/testsuite/
	* lib/target-supports.exp (check_effective_target_branch_cost):
	New function.
	* gcc.dg/builtin-bswap-7.c: Use branch_cost effective target.
	* gcc.dg/pr21643.c: Likewise.
	* gcc.dg/pr46309.c: Likewise.
	* gcc.dg/tree-ssa/phi-opt-11.c: Likewise.
	* gcc.dg/tree-ssa/phi-opt-2.c: Likewise.
	* gcc.dg/tree-ssa/reassoc-32.c: Likewise.
	* gcc.dg/tree-ssa/reassoc-33.c: Likewise.
	* gcc.dg/tree-ssa/reassoc-34.c: Likewise.
	* gcc.dg/tree-ssa/reassoc-35.c: Likewise.
	* gcc.dg/tree-ssa/reassoc-36.c: Likewise.
	* gcc.dg/tree-ssa/ssa-ifcombine-13.c: Likewise.
	* gcc.dg/tree-ssa/ssa-ifcombine-ccmp-1.c: Likewise.
	* gcc.dg/tree-ssa/ssa-ifcombine-ccmp-2.c: Likewise.
	* gcc.dg/tree-ssa/ssa-ifcombine-ccmp-3.c: Likewise.
	* gcc.dg/tree-ssa/ssa-ifcombine-ccmp-4.c: Likewise.
	* gcc.dg/tree-ssa/ssa-ifcombine-ccmp-5.c: Likewise.
	* gcc.dg/tree-ssa/ssa-ifcombine-ccmp-6.c: Likewise.

From-SVN: r256434
2018-01-10 16:34:33 +01:00
Ian Lance Taylor
d0ac0d52e9 cmd/go: check for another GCC error message
GCC always recognizes the -fsplit-stack option, but then tests whether
    it is supported by the selected target. If not, it reports
        cc1: error: ‘-fsplit-stack’ is not supported by this compiler configuration
    Check for that error message when deciding whether a compiler option works.
    
    Reviewed-on: https://go-review.googlesource.com/87137

From-SVN: r256433
2018-01-10 15:18:55 +00:00
Segher Boessenkool
8c6e19c1c2 rs6000: Wrap diff of immediates in const (PR83629)
In various of our 32-bit load_toc patterns we take the difference of
two immediates (labels) as a term to something bigger; but this isn't
canonical RTL, it needs to be wrapped in CONST.


	PR target/83629
	* config/rs6000/rs6000.md (load_toc_v4_PIC_2, load_toc_v4_PIC_3b,
	load_toc_v4_PIC_3c): Wrap const term in CONST RTL.

testsuite/
	PR target/83629
	* gcc.target/powerpc/pr83629.c: New testcase.

From-SVN: r256432
2018-01-10 16:13:07 +01:00
Ian Lance Taylor
c9edeca8b8 runtime: fix makemap calls in __go_construct_map
The signature of makemap changed with the update to 1.10beta1,
    but I forgot to update the call from C code.
    
    Reviewed-on: https://go-review.googlesource.com/87135

From-SVN: r256431
2018-01-10 15:04:21 +00:00
Richard Biener
7b975de05c re PR c/78768 (-Walloca-larger-than and -Wformat-length warnings disabled by -flto)
2018-01-10  Richard Biener  <rguenther@suse.de>

	PR testsuite/78768
	* gcc.dg/pr78768.c: Un-XFAIL.

From-SVN: r256430
2018-01-10 14:51:07 +00:00
Richard Biener
e02a5f63dd re PR debug/82425 (gcc.dg/guality/inline-params-2.c fail)
2018-01-10  Richard Biener  <rguenther@suse.de>

	PR debug/82425
	* gcc.dg/guality/inline-params-2.c: Un-XFAIL for slim LTO.

From-SVN: r256429
2018-01-10 14:41:34 +00:00
Richard Biener
31a3f58f9b re PR debug/83765 (LTO bootstrap with Ada fails)
2018-01-10  Richard Biener  <rguenther@suse.de>

	PR debug/83765
	* dwarf2out.c (gen_subprogram_die): Hoist old_die && declaration
	early out so it also covers the case where we have a non-NULL
	origin.

From-SVN: r256428
2018-01-10 14:23:29 +00:00
Richard Sandiford
6737facbb3 Don't use permutes for single-element accesses (PR83753)
After cunrolling the inner loop, the remaining loop in the testcase
has a single 32-bit access and a group of 64-bit accesses.  We first
try to vectorise at 128 bits (VF 4), but decide not to for cost reasons.
We then try with 64 bits (VF 2) instead.  This means that the group
of 64-bit accesses uses a single-element vector, which is deliberately
supported as of r251538.  We then try to create "permutes" for these
single-element vectors and fall foul of:

	      for (i = 0; i < 6; i++)
		sel[i] += exact_div (nelt, 2);

in vect_grouped_store_supported, since nelt==1.

Maybe we shouldn't even be trying to vectorise statements in the
single-element case, and instead just copy the scalar statement
for each member of the group.  But until then, this patch treats
non-strided grouped accesses as VMAT_CONTIGUOUS if no permutation
is necessary.

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

gcc/
	PR tree-optimization/83753
	* tree-vect-stmts.c (get_group_load_store_type): Use VMAT_CONTIGUOUS
	for non-strided grouped accesses if the number of elements is 1.

gcc/testsuite/
	PR tree-optimization/83753
	* gcc.dg/torture/pr83753.c: New test.

From-SVN: r256427
2018-01-10 13:07:54 +00:00
Janne Blomqvist
e10e60cb6e PR 83740 Wrong string length type in bounds check
This patch fixes up the formatting and corrects the PR number in the
ChangeLog for r256425.

gcc/fortran/ChangeLog:

2018-01-10  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/83740
	* trans-array.c (gfc_trans_array_ctor_element): Fix formatting.

From-SVN: r256426
2018-01-10 13:34:45 +02:00
Janne Blomqvist
85c2c761f4 PR 84740 Wrong string length type in bounds check
Need to convert the RHS to the type of the LHS when assigning.

Regtested on x86_64-pc-linux-gnu, committed as obvious.

gcc/fortran/ChangeLog:

2018-01-10  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/84740
	* trans-array.c (gfc_trans_array_ctor_element): Convert RHS to the
	LHS type when assigning.

From-SVN: r256425
2018-01-10 13:18:31 +02:00
Jan Hubicka
f6aa5171a1 re PR target/81616 (Update -mtune=generic for the current Intel and AMD processors)
PR target/81616
	* i386.c (ix86_vectorize_builtin_gather): Check TARGET_USE_GATHER.
	* i386.h (TARGET_USE_GATHER): Define.
	* x86-tune.def (X86_TUNE_USE_GATHER): New.

From-SVN: r256424
2018-01-10 11:02:55 +00:00
Jan Hubicka
1fe399e4a9 avx2-gather-1.c: Add -march.
* gcc.target/i386/avx2-gather-1.c: Add -march.
	* gcc.target/i386/avx2-gather-2.c: Add -march.
	* gcc.target/i386/avx2-gather-3.c: Add -march.
	* gcc.target/i386/avx2-gather-4.c: Add -march.
	* gcc.target/i386/avx2-gather-5.c: Add -march.
	* gcc.target/i386/avx2-gather-6.c: Add -march.
	* gcc.target/i386/avx512f-gather-1.c: Add -march.
	* gcc.target/i386/avx512f-gather-2.c: Add -march.
	* gcc.target/i386/avx512f-gather-3.c: Add -march.
	* gcc.target/i386/avx512f-gather-4.c: Add -march.
	* gcc.target/i386/avx512f-gather-5.c: Add -march.
	* gcc.target/i386/avx512f-i32gatherd512-1.c: Add -march.
	* gcc.target/i386/avx512f-i32gatherd512-2.c: Add -march.
	* gcc.target/i386/avx512f-i32gatherpd512-1.c: Add -march.
	* gcc.target/i386/avx512f-i32gatherpd512-2.c: Add -march.
	* gcc.target/i386/avx512f-i32gatherps512-1.c: Add -march.

From-SVN: r256423
2018-01-10 11:01:25 +00:00
Martin Liska
3ff0dc17a4 Clean up partitioning in try_optimize_cfg (PR bootstrap/82831).
2018-01-10  Martin Liska  <mliska@suse.cz>

	PR bootstrap/82831
	* basic-block.h (CLEANUP_NO_PARTITIONING): New define.
	* bb-reorder.c (pass_reorder_blocks::execute): Do not clean up
	partitioning.
	* cfgcleanup.c (try_optimize_cfg): Fix up partitioning if
	CLEANUP_NO_PARTITIONING is not set.

From-SVN: r256422
2018-01-10 10:54:20 +00:00
Richard Sandiford
2072a31956 Mostly revert r254296
r254296 added support for (const ...) wrappers around vectors,
but in the end the agreement was to use a variable-length
encoding of CONST_VECTOR (and VECTOR_CST) instead.  This patch
therefore reverts the bits that are no longer needed.

The rtl.texi part isn't a full revert, since r254296 also updated the
documentation to mention unspecs in address calculations, and to relax
the requirement that the mode had to be Pmode.

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

gcc/
	* doc/rtl.texi: Remove documentation of (const ...) wrappers
	for vectors, as a partial revert of r254296.
	* rtl.h (const_vec_p): Delete.
	(const_vec_duplicate_p): Don't test for vector CONSTs.
	(unwrap_const_vec_duplicate, const_vec_series_p): Likewise.
	* expmed.c (make_tree): Likewise.

	Revert:
	* common.md (E, F): Use CONSTANT_P instead of checking for
	CONST_VECTOR.
	* emit-rtl.c (gen_lowpart_common): Use const_vec_p instead of
	checking for CONST_VECTOR.

From-SVN: r256421
2018-01-10 08:46:07 +00:00
Jan Hubicka
d89f01a08e re PR rtl-optimization/83575 (ICE: verify_flow_info failed (error: multiple hot/cold transitions found))
PR middle-end/83575
	* predict.c (force_edge_cold): Handle in more sane way edges
	with no prediction.

From-SVN: r256420
2018-01-10 08:19:52 +00:00
Ian Lance Taylor
692aefcd56 runtime: work around escaping closure in export_test.go
When compiling runtime, it is not allowed for local variables
    and closures to be heap allocated. In one test, there is a go
    statement with a closure. In the gc compiler, it distinguishes
    capturing variable by value vs. by address, and rewrites it to
    passing the captured values as arguments. Currently we don't
    have this, and the escape analysis decides to heap allocate the
    closure and also the captured variables, which is not allowed.
    Work around it by passing the variables explicitly.
    
    This is in preparation of turning on escape analysis for the
    runtime.
    
    Reviewed-on: https://go-review.googlesource.com/86245

From-SVN: r256419
2018-01-10 05:26:29 +00:00
Ian Lance Taylor
e4876be5f5 runtime: noescape some functions/variables
This is in preparation of turning on escape analysis for the
    runtime.
    
    - In gccgo, systemstack is implemented with mcall, which is not
      go:noescape. Wrap the closure in noescape so the escape analysis
      does not think it escapes.
    
    - Mark some C functions go:noescape. They do not leak arguments.
    
    - Use noescape function to make a few local variables' addresses
      not escape. The escape analysis cannot figure out because they
      are assigned to pointer indirections.
    
    Reviewed-on: https://go-review.googlesource.com/86244

From-SVN: r256418
2018-01-10 05:15:52 +00:00
Ian Lance Taylor
fe9e170268 cmd/go: add AIX support
For gccgo code avoid --whole-archive and -(.  Use -blibpath instead of
    -rpath.
    
    Reviewed-on: https://go-review.googlesource.com/86956

From-SVN: r256417
2018-01-10 05:12:39 +00:00
Ian Lance Taylor
76e723a313 libgo: add aix build tags
Reviewed-on: https://go-review.googlesource.com/86936

From-SVN: r256416
2018-01-10 04:53:55 +00:00
GCC Administrator
5862924dc8 Daily bump.
From-SVN: r256415
2018-01-10 00:16:17 +00:00
Ian Lance Taylor
7117ebbd34 compiler: use temporary variable for stack allocation
Currently, allocation expression that can be allocated on stack
    is implemented with __builtin_alloca, which turns into
    __morestack_allocate_stack_space, which may call C malloc. This
    may be slow. Also if this happens during certain runtime
    functions (e.g. write barrier), bad things might happen (when
    the escape analysis is enabled for the runtime). Make a temporary
    variable on stack for the allocation instead.
    
    Also remove the write barrier in the assignment in building heap
    expression when it is stack allocated.
    
    Reviewed-on: https://go-review.googlesource.com/86242

From-SVN: r256412
2018-01-09 23:56:54 +00:00
Ian Lance Taylor
4a59d4472b compiler: set captured variable address to nonescape until further flooded
The escape analysis models closures by flowing captured variable
    address to the closure node. However, the escape state for the
    address expressions remained unset as ESCAPE_UNKNOWN. This
    caused later passes to conclude that the address escapes. Fix this by
    setting its escape state to ESCAPE_NONE first. If it escapes
    (because the closure escapes), the flood phase will set its
    escape state properly.
    
    Reviewed-on: https://go-review.googlesource.com/86240

From-SVN: r256411
2018-01-09 23:43:23 +00:00
Ian Lance Taylor
47e8a22a17 compiler: stack allocate defer thunk
Defer statement may need to allocate a thunk. When it is not
    inside a loop, this can be stack allocated, as it runs before
    the function finishes.
    
    Reviewed-on: https://go-review.googlesource.com/85639

From-SVN: r256410
2018-01-09 23:36:46 +00:00
Joseph Myers
311eca53bd * es.po: Update.
From-SVN: r256408
2018-01-09 23:36:06 +00:00
Ian Lance Taylor
92bb02927b compiler: make non-escaping Bound_method_expression not heap allocate
Bound_method_expression needs a closure. Stack allocate the
    closure when it does not escape.
    
    Reviewed-on: https://go-review.googlesource.com/85638

From-SVN: r256407
2018-01-09 23:33:49 +00:00
Ian Lance Taylor
eb80a362bc compiler: move some escape check to Mark_address_taken
Move some check of escape state earlier, from get_backend to
    Mark_address_taken. So we can reclaim escape analysis Nodes
    before kicking off the backend (not done in this CL). Also it
    makes it easier to check variables and closures do not escape
    when the escape analysis is run for the runtime package (also
    not done in this CL).
    
    Reviewed-on: https://go-review.googlesource.com/85735

From-SVN: r256406
2018-01-09 23:30:37 +00:00
Ian Lance Taylor
41a6da2de5 compiler: support go:noescape cross package
CL 83876 added support of go:noescape pragma, but it only works
    for functions called from the same package. The pragma did not
    take effect for exported functions that are not called from
    the same package. The reason is that top level function
    declarations are not traversed, and only reached from calls
    from other functions. This CL adds this support. The Traverse
    class is extended with a mode to traverse function declarations.
    
    Reviewed-on: https://go-review.googlesource.com/85637

From-SVN: r256405
2018-01-09 23:26:27 +00:00
Ian Lance Taylor
e732b42485 compiler: stack allocate non-escaping makeslice
If we're making a slice of constant size that does not need to
    escape, allocate it on stack.
    
    In lower, do not create temporaries for constant size makeslice,
    so that it is easier to detect the slice is constant size later.
    
    Reviewed-on: https://go-review.googlesource.com/85636

From-SVN: r256404
2018-01-09 23:21:38 +00:00