1. 20 Sep, 2016 24 commits
  2. 19 Sep, 2016 16 commits
    • re PR c++/77434 (warn about suspicious precedence of ternary operator (?:)) · 144a96e4
      gcc:
      2016-09-19  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              PR c++/77434
              * doc/invoke.texi: Document -Wint-in-bool-context.
      
      c-family:
      2016-09-19  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              PR c++/77434
              * c.opt (Wcond-in-bool-context): New warning.
              * c-common.c (c_common_truthvalue_conversion): Warn on integer
              constants in boolean context.
      
      cp:
      2016-09-19  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              PR c++/77434
              * cvt.c (cp_convert_and_check): Suppress Wint-in-bool-context here.
      
      testsuite:
      2016-09-19  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              PR c++/77434
              * c-c++-common/Wint-in-bool-context.c: New test.
      
      From-SVN: r240251
      Bernd Edlinger committed
    • re PR other/77421 (Bugs found in GCC with the help of PVS-Studio) · 3385d437
      2016-09-19  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              PR middle-end/77421
              * dwarf2out.c (output_loc_operands): Fix an assertion.
      
      From-SVN: r240250
      Bernd Edlinger committed
    • Define TS 18661-1 CR_DECIMAL_DIG in <float.h>. · 1f2071fa
      TS 18661-1 defines a macro CR_DECIMAL_DIG in <float.h>, for the number
      of decimal digits for which conversions between decimal character
      strings and (IEEE) binary formats, in both directions, are correctly
      rounded.  This patch implements support for this macro in GCC's
      <float.h>.
      
      The definition __UINTMAX_MAX__ is the right one for GCC's conversions
      of floating constants, since I made those use MPFR to make them
      correctly rounding.  The macro also covers standard library functions
      such as strtod and printf.  The definition is also correct for current
      glibc.  If any targets' libcs support correct rounding in a way that
      conforms to TS 18661-1 with a smaller value of CR_DECIMAL_DIG, making
      <float.h> reflect that could not be done in isolation without changes
      to the interpretation of floating constants as well, since a smaller
      CR_DECIMAL_DIG requires double rounding of floating constants (first
      to CR_DECIMAL_DIG decimal digits, then to the desired binary format).
      
      Boostrapped with no regressions on x86_64-pc-linux-gnu.
      
      gcc:
      	* ginclude/float.h [__STDC_WANT_IEC_60559_BFP_EXT__]
      	(CR_DECIMAL_DIG): New macro.
      
      gcc/testsuite:
      	* gcc.dg/cr-decimal-dig-1.c: New test.
      
      From-SVN: r240249
      Joseph Myers committed
    • Make max_align_t respect _Float128. · 63012d9a
      The _FloatN, _FloatNx, _DecimalN and _DecimalNx types are specified in
      such a way that they are basic types, meaning that max_align_t must be
      at least as aligned as those types.
      
      On 32-bit x86, max_align_t is currently 8-byte aligned, but
      _Decimal128 and _Float128 are 16-byte aligned, so the alignment of
      max_align_t needs to increase to meet the standard requirements for
      these types.
      
      This patch implements such an increase.  Because max_align_t needs to
      be usable for C++ as well as for C, <stddef.h> can't actually refer to
      _Float128, but needs to use __float128 (or some other notation for the
      type) instead.  And since __float128 is architecture-specific, there
      isn't a preprocessor conditional that means "__float128 is available"
      (whereas one could test __FLT128_MANT_DIG__ to see if _Float128 is
      available; __SIZEOF_FLOAT128__ is available on x86 only).  But I
      believe the only case that actually has an alignment problem here is
      32-bit x86, and <stddef.h> already has lots of conditional specific to
      particular architectures or OSes, so this patch uses a conditional on
      __i386__; that also is the minimal change that ensures neither size
      nor alignment of max_align_t is changed in any case other than where
      it is necessary.  If any other architectures turn out to have such an
      issue, it will show up as failures of one of the testcases added by
      this patch.
      
      Such an increase is of course an ABI change, but a reasonably safe
      one, in that max_align_t doesn't tend to appear in library interfaces
      (rather, it's something to use when writing allocators and similar
      code; most matches found on codesearch.debian.net look like copies of
      the gnulib stddef.h module rather than anything actually using
      max_align_t at all).
      
      max_align_t_align has a corresponding change (adding _Float128 to the
      types considered).
      
      (I think glibc malloc alignment should also increase to 16-byte on
      32-bit x86 so it works for allocating objects of these types, which is
      now straightforward given the fix made for 32-bit powerpc.)
      
      Bootstrapped with no regressions on x86_64-pc-linux-gnu, and
      spot-tested with -m32 that the new float128-align.c test now compiles
      where previously it didn't.
      
      gcc:
      	* ginclude/stddef.h (max_align_t) [__i386__]: Add __float128
      	element.
      
      gcc/c-family:
      	* c-common.c (max_align_t_align): Also consider alignment of
      	float128_type_node.
      
      gcc/testsuite:
      	* gcc.dg/float128-align.c, gcc.dg/float128x-align.c,
      	gcc.dg/float16-align.c, gcc.dg/float32-align.c,
      	gcc.dg/float32x-align.c, gcc.dg/float64-align.c,
      	gcc.dg/float64x-align.c, gcc.dg/floatn-align.h: New tests.
      
      From-SVN: r240248
      Joseph Myers committed
    • re PR rtl-optimization/77416 (LRA rematerializing use of CA reg across function call) · 02410826
      2016-09-19  Vladimir Makarov  <vmakarov@redhat.com>
      
      	PR rtl-optimization/77416
      	* lra-remat.c (operand_to_remat): Process hard coded insn
      	registers.
      
      2016-09-19  Vladimir Makarov  <vmakarov@redhat.com>
      
      	PR rtl-optimization/77416
      	* gcc.target/powerpc/pr77416.c: New.
      
      From-SVN: r240247
      Vladimir Makarov committed
    • Fix PR c++/77639 (ICE during error recovery) · 6101a7ab
      gcc/cp/ChangeLog:
      
      	PR c++/77639
      	* parser.c (cp_parser_class_head): When
      	processing_template_parmlist, don't assume that the
      	class-head may start an explicit specialization.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/77639
      	* g++.dg/template/error-recovery4.C: New test.
      
      From-SVN: r240245
      Patrick Palka committed
    • libstdc++/77645 fix deque and vector xmethods for Python 3 · d0f59435
      	PR libstdc++/77645
      	* python/libstdcxx/v6/xmethods.py (DequeWorkerBase.__init__)
      	(DequeWorkerBase.index, VectorWorkerBase.get): Cast results of
      	division to int to work with Python 3.
      
      From-SVN: r240241
      Jonathan Wakely committed
    • pr57558-1.c: Use unsigned int instead of unsigned long. · 1993ff76
      	gcc/testsuite
      	* gcc.dg/vect/pr57558-1.c: Use unsigned int instead of unsigned long.
      
      From-SVN: r240239
      Bin Cheng committed
    • [simplify-rtx] (GTU (PLUS a C) (C - 1)) --> (LTU a -C) · 5fa9e644
      	* simplify-rtx.c (simplify_relational_operation_1): Add transformation
      	(GTU (PLUS a C) (C - 1)) --> (LTU a -C).
      
      	* gcc.target/aarch64/gtu_to_ltu_cmp_1.c: New test.
      	* gcc.target/aarch64/gtu_to_ltu_cmp_2.c: New test.
      
      From-SVN: r240238
      Kyrylo Tkachov committed
    • Make libstdc++ tests FAIL on Python errors · ee1ab3e3
      	* testsuite/lib/gdb-test.exp (gdb-test): Fail if Python error occurs.
      
      From-SVN: r240237
      Jonathan Wakely committed
    • Fix lra_p text · f37cb70b
      
      	* target.def (lra_p): Wordsmithing.
      	* doc/tm.texi: Regenerate.
      
      From-SVN: r240236
      Segher Boessenkool committed
    • Improve pretty printer for std::variant · a0a1009a
      	* python/libstdcxx/v6/printers.py (SingleObjContainerPrinter): Allow
      	display_hint to be set by subclasses.
      	(StdVariantPrinter): Use array for display_hint. Adjust output to be
      	more similar to std::any and std::optional output.
      	(register_type_printers): Add type printers for basic_string_view
      	typedefs and experimental::any. Adjust type printers for
      	fundamentals_v1 templates to match fundamentals_v2 and later.
      	* testsuite/libstdc++-prettyprinters/cxx17.cc: New.
      
      From-SVN: r240234
      Jonathan Wakely committed
    • libstdc++/77645 Fix xmethods for std::list · 019270bc
      	PR libstdc++/77645
      	* python/libstdcxx/v6/xmethods.py (DequeWorkerBase.index): Rename
      	argument.
      	(ListWorkerBase.get_value_from_node): Define new method.
      	(ListFrontWorker.__call__, ListBackWorker.__call__): Use it.
      
      From-SVN: r240233
      Jonathan Wakely committed
    • re PR ipa/77587 (C compiler produces incorrect stack alignment with __attribute__((weak))) · fc15d9ec
      	PR target/77587
      	* cgraph.c (cgraph_node::rtl_info): Pass &avail to
      	ultimate_alias_target call, return NULL if avail < AVAIL_AVAILABLE.
      	Call ultimate_alias_target just once, not up to 4 times.
      
      	* gcc.dg/pr77587.c: New test.
      	* gcc.dg/pr77587a.c: New file.
      
      Co-Authored-By: Jan Hubicka <jh@suse.cz>
      
      From-SVN: r240232
      Jakub Jelinek committed
    • libcaf.h: Add caf_reference_type. · 3c9f5092
      libgfortran/ChangeLog:
      
      2016-09-19  Andre Vehreschild  <vehre@gcc.gnu.org>
      
      	* caf/libcaf.h: Add caf_reference_type.
      	* caf/mpi.c: Adapted signature of caf_register().
      	* caf/single.c (struct caf_single_token): Added to keep the pointer
      	to the memory registered and array descriptor.
      	(caf_internal_error): Added convenience interface.
      	(_gfortran_caf_register): Adapted to work with caf_single_token and
      	return memory in the array descriptor.
      	(_gfortran_caf_deregister): Same.
      	(assign_char1_from_char4): Fixed style.
      	(convert_type): Fixed incorrect conversion.
      	(_gfortran_caf_get): Adapted to work with caf_single_token.
      	(_gfortran_caf_send): Same.
      	(_gfortran_caf_sendget): Same.
      	(copy_data): Added to stop repeating it in all _by_ref functions.
      	(get_for_ref): Recursive getting of coarray data using a chain of
      	references.
      	(_gfortran_caf_get_by_ref): Driver for computing the memory needed for
      	the get and checking properties of the operation.
      	(send_by_ref): Same as get_for_ref but for sending data.
      	(_gfortran_caf_send_by_ref): Same like caf_get_by_ref but for sending.
      	(_gfortran_caf_sendget_by_ref): Uses get_by_ref and send_by_ref to
      	implement sendget for reference chains.
      	(_gfortran_caf_atomic_define): Adapted to work with caf_single_token.
      	(_gfortran_caf_atomic_ref): Likewise.
      	(_gfortran_caf_atomic_cas): Likewise.
      	(_gfortran_caf_atomic_op): Likewise.
      	(_gfortran_caf_event_post): Likewise.
      	(_gfortran_caf_event_wait): Likewise.
      	(_gfortran_caf_event_query): Likewise.
      	(_gfortran_caf_lock): Likewise.
      	(_gfortran_caf_unlock): Likewise.
      
      
      gcc/testsuite/ChangeLog:
      
      2016-09-19  Andre Vehreschild  <vehre@gcc.gnu.org>
      
      	* gfortran.dg/coarray/alloc_comp_4.f90: New test.
      	* gfortran.dg/coarray_38.f90:
      	* gfortran.dg/coarray_alloc_comp_1.f08: New test.
      	* gfortran.dg/coarray_alloc_comp_2.f08: New test.
      	* gfortran.dg/coarray_allocate_7.f08: New test.
      	* gfortran.dg/coarray_allocate_8.f08: New test.
      	* gfortran.dg/coarray_allocate_9.f08: New test.
      	* gfortran.dg/coarray_lib_alloc_1.f90: Adapted scan-tree-dumps to expect
      	new caf_register.
      	* gfortran.dg/coarray_lib_alloc_2.f90: Same.
      	* gfortran.dg/coarray_lib_alloc_3.f90: Same.
      	* gfortran.dg/coarray_lib_comm_1.f90: Adapted scan-tree-dumps to expect
      	get_by_refs.
      	* gfortran.dg/coarray_lib_token_3.f90: Same as for coarray_lib_alloc2.
      	* gfortran.dg/coarray_lock_7.f90: Same.
      	* gfortran.dg/coarray_poly_5.f90: Same.
      	* gfortran.dg/coarray_poly_6.f90: Same.
      	* gfortran.dg/coarray_poly_7.f90: Same.
      	* gfortran.dg/coarray_poly_8.f90: Same.
      	* gfortran.dg/coindexed_1.f90: Changed errors expected.
      
      gcc/fortran/ChangeLog:
      
      2016-09-19  Andre Vehreschild  <vehre@gcc.gnu.org>
      
      	* expr.c (gfc_check_assign): Added flag to control whether datatype
      	conversion is allowed.
      	* gfortran.h: Added caf-token-tree to gfc_component.  Changed
      	prototypes mostly to add whether datatype conversion is allowed.
      	* gfortran.texi: Added documentation for the caf_reference_t and the
      	caf_*_by_ref function.
      	* primary.c (caf_variable_attr): Similar to gfc_variable_attr but
      	focused on the needs of coarrays.
      	(gfc_caf_attr): Same.
      	* resolve.c (resolve_ordinary_assign): Set the conversion allowed
      	flag when not in a coarray.
      	* trans-array.c (gfc_array_init_size): Moved setting of array
      	descriptor's datatype before the alloc, because caf_register needs it.
      	(gfc_array_allocate): Changed notion of whether an array is a coarray.
      	(gfc_array_deallocate): Same.
      	(gfc_alloc_allocatable_for_assignment): Added setting of coarray's
      	array descriptor datatype before the register.  And using deregister/
      	register to mimmick a realloc for coarrays.
      	* trans-decl.c (gfc_build_builtin_function_decls): Corrected signatures
      	of old caf-functions and added signature definitions of the _by_ref
      	ones.
      	(generate_coarray_sym_init): Adapted to new caf_register signature.
      	* trans-expr.c (gfc_conv_scalar_to_descriptor): Make sure a constant
      	is translated to an lvalue expression before use in an array
      	descriptor.
      	(gfc_get_ultimate_alloc_ptr_comps_caf_token): New function.  Get the
      	last allocatable component's coarray token.
      	(gfc_get_tree_for_caf_expr): For top-level object get the coarray
      	token and check for unsupported features.
      	(gfc_get_caf_token_offset): Getting the offset might procude new
      	statements, which now are stored in the pre and post of the current se.
      	(gfc_caf_get_image_index): For this image return a call to
      	caf_this_image.
      	(expr_may_alias_variables): Check that the result is set for testing
      	its properties.
      	(alloc_scalar_allocatable_for_assignment): Added auto allocation of
      	coarray components.
      	(gfc_trans_assignment_1): Rewrite an assign to a coarray object to
      	be a sendget.
      	* trans-intrinsic.c (conv_caf_vector_subscript_elem): Corrected
      	wrong comment.
      	(compute_component_offset): Compute the correct offset a structure
      	member.
      	(conv_expr_ref_to_caf_ref): Convert to a chain of refs into
      	caf_references.
      	(gfc_conv_intrinsic_caf_get): Call caf_get_by_ref instead of caf_get.
      	(conv_caf_send): Call caf_*_by_ref for coarrays that need
      	reallocation.
      	(gfc_conv_intrinsic_function): Adapted to new signuature of the caf
      	drivers.
      	(conv_intrinsic_atomic_op): Add pre and post statements correctly.
      	(conv_intrinsic_atomic_ref): Same.
      	(conv_intrinsic_atomic_cas): Same.
      	(conv_intrinsic_event_query): Same.
      	* trans-stmt.c (gfc_trans_lock_unlock): Same.
      	(gfc_trans_event_post_wait): Same.
      	(gfc_trans_allocate): Support allocation of allocatable coarrays.
      	(gfc_trans_deallocate): And there deallocation.
      	* trans-types.c (gfc_typenode_for_spec): Added flag to control whether
      	a component is part of coarray.  When so, then add space to store a
      	coarray token.
      	(gfc_build_array_type): Same.
      	(gfc_get_array_descriptor_base): Same.
      	(gfc_get_array_type_bounds): Same.
      	(gfc_sym_type): Same.
      	(gfc_get_derived_type): Same.
      	(gfc_get_caf_reference_type): Declare the caf_reference_type.
      	* trans-types.h: Prototype changes only.
      	* trans.c (gfc_allocate_using_lib): Use the updated caf_register
      	signature.
      	(gfc_allocate_allocatable): Same.
      	(gfc_deallocate_with_status): Same.
      	* trans.h: Defined the runtime types for caf_reference_t and the enums.
      
      From-SVN: r240231
      Andre Vehreschild committed
    • re PR fortran/77584 (Unclassifiable statement error with procedure pointer using… · e79e6763
      re PR fortran/77584 (Unclassifiable statement error with procedure pointer using template named "structure_")
      
      2016-09-19  Fritz Reese  <fritzoreese@gmail.com>
      
      	PR fortran/77584
      	* gcc/fortran/decl.c (match_record_decl, gfc_match_decl_type_spec):
      	Fixes to handling of structure/record from declaration-type-spec.
      
      	* gcc/testsuite/gfortran.dg/dec_structure_15.f90: New testcase.
      
      From-SVN: r240230
      Fritz Reese committed