1. 19 Aug, 2016 21 commits
    • Implement C _FloatN, _FloatNx types. · c65699ef
      ISO/IEC TS 18661-3:2015 defines C bindings to IEEE interchange and
      extended types, in the form of _FloatN and _FloatNx type names with
      corresponding fN/FN and fNx/FNx constant suffixes and FLTN_* / FLTNX_*
      <float.h> macros.  This patch implements support for this feature in
      GCC.
      
      The _FloatN types, for N = 16, 32, 64 or >= 128 and a multiple of 32,
      are types encoded according to the corresponding IEEE interchange
      format (endianness unspecified; may use either the NaN conventions
      recommended in IEEE 754-2008, or the MIPS NaN conventions, since the
      choice of convention is only an IEEE recommendation, not a
      requirement).  The _FloatNx types, for N = 32, 64 and 128, are IEEE
      "extended" types: types extending a narrower format with range and
      precision at least as big as those specified in IEEE 754 for each
      extended type (and with unspecified representation, but still
      following IEEE semantics for their values and operations - and with
      the set of values being determined by the precision and the maximum
      exponent, which means that while Intel "extended" is suitable for
      _Float64x, m68k "extended" is not).  These types are always distinct
      from and not compatible with each other and the standard floating
      types float, double, long double; thus, double, _Float64 and _Float32x
      may all have the same ABI, but they are three still distinct types.
      The type names may be used with _Complex to construct corresponding
      complex types (unlike __float128, which acts more like a typedef name
      than a keyword - thus, this patch may be considered to fix PR
      c/32187).  The new suffixes can be combined with GNU "i" and "j"
      suffixes for constants of complex types (e.g. 1.0if128, 2.0f64i).
      
      The set of types supported is implementation-defined.  In this GCC
      patch, _Float32 is SFmode if that is suitable; _Float32x and _Float64
      are DFmode if that is suitable; _Float128 is TFmode if that is
      suitable; _Float64x is XFmode if that is suitable, and otherwise
      TFmode if that is suitable.  There is a target hook to override the
      choices if necessary.  "Suitable" means both conforming to the
      requirements of that type, and supported as a scalar type including in
      libgcc.  The ABI is whatever the back end does for scalars of that
      mode (but note that _Float32 is passed without promotion in variable
      arguments, unlike float).  All the existing issues with exceptions and
      rounding modes for existing types apply equally to the new type names.
      
      No GCC port supports a floating-point format suitable for _Float128x.
      Although there is HFmode support for ARM and AArch64, use of that for
      _Float16 is not enabled.  Supporting _Float16 would require additional
      work on the excess precision aspects of TS 18661-3: there are new
      values of FLT_EVAL_METHOD, which are not currently supported in GCC,
      and FLT_EVAL_METHOD == 0 now means that operations and constants on
      types narrower than float are evaluated to the range and precision of
      float.  Implementing that, so that _Float16 gets evaluated with excess
      range and precision, would involve changes to the excess precision
      infrastructure so that the _Float16 case is enabled by default, unlike
      the x87 case which is only enabled for -fexcess-precision=standard.
      Other differences between _Float16 and __fp16 would also need to be
      disentangled.
      
      GCC has some prior support for nonstandard floating-point types in the
      form of __float80 and __float128.  Where these were previously types
      distinct from long double, they are made by this patch into aliases
      for _Float64x / _Float128 if those types have the required properties.
      
      In principle the set of possible _FloatN types is infinite.  This
      patch hardcodes the four such types for N <= 128, but with as much
      code as possible using loops over types to minimize the number of
      places with such hardcoding.  I don't think it's likely any further
      such types will be of use in future (or indeed that formats suitable
      for _Float128x will actually be implemented).  There is a corner case
      that all _FloatN, for N >= 128 and a multiple of 32, should be treated
      as keywords even when the corresponding type is not supported; I
      intend to deal with that in a followup patch.
      
      Tests are added for various functionality of the new types, mostly
      using type-generic headers.  The tests use dg-add-options to pass any
      extra options needed to enable the types; this is wired up to use the
      same options as for __float128 on powerpc to enable _Float128 and
      _Float64x, and effective-target keywords for runtime support do the
      same hardware test as for __float128 to make sure the VSX instructions
      generated by those options are supported.  (Corresponding additions
      would be needed for _Float16 on ARM as well if that were enabled with
      -mfp16-format=ieee required to use it rather than unconditionally
      available.  Of course, -mfp16-format=alternative enables use of a
      format which is not compatible with the requirements of the _Float16
      type.)
      
      C++ note: no support for the new types or constant suffixes is added
      for C++.  C++ decimal floating-point support was very different from
      the C support, using class types, and the same may well apply to any
      future C++ bindings for IEEE interchange and extended types.  There is
      a case, however, for supporting at least *f128 constants in C++, so
      that code using __float128 can use the newer style for constants
      throughout rather than needing to use the older *q constants in C++.
      Also, if built-in functions are added that may provide a way in which
      the types could leak into C++ code.
      
      Fortran note: the float128_type_node used in the Fortran front end is
      renamed to gfc_float128_type_node, since the semantics are different:
      in particular, if long double has binary128 format, then the new
      language-independent float128_type_node is a distinct type that also
      has binary128 format, but the Fortran node is expected to be NULL in
      that case.  Likewise, Fortran's complex_float128_type_node is renamed
      to gfc_complex_float128_type_node.
      
      PowerPC note: the back end had an inconsistency that if TFmode was
      binary128, *q constants were TFmode instead of KFmode but __float128
      was KFmode.  This patch follows the same logic as for *q constants, so
      that _Float128 prefers TFmode (and __float128 becomes an alias for
      _Float128).
      
      ARM note: __fp16 is promoted to double (by convert_arguments) when
      passed without a prototype / in variable arguments.  But this is only
      about the argument promotion; it is not handled as promoting in
      c-common.c:self_promoting_args_p / c-typeck.c:c_type_promotes_to,
      meaning that a K&R function definition for an argument of type __fp16
      corresponds to a prototype with an argument of that type, not to one
      with an argument of type double, whereas a float argument in a K&R
      function definition corresponds to a double prototype argument - and
      the same functions are also what's involved in making va_arg give a
      warning and generate a call to abort when called with type float.
      This is preserved by this patch, while arranging for _Float16 not to
      be promoted when passed without a prototype / in variable arguments
      (the promotion of float being considered a legacy feature, not applied
      to any new types in C99 or later).
      
      TS 18661-3 extends the set of decimal floating-point types similarly,
      and adds new constant suffixes for the existing types, but this patch
      does not do anything regarding that extension.
      
      This patch does nothing regarding built-in functions, although
      type-generic functions such as __builtin_isinf work for the new types
      and associated tests are included.  There are at least two levels of
      built-in function support possible for these types.  The minimal
      level, implemented in
      <https://gcc.gnu.org/ml/gcc-patches/2016-06/msg01702.html> (which
      needs updating to use dg-add-options), adds built-in functions similar
      to those x86 has for __float128: __builtin_inf* __builtin_huge_val*,
      __builtin_nan*, __builtin_nans*, __builtin_fabs*, __builtin_copysign*.
      That would be sufficient for glibc to use the *f128 names for built-in
      functions by default with *q used only for backwards compatibility
      when using older GCC versions.  That would also allow c_cpp_builtins's
      flag_building_libgcc code, defining __LIBGCC_%s_FUNC_EXT__, to use
      such suffixes rather than the present code hardcoding logic about
      target-specific constant suffixes and how those relate to function
      suffixes.
      
      Full built-in function support would cover the full range of built-in
      functions for existing floating-point types, adding variants for all
      the new types, except for a few obsolescent functions and
      non-type-generic variants of type-generic functions.  Some but not all
      references to such functions in GCC use macros such as CASE_FLT_FN to
      be type-generic; a fair amount of work would be needed to identify all
      places to update.  Adding all those functions would enable
      optimizations (for constant arguments and otherwise) for TS 18661-3
      functions, but it would also substantially expand the enum listing
      built-in functions (and we've had problems with the size of that enum
      in the past), and increase the amount of built-in function
      initialization to do - I don't know what the startup cost involved in
      built-in function initialization is, but it would be something to
      consider when adding such a large set of functions.
      
      There are also a range of optimizations, in match.pd and elsewhere,
      that only operate on the three standard floating-point types.  Ideally
      those would be made generic to all floating-point types, but this
      patch does nothing in that regard.  Special care would be needed
      regarding making sure library functions to which calls are generated
      actually exist.  For example, if sqrt is called on an argument of type
      _Float32, and the result converted to _Float32, this is equivalent to
      doing a square root operation directly on _Float32.  But if the user's
      libm does not have the sqrtf32 function, or the name is not reserved
      because __STDC_WANT_IEC_60559_TYPES_EXT__ was not defined before
      including <math.h>, you can only do that optimization if you convert
      to a call to sqrtf instead.
      
      DECIMAL_DIG now relates to all supported floating-point formats, not
      just float, double and long double; I've raised the question with WG14
      of how this relates to the formula for DECIMAL_DIG in C11 not
      considering this.  TS 18661-3 says it also covers non-arithmetic
      formats only supported by library conversion functions; this patch
      does not add any target hooks to allow for the case where there are
      such formats wider than any supported for arithmetic types (where
      e.g. libc supports conversions involving the binary128 representation,
      but the _Float128 type is not supported).
      
      GCC provides its own <tgmath.h> for some targets.  No attempt is made
      to adapt this to handle the new types.
      
      Nothing is done regarding debug info for the new types (see the
      "Debugger support for __float128 type?" thread on gcc@, Sep/Oct 2015).
      
      No __SIZEOF_*__ macros are added for the new types.
      
      Nothing is done with do_warn_double_promotion.
      
      Nothing is done to include the new types in those determining
      max_align_t, although properly it should be sufficiently aligned for
      any of those types.
      
      The logic for usual arithmetic conversions in c_common_type relies on
      TYPE_PRECISION for floating-point types, which is less than ideal
      (doesn't necessarily correspond to whether one type's values are
      subset of another); looking in more detail at the formats might be
      better.  But since I included code in build_common_tree_nodes to work
      around rs6000 KFmode having precision 113 not 128, I think it should
      work.  Ideally one might have errors in generic code for the case
      where the two types do not have one type's values a subset of the
      other (which is undefined behavior).  But the only case where this can
      actually occur is mixing IBM long double with binary128 on powerpc,
      and rs6000_invalid_binary_op deals with that at present.  TS 18661-3
      does not fully specify the type resulting from the usual arithmetic
      conversions in the case where two _FloatNx types have the same set of
      values; I arranged the code to prefer the greater value of N in that
      case.
      
      The __FP_FAST_FMA* macros are not extended to cover the new types,
      since there are no corresponding built-in functions (if built-in
      fmafN, fmafNx are added, the macros should be extended, and the new
      macros documented).  Also, only a limited set of modes is handled in
      mode_has_fma.
      
      Diagnostics relating to the use of the new types with -pedantic do not
      try to distinguish them from purely nonstandard types such as __int128
      and constant suffixes such as *q.
      
      If you use an unsupported _FloatN / _FloatNx type you get a warning
      about the type defaulting to int after the warning about the type not
      being supported.  That's less than ideal, but it's also a pre-existing
      condition if you use __int128 on a 32-bit system where it's
      unsupported.
      
      Bootstrapped with no regressions on x86_64-pc-linux-gnu.  Other
      back-end changes minimally tested by building cc1 for ia64-linux-gnu,
      powerpc64le-linux-gnu, pdp11-none (the last failed for unrelated
      reasons).
      
      	PR c/32187
      gcc:
      	* tree-core.h (TI_COMPLEX_FLOAT16_TYPE)
      	(TI_COMPLEX_FLOATN_NX_TYPE_FIRST, TI_COMPLEX_FLOAT32_TYPE)
      	(TI_COMPLEX_FLOAT64_TYPE, TI_COMPLEX_FLOAT128_TYPE)
      	(TI_COMPLEX_FLOAT32X_TYPE, TI_COMPLEX_FLOAT64X_TYPE)
      	(TI_COMPLEX_FLOAT128X_TYPE, TI_FLOAT16_TYPE, TI_FLOATN_TYPE_FIRST)
      	(TI_FLOATN_NX_TYPE_FIRST, TI_FLOAT32_TYPE, TI_FLOAT64_TYPE)
      	(TI_FLOAT128_TYPE, TI_FLOATN_TYPE_LAST, TI_FLOAT32X_TYPE)
      	(TI_FLOATNX_TYPE_FIRST, TI_FLOAT64X_TYPE, TI_FLOAT128X_TYPE)
      	(TI_FLOATNX_TYPE_LAST, TI_FLOATN_NX_TYPE_LAST): New enum
      	tree_index values.
      	(NUM_FLOATN_TYPES, NUM_FLOATNX_TYPES, NUM_FLOATN_NX_TYPES): New
      	macros.
      	(struct floatn_type_info): New structure type.
      	(floatn_nx_types): New variable declaration.
      	* tree.h (FLOATN_TYPE_NODE, FLOATN_NX_TYPE_NODE)
      	(FLOATNX_TYPE_NODE, float128_type_node, float64x_type_node)
      	(COMPLEX_FLOATN_NX_TYPE_NODE): New macros.
      	* tree.c (floatn_nx_types): New variable.
      	(build_common_tree_nodes): Initialize _FloatN, _FloatNx and
      	corresponding complex types.
      	* target.def (floatn_mode): New hook.
      	* targhooks.c: Include "real.h".
      	(default_floatn_mode): New function.
      	* targhooks.h (default_floatn_mode): New prototype.
      	* doc/extend.texi (Floating Types): Document _FloatN and _FloatNx
      	types.
      	* doc/sourcebuild.texi (float@var{n}, float@var{n}x): Document new
      	effective-target and dg-add-options keywords.
      	(float@var{n}_runtime, float@var{n}x_runtime, floatn_nx_runtime):
      	Document new effective-target keywords.
      	* doc/tm.texi.in (TARGET_FLOATN_MODE): New @hook.
      	* doc/tm.texi: Regenerate.
      	* ginclude/float.h (LDBL_DECIMAL_DIG): Define to
      	__LDBL_DECIMAL_DIG__, not __DECIMAL_DIG__.
      	[__STDC_WANT_IEC_60559_TYPES_EXT__]: Define macros from TS
      	18661-3.
      	* real.h (struct real_format): Add field ieee_bits.
      	* real.c (ieee_single_format, mips_single_format)
      	(motorola_single_format, spu_single_format, ieee_double_format)
      	(mips_double_format, motorola_double_format)
      	(ieee_extended_motorola_format, ieee_extended_intel_96_format)
      	(ieee_extended_intel_128_format)
      	(ieee_extended_intel_96_round_53_format, ibm_extended_format)
      	(mips_extended_format, ieee_quad_format, mips_quad_format)
      	(vax_f_format, vax_d_format, vax_g_format, decimal_single_format)
      	(decimal_double_format, decimal_quad_format, ieee_half_format)
      	(arm_half_format, real_internal_format: Initialize ieee_bits
      	field.
      	* config/i386/i386.c (ix86_init_builtin_types): Do not initialize
      	float128_type_node.  Set float80_type_node to float64x_type_node
      	if appropriate and long_double_type_node not appropriate.
      	* config/ia64/ia64.c (ia64_init_builtins): Likewise.
      	* config/pdp11/pdp11.c (pdp11_f_format, pdp11_d_format):
      	Initialize ieee_bits field.
      	* config/rs6000/rs6000.c (TARGET_FLOATN_MODE): New macro.
      	(rs6000_init_builtins): Set ieee128_float_type_node to
      	float128_type_node.
      	(rs6000_floatn_mode): New function.
      
      gcc/c:
      	* c-tree.h (cts_floatn_nx): New enum c_typespec_keyword value.
      	(struct c_declspecs): Add field floatn_nx_idx.
      	* c-decl.c (declspecs_add_type, finish_declspecs): Handle _FloatN
      	and _FloatNx type specifiers.
      	* c-parser.c (c_keyword_starts_typename, c_token_starts_declspecs)
      	(c_parser_declspecs, c_parser_attribute_any_word)
      	(c_parser_objc_selector): Use CASE_RID_FLOATN_NX.
      	* c-typeck.c (c_common_type): Handle _FloatN and _FloatNx types.
      	(convert_arguments): Avoid promoting _FloatN and _FloatNx types
      	narrower than double.
      
      gcc/c-family:
      	* c-common.h (RID_FLOAT16, RID_FLOATN_NX_FIRST, RID_FLOAT32)
      	(RID_FLOAT64, RID_FLOAT128, RID_FLOAT32X, RID_FLOAT64X)
      	(RID_FLOAT128X): New enum rid values.
      	(CASE_RID_FLOATN_NX): New macro.
      	* c-common.c (c_common_reswords): Add _FloatN and _FloatNx
      	keywords.
      	(c_common_type_for_mode): Check for _FloatN and _FloatNx and
      	corresponding complex types.
      	(c_common_nodes_and_builtins): For non-C++, register _FloatN and
      	_FloatNx and corresponding complex types.
      	(keyword_begins_type_specifier): Use CASE_RID_FLOATN_NX.
      	* c-cppbuiltin.c (builtin_define_float_constants): Check _FloatN
      	and _FloatNx types for the widest type for determining
      	DECIMAL_DIG.  Define __LDBL_DECIMAL_DIG__ as well as
      	__DECIMAL_DIG__ for long double.  Handle FMA_SUFFIX being NULL.
      	(c_cpp_builtins): Call builtin_define_float_constants for _FloatN
      	and _FloatNx types.
      	* c-lex.c (interpret_float): Handle _FloatN and _FloatNx
      	constants.
      	* c-pretty-print.c (pp_c_floating_constant): Handle _FloatN and
      	_FloatNx types.
      
      gcc/fortran:
      	* trans-types.h (float128_type_node): Rename to
      	gfc_float128_type_node.
      	(complex_float128_type_node): Rename to
      	gfc_complex_float128_type_node.
      	* iso-c-binding.def, trans-intrinsic.c, trans-types.c: All users
      	changed.
      
      gcc/testsuite:
      	* lib/target-supports.exp (check_effective_target_float16)
      	(check_effective_target_float32, check_effective_target_float64)
      	(check_effective_target_float128, check_effective_target_float32x)
      	(check_effective_target_float64x)
      	(check_effective_target_float128x)
      	(check_effective_target_float16_runtime)
      	(check_effective_target_float32_runtime)
      	(check_effective_target_float64_runtime)
      	(check_effective_target_float128_runtime)
      	(check_effective_target_float32x_runtime)
      	(check_effective_target_float64x_runtime)
      	(check_effective_target_float128x_runtime)
      	(check_effective_target_floatn_nx_runtime)
      	(add_options_for_float16, add_options_for_float32)
      	(add_options_for_float64, add_options_for_float128)
      	(add_options_for_float32x, add_options_for_float64x)
      	(add_options_for_float128x): New procedures.
      	* gcc.dg/dfp/floatn.c, gcc.dg/float128-typeof.c,
      	gcc.dg/float128x-typeof.c, gcc.dg/float16-typeof.c,
      	gcc.dg/float32-typeof.c, gcc.dg/float32x-typeof.c,
      	gcc.dg/float64-typeof.c, gcc.dg/float64x-typeof.c,
      	gcc.dg/floatn-arithconv.c, gcc.dg/floatn-errs.c,
      	gcc.dg/floatn-typeof.h, gcc.dg/torture/float128-basic.c,
      	gcc.dg/torture/float128-complex.c,
      	gcc.dg/torture/float128-floath.c, gcc.dg/torture/float128-tg.c,
      	gcc.dg/torture/float128x-basic.c,
      	gcc.dg/torture/float128x-complex.c,
      	gcc.dg/torture/float128x-floath.c, gcc.dg/torture/float128x-tg.c,
      	gcc.dg/torture/float16-basic.c, gcc.dg/torture/float16-complex.c,
      	gcc.dg/torture/float16-floath.c, gcc.dg/torture/float16-tg.c,
      	gcc.dg/torture/float32-basic.c, gcc.dg/torture/float32-complex.c,
      	gcc.dg/torture/float32-floath.c, gcc.dg/torture/float32-tg.c,
      	gcc.dg/torture/float32x-basic.c,
      	gcc.dg/torture/float32x-complex.c,
      	gcc.dg/torture/float32x-floath.c, gcc.dg/torture/float32x-tg.c,
      	gcc.dg/torture/float64-basic.c, gcc.dg/torture/float64-complex.c,
      	gcc.dg/torture/float64-floath.c, gcc.dg/torture/float64-tg.c,
      	gcc.dg/torture/float64x-basic.c,
      	gcc.dg/torture/float64x-complex.c,
      	gcc.dg/torture/float64x-floath.c, gcc.dg/torture/float64x-tg.c,
      	gcc.dg/torture/floatn-basic.h, gcc.dg/torture/floatn-complex.h,
      	gcc.dg/torture/floatn-convert.c, gcc.dg/torture/floatn-floath.h,
      	gcc.dg/torture/floatn-tg.h,
      	gcc.dg/torture/fp-int-convert-float128-ieee-timode.c,
      	gcc.dg/torture/fp-int-convert-float128-ieee.c,
      	gcc.dg/torture/fp-int-convert-float128x-timode.c,
      	gcc.dg/torture/fp-int-convert-float128x.c,
      	gcc.dg/torture/fp-int-convert-float16-timode.c,
      	gcc.dg/torture/fp-int-convert-float16.c,
      	gcc.dg/torture/fp-int-convert-float32-timode.c,
      	gcc.dg/torture/fp-int-convert-float32.c,
      	gcc.dg/torture/fp-int-convert-float32x-timode.c,
      	gcc.dg/torture/fp-int-convert-float32x.c,
      	gcc.dg/torture/fp-int-convert-float64-timode.c,
      	gcc.dg/torture/fp-int-convert-float64.c,
      	gcc.dg/torture/fp-int-convert-float64x-timode.c,
      	gcc.dg/torture/fp-int-convert-float64x.c: New tests.
      	* gcc.dg/torture/fp-int-convert.h (TEST_I_F): Add argument for
      	maximum exponent of floating-point type.  Use it in testing
      	whether 0x8...0 fits in the floating-point type.  Always treat -1
      	(signed 0xf...f) as fitting in the floating-point type.
      	(M_OK1): New macro.
      	* gcc.dg/torture/fp-int-convert-double.c,
      	gcc.dg/torture/fp-int-convert-float.c,
      	gcc.dg/torture/fp-int-convert-float128-timode.c,
      	gcc.dg/torture/fp-int-convert-float128.c,
      	gcc.dg/torture/fp-int-convert-float80-timode.c,
      	gcc.dg/torture/fp-int-convert-float80.c,
      	gcc.dg/torture/fp-int-convert-long-double.c,
      	gcc.dg/torture/fp-int-convert-timode.c: Update calls to TEST_I_F.
      
      libcpp:
      	* include/cpplib.h (CPP_N_FLOATN, CPP_N_FLOATNX)
      	(CPP_N_WIDTH_FLOATN_NX, CPP_FLOATN_SHIFT, CPP_FLOATN_MAX): New
      	macros.
      	* expr.c (interpret_float_suffix): Handle fN, fNx, FN and FNx
      	suffixes.
      
      From-SVN: r239625
      Joseph Myers committed
    • Simplify dg-options for tests using pthreads · 71c54f8e
      	* testsuite/21_strings/basic_string/pthread18185.cc: Use -pthread for
      	*-*-solaris* instead of -pthreads.
      	* testsuite/21_strings/basic_string/pthread4.cc : Likewise.
      	* testsuite/22_locale/locale/cons/12658_thread-1.cc: Likewise.
      	* testsuite/22_locale/locale/cons/12658_thread-2.cc: Likewise.
      	* testsuite/23_containers/list/pthread1.cc: Likewise.
      	* testsuite/23_containers/list/pthread5.cc: Likewise.
      	* testsuite/23_containers/map/pthread6.cc: Likewise.
      	* testsuite/27_io/basic_ofstream/pthread2.cc: Likewise.
      	* testsuite/27_io/basic_ostringstream/pthread3.cc: Likewise.
      	* testsuite/30_threads/shared_mutex/*: Likewise.
      	* testsuite/ext/rope/pthread7-rope.cc: Likewise.
      	* testsuite/tr1/2_general_utilities/shared_ptr/thread/
      	default_weaktoshared.cc: Likewise.
      	* testsuite/tr1/2_general_utilities/shared_ptr/thread/
      	mutex_weaktoshared.cc: Likewise.
      	* testsuite/20_util/shared_ptr/atomic/3.cc: Likewise. Use
      	dg-require-effective-target instead of using -std option.
      	* testsuite/20_util/shared_ptr/thread/default_weaktoshared.cc:
      	Likewise.
      	* testsuite/20_util/shared_ptr/thread/mutex_weaktoshared.cc: Likewise.
      	* testsuite/23_containers/vector/debug/multithreaded_swap.cc:
      	Likewise.
      	* testsuite/30_threads/async/*: Likewise.
      	* testsuite/30_threads/call_once/*: Likewise.
      	* testsuite/30_threads/condition_variable/*: Likewise.
      	* testsuite/30_threads/condition_variable_any/*: Likewise.
      	* testsuite/30_threads/future/*: Likewise.
      	* testsuite/30_threads/lock/*: Likewise.
      	* testsuite/30_threads/mutex/*: Likewise.
      	* testsuite/30_threads/packaged_task/*: Likewise.
      	* testsuite/30_threads/promise/*: Likewise.
      	* testsuite/30_threads/recursive_mutex/*: Likewise.
      	* testsuite/30_threads/recursive_timed_mutex/*: Likewise.
      	* testsuite/30_threads/shared_future/*: Likewise.
      	* testsuite/30_threads/shared_lock/*: Likewise.
      	* testsuite/30_threads/shared_timed_mutex/*: Likewise.
      	* testsuite/30_threads/this_thread/*: Likewise.
      	* testsuite/30_threads/thread/*: Likewise.
      	* testsuite/30_threads/timed_mutex/*: Likewise.
      	* testsuite/30_threads/try_lock/*: Likewise.
      	* testsuite/30_threads/unique_lock/*: Likewise.
      
      From-SVN: r239624
      Jonathan Wakely committed
    • Define std::not_fn for C++17 · e6ee5bfd
      	* doc/xml/manual/status_cxx2017.xml: Update status of not_fn.
      	* doc/html/*: Regenerate.
      	* include/experimental/functional (_Not_fn, not_fn): Match C++17
      	semantics.
      	* include/std/functional (_Not_fn, not_fn): Define for C++17.
      	* testsuite/20_util/not_fn/1.cc: New.
      	* testsuite/experimental/functional/not_fn.cc: Test abstract class.
      	Remove test for volatile-qualified wrapper.
      
      From-SVN: r239623
      Jonathan Wakely committed
    • Define std::atomic<T>::is_always_lock_free for C++17 · 387edf83
      	* include/std/atomic (atomic::is_always_lock_free): Define.
      	* testsuite/29_atomics/atomic/60695.cc: Adjust dg-error lineno.
      	* testsuite/29_atomics/atomic/is_always_lock_free.cc: New.
      	* testsuite/29_atomics/atomic_integral/is_always_lock_free.cc: New.
      	* doc/xml/manual/status_cxx2017.xml: Update status.
      	* doc/html/*: Regenerate.
      
      From-SVN: r239622
      Jonathan Wakely committed
    • Fix ambiguities in C++17 mode · 285ee2fb
      	* include/experimental/tuple (apply): Qualify call to __apply_impl.
      	* include/std/tuple (apply): Likewise.
      	* testsuite/experimental/system_error/value.cc: Fix ambiguities in
      	C++17 mode.
      	* testsuite/experimental/tuple/tuple_size.cc: Likewise.
      	* testsuite/experimental/type_traits/value.cc: Likewise.
      
      From-SVN: r239621
      Jonathan Wakely committed
    • re PR fortran/71014 (associate statement inside omp parallel do appears to… · 1cad9284
      re PR fortran/71014 (associate statement inside omp parallel do appears to disable default private attribute for inner loop indices)
      
      	PR fortran/71014
      	* resolve.c (gfc_resolve): For ns->construct_entities don't save, clear
      	and restore omp state around the resolving.
      
      	* testsuite/libgomp.fortran/pr71014.f90: New test.
      
      From-SVN: r239620
      Jakub Jelinek committed
    • re PR fortran/72744 (ICE in verify_ssa, at tree-ssa.c:1039) · fbdbd4b6
      	PR fortran/72744
      	* gfortran.dg/gomp/pr72744.f90: New test.
      
      From-SVN: r239619
      Jakub Jelinek committed
    • re PR fortran/69281 (gfortran ICE on temporary array in function call with -fstack-arrays -fopenmp) · 94e73c78
      	PR fortran/69281
      	* trans-openmp.c (gfc_trans_omp_parallel, gfc_trans_omp_task,
      	gfc_trans_omp_target): Wrap gfc_trans_omp_code result in an extra
      	BIND_EXPR with its own forced BLOCK.
      
      	* gfortran.dg/gomp/pr69281.f90: New test.
      
      From-SVN: r239618
      Jakub Jelinek committed
    • rdseedintrin.h (_rdseed16_step, [...]): Uglify argument names and/or local… · b5fd0b71
      rdseedintrin.h (_rdseed16_step, [...]): Uglify argument names and/or local variable names in inline functions.
      
      	* config/i386/rdseedintrin.h (_rdseed16_step, _rdseed32_step,
      	_rdseed64_step): Uglify argument names and/or local variable names
      	in inline functions.
      	* config/i386/rtmintrin.h (_xabort): Likewise.
      	* config/i386/avx512vlintrin.h (_mm256_ternarylogic_epi64,
      	_mm256_mask_ternarylogic_epi64, _mm256_maskz_ternarylogic_epi64,
      	_mm256_ternarylogic_epi32, _mm256_mask_ternarylogic_epi32,
      	_mm256_maskz_ternarylogic_epi32, _mm_ternarylogic_epi64,
      	_mm_mask_ternarylogic_epi64, _mm_maskz_ternarylogic_epi64,
      	_mm_ternarylogic_epi32, _mm_mask_ternarylogic_epi32,
      	_mm_maskz_ternarylogic_epi32): Likewise.
      	* config/i386/lwpintrin.h (__llwpcb, __lwpval32, __lwpval64,
      	__lwpins32, __lwpins64): Likewise.
      	* config/i386/avx2intrin.h (_mm_i32gather_pd, _mm_mask_i32gather_pd,
      	_mm256_i32gather_pd, _mm256_mask_i32gather_pd, _mm_i64gather_pd,
      	_mm_mask_i64gather_pd, _mm256_i64gather_pd, _mm256_mask_i64gather_pd,
      	_mm_i32gather_ps, _mm_mask_i32gather_ps, _mm256_i32gather_ps,
      	_mm256_mask_i32gather_ps, _mm_i64gather_ps, _mm_mask_i64gather_ps,
      	_mm256_i64gather_ps, _mm256_mask_i64gather_ps, _mm_i32gather_epi64,
      	_mm_mask_i32gather_epi64, _mm256_i32gather_epi64,
      	_mm256_mask_i32gather_epi64, _mm_i64gather_epi64,
      	_mm_mask_i64gather_epi64, _mm256_i64gather_epi64,
      	_mm256_mask_i64gather_epi64, _mm_i32gather_epi32,
      	_mm_mask_i32gather_epi32, _mm256_i32gather_epi32,
      	_mm256_mask_i32gather_epi32, _mm_i64gather_epi32,
      	_mm_mask_i64gather_epi32, _mm256_i64gather_epi32,
      	_mm256_mask_i64gather_epi32): Likewise.
      	* config/i386/pmm_malloc.h (_mm_malloc, _mm_free): Likewise.
      	* config/i386/ia32intrin.h (__writeeflags): Likewise.
      	* config/i386/pkuintrin.h (_wrpkru): Likewise.
      	* config/i386/avx512pfintrin.h (_mm512_mask_prefetch_i32gather_pd,
      	_mm512_mask_prefetch_i32gather_ps, _mm512_mask_prefetch_i64gather_pd,
      	_mm512_mask_prefetch_i64gather_ps, _mm512_prefetch_i32scatter_pd,
      	_mm512_prefetch_i32scatter_ps, _mm512_mask_prefetch_i32scatter_pd,
      	_mm512_mask_prefetch_i32scatter_ps, _mm512_prefetch_i64scatter_pd,
      	_mm512_prefetch_i64scatter_ps, _mm512_mask_prefetch_i64scatter_pd,
      	_mm512_mask_prefetch_i64scatter_ps): Likewise.
      	* config/i386/gmm_malloc.h (_mm_malloc, _mm_free): Likewise.
      	* config/i386/avx512fintrin.h (_mm512_ternarylogic_epi64,
      	_mm512_mask_ternarylogic_epi64, _mm512_maskz_ternarylogic_epi64,
      	_mm512_ternarylogic_epi32, _mm512_mask_ternarylogic_epi32,
      	_mm512_maskz_ternarylogic_epi32, _mm512_i32gather_ps,
      	_mm512_mask_i32gather_ps, _mm512_i32gather_pd, _mm512_i64gather_ps,
      	_mm512_i64gather_pd, _mm512_i32gather_epi32, _mm512_i32gather_epi64,
      	_mm512_i64gather_epi32, _mm512_i64gather_epi64): Likewise.
      
      From-SVN: r239617
      Jakub Jelinek committed
    • fxsrintrin.h (_fxsave): Remove return keyword in inlines returning void. · 31c2bc2e
      	* config/i386/fxsrintrin.h (_fxsave): Remove return keyword in inlines
      	returning void.
      	(_fxrstor, _fxsave64, _fxrstor64): Likewise.
      	* config/i386/xsaveintrin.h (_xsave, _xrstor, _xsave64, _xrstor64):
      	Likewise.
      	* config/i386/xsaveoptintrin.h (_xsaveopt, _xsaveopt64): Likewise.
      	* config/i386/pkuintrin.h (_wrpkru): Likewise.  Add space after
      	function name.
      	(_rdpkru_u32): Add space after function name.
      
      From-SVN: r239616
      Jakub Jelinek committed
    • t-i386 (i386-c.o): Don't depend on i386-builtin-types.inc. · 81457d6b
      	* config/i386/t-i386 (i386-c.o): Don't depend on
      	i386-builtin-types.inc.
      	(i386.o): Depend on i386-builtin-types.inc.
      
      From-SVN: r239615
      Jakub Jelinek committed
    • Use a XOR cipher instead of byte shuffling to protect against bad seeds. · 09309e09
      libgfortran:
      2016-08-19  Janne Blomqvist  <jb@gcc.gnu.org>
      
              * intrinsics/random.c (xor_keys): New array with "secret" keys.
              (scramble_seed): XOR given seed with xor_keys array rather than
              shuffling bytes.
              (unscramble_seed): Remove function.
              (random_seed_i4): Use new scramble_seed.
              (random_seed_i8): Likewise.
      
      frontend:
      2016-08-19  Janne Blomqvist  <jb@gcc.gnu.org>
      
              * intrinsics.texi (RANDOM_NUMBER): Remove reference to
              init_random_seed in example.
              (RANDOM_SEED): Remove warning to not set all seed values to 0.
      
      From-SVN: r239613
      Janne Blomqvist committed
    • Always initialize PRNG using random data from the OS. · 91151a73
      libgfortran:
      
      2016-08-16  Janne Blomqvist  <jb@gcc.gnu.org>
      
              * intrinsics/random.c (master_init): New variable.
              (init_rand_state): Move below getosrandom (), maybe initialize
              master_state.
              (random_seed_i4): If called with no arguments, set master_init to
              false, and reinitialize. If called with PUT=, set master_init to
              true.
              (random_seed_i8): Likewise.
      
      testsuite:
      
      2016-08-16  Janne Blomqvist  <jb@gcc.gnu.org>
      
              * gfortran.dg/random_4.f90: Initialize seed before using, handle
              the last special seed value.
              * gfortran.dg/random_7.f90: Use size for last array member instead
              of hardcoded value.
      
      From-SVN: r239611
      Janne Blomqvist committed
    • [ARM] Fix an invalid check for vectors of the same floating-point constants. · f0c90610
      2016-08-19  Matthew Wahab  <matthew.wahab@arm.com>
      
      	PR target/77281
      	* config/arm/arm.c (neon_valid_immediate): Delete declaration.
      	Use const_vec_duplicate to check for duplicated elements.
      
      From-SVN: r239610
      Matthew Wahab committed
    • expr.c (eval_token): Append "evaluates to 0" to Wundef diagnostic. · fcf830ab
      2016-08-19  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
      
      libcpp/
      	* expr.c (eval_token): Append "evaluates to 0" to Wundef diagnostic.
      
      testsuite/
      	* gcc.dg/cpp/warn-undef.c: Append "evaluates to 0" to dg-error.
      	* gcc.dg/cpp/warn-undef-2.c: Likewise.
      
      From-SVN: r239609
      Prathamesh Kulkarni committed
    • Update C++17 library status table · 1f4ed04e
      	* doc/xml/manual/status_cxx2017.xml: Update status of make_from_tuple
      	and variant.
      	* doc/html/*: Regenerate.
      
      From-SVN: r239608
      Jonathan Wakely committed
    • re PR tree-optimization/77290 (test case gcc.dg/tree-ssa/pr71347.c fails starting with r239565) · 9ca60517
      2016-08-19  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/77290
      	* tree-ssa-pre.c (eliminate_dom_walker::before_dom_children):
      	Fix flag_tree_parallelize_loops check.
      
      From-SVN: r239607
      Richard Biener committed
    • match.pd (x | 0 -> x): Add. · ca0b7ece
      2016-08-19  Richard Biener  <rguenther@suse.de>
      
      	* match.pd (x | 0 -> x): Add.
      
      From-SVN: r239606
      Richard Biener committed
    • re PR tree-optimization/77286 (ICE in fold_convert_loc, at fold-const.c:2248 building 435.gromacs) · 1a5da5b6
      2016-08-19  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/77286
      	* tree-vect-loop-manip.c (slpeel_duplicate_current_defs_from_edges):
      	Deal with virtual PHIs being out-of-order.
      
      	* gcc.dg/torture/pr77286.c: New testcase.
      
      From-SVN: r239605
      Richard Biener committed
    • Add source information to -fverbose-asm · 82f72146
      gcc/ChangeLog:
      	* doc/invoke.texi (fverbose-asm): Note that source code lines
      	are emitted, and provide an example.
      	* final.c (asm_show_source): New function.
      	(final_scan_insn): Call asm_show_source.
      
      From-SVN: r239604
      David Malcolm committed
    • Daily bump. · f4e46e34
      From-SVN: r239603
      GCC Administrator committed
  2. 18 Aug, 2016 19 commits
    • Implement the latest proposed resolution of LWG 2756. · a577f786
      	* include/std/optional (Optional_base(const _Tp&))
      	(Optional_base(_Tp&&), using _Base::_Base): Remove.
      	(optional(nullopt_t)): New.
      	(optional(_Up&&)): Invoke base directly with in_place
      	rather than creating a temporary, add default template
      	argument, change constraints.
      	(optional(const optional<_Up>&)): Invoke base directly
      	with in_place, remove unnecessary constraints.
      	(optional(optional<_Up>&& __t)): Likewise.
      	(optional(in_place_t, _Args&&...)): New.
      	(optional(in_place_t, initializer_list<_Up>, _Args&&...)): Likewise.
      	(operator=(_Up&&)): Add default template argument, change constraints.
      	(operator=(const optional<_Up>&)): Put is_same first in the
      	constraints.
      	(operator=(optional<_Up>&&)): Likewise.
      	* testsuite/20_util/optional/assignment/5.cc: Add a test to
      	verify assignment from something that can't be perfect-forwarded.
      	* testsuite/20_util/optional/cons/value.cc: Add tests to verify
      	that a nested optional is disengaged when constructed
      	from a disengaged element type,	and to verify that assignments
      	from an engaged element type engage the optional.
      
      From-SVN: r239593
      Ville Voutilainen committed
    • Implement <variant> · 197c757c
      	* include/Makefile.am: Add new file std/variant.
      	* include/Makefile.in: Generated from Makefile.am.
      	* include/bits/enable_special_members.h: Add a tag type to allow
      	the construction in non-default constructor.
      	* include/bits/uses_allocator.h: Add convenience traits to
      	detect constructibility.
      	* include/std/variant: Implement <variant>.
      	* testsuite/20_util/variant/compile.cc: Compile-time tests.
      	* testsuite/20_util/variant/run.cc: Runtime tests.
      
      From-SVN: r239590
      Tim Shen committed
    • Allow calling diagnostic_show_locus without a diagnostic_info · cc015f3a
      Much of diagnostic-show-locus.c currently expects a diagnostic_info *,
      but it only uses the rich_location and the diagnostic_t.
      
      Change the signature of diagnostic_show_locus from:
      
        void
        diagnostic_show_locus (diagnostic_context *,
                               const diagnostic_info *);
      
      to:
      
        void
        diagnostic_show_locus (diagnostic_context *,
                               rich_location *richloc,
                               diagnostic_t diagnostic_kind);
      
      so that it can be used for things other than diagnostics.
      
      Use this flexibility to add selftests for diagnostic_show_locus.
      
      gcc/c-family/ChangeLog:
      	* c-opts.c (c_diagnostic_finalizer): Update for change to
      	diagnostic_show_locus.
      
      gcc/ChangeLog:
      	* diagnostic-show-locus.c (colorizer::colorizer): Replace diagnostic
      	param with diagnostic_kind.
      	(class colorizer): Similarly replace field m_diagnostic with
      	m_diagnostic_kind.
      	(colorizer::colorizer): Replace diagnostic
      	param with diagnostic_kind.
      	(colorizer::begin_state): Update for above field change.
      	(layout::layout): Replace diagnostic param with rich_location *
      	and diagnostic_kind.
      	(diagnostic_show_locus): Replace diagnostic param with richloc
      	and diagnostic_kind.
      	(class selftest::test_diagnostic_context): New class.
      	(selftest::test_diagnostic_show_locus_unknown_location): New
      	function.
      	(selftest::test_one_liner_simple_caret): New function.
      	(selftest::test_one_liner_caret_and_range): New function.
      	(selftest::test_one_liner_multiple_carets_and_ranges): New
      	function.
      	(selftest::test_one_liner_fixit_remove): New function.
      	(selftest::test_one_liner_fixit_replace): New function.
      	(selftest::test_diagnostic_show_locus_one_liner): New function.
      	(selftest::diagnostic_show_locus_c_tests): Call the new test
      	functions.
      	* diagnostic.c (diagnostic_initialize): Initialize
      	colorize_source_p, show_ruler_p and parseable_fixits_p.
      	(default_diagnostic_finalizer): Update for change to
      	diagnostic_show_locus.
      	(diagnostic_append_note): Likewise.
      	* diagnostic.h (diagnostic_show_locus): Replace
      	const diagnostic_info * param with location * and diagnostic_t.
      
      gcc/fortran/ChangeLog:
      	* error.c (gfc_diagnostic_starter): Update for change to
      	diagnostic_show_locus.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
      	(custom_diagnostic_finalizer): Update for change to
      	diagnostic_show_locus.
      
      From-SVN: r239586
      David Malcolm committed
    • Spelling suggestions for misspelled preprocessor directives · cb18fd07
      This patch allows the preprocessor to offer suggestions for misspelled
      directives, taking us from e.g.:
      
      test.c:5:2: error: invalid preprocessing directive #endfi
       #endfi
        ^~~~~
      
      to:
      
      test.c:5:2: error: invalid preprocessing directive #endfi; did you mean #endif?
       #endfi
        ^~~~~
        endif
      
      gcc/c-family/ChangeLog:
      	* c-common.c: Include "spellcheck.h".
      	(cb_get_suggestion): New function.
      	* c-common.h (cb_get_suggestion): New decl.
      	* c-lex.c (init_c_lex): Initialize cb->get_suggestion to
      	cb_get_suggestion.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/cpp/misspelled-directive-1.c: New testcase.
      	* gcc.dg/cpp/misspelled-directive-2.c: New testcase.
      
      libcpp/ChangeLog:
      	* directives.c (directive_names): New array.
      	(_cpp_handle_directive): Offer spelling suggestions for misspelled
      	directives.
      	* errors.c (cpp_diagnostic_at_richloc): New function.
      	(cpp_error_at_richloc): New function.
      	* include/cpplib.h (struct cpp_callbacks): Add field
      	"get_suggestion".
      	(cpp_error_at_richloc): New decl.
      
      From-SVN: r239585
      David Malcolm committed
    • re PR c/71514 (ICE on C11 code with atomic exchange at -O1 and above on… · a76989dc
      re PR c/71514 (ICE on C11 code with atomic exchange at -O1 and above on x86_64-linux-gnu: in copy_reference_ops_from_ref, at tree-ssa-sccvn.c:879)
      
      	PR c/71514
      	* c-common.c (get_atomic_generic_size): Disallow pointer-to-function
      	and pointer-to-VLA.
      
      	* gcc.dg/pr71514.c: New test.
      
      From-SVN: r239581
      Marek Polacek committed
    • selftest.h: add class line_table_test · f87e22c5
      input.c has a fixture class for running each selftest with a fresh
      line_table, and logic for looping over various interesting line_table
      test cases.
      
      This patch exposes the above in selftest.h so that such
      location-handling tests can be written in other files, renaming the
      class from temp_line_table to line_table_test.
      
      Also, the patch moves the stored line table ptr from being a member of
      the test class to being a global GC-root, to avoid it being collected
      if the GC runs during such a test.
      
      gcc/ChangeLog:
      	* input.c (saved_line_table): New global.
      	(class selftest::temp_line_table): Rename to line_table_test and
      	move declaration to selftest.h, and drop field m_old_line_table.
      	(selftest::temp_line_table::temp_line_table): Rename ctor to...
      	(selftest::line_table_test::line_table_test): ...this.  Add a
      	default ctor.  Store current value of line_table within
      	saved_line_table.
      	(selftest::temp_line_table::~temp_line_table): Rename dtor to...
      	(selftest::line_table_test::~line_table_test): ...this, and
      	restore line_table from the saved_line_table, rather than
      	m_old_line_table.
      	(selftest::test_accessing_ordinary_linemaps): Update for above
      	renaming.
      	(selftest::test_lexer): Likewise.
      	(struct selftest::lexer_test): Likewise.
      	(selftest::lexer_test::lexer_test): Likewise.
      	(selftest::input_c_tests): Move the looping over test cases from
      	here into...
      	(selftest::for_each_line_table_case): New function.
      	* input.h (saved_line_table): New decl.
      	* selftest.h (struct selftest::line_table_case): New forward decl.
      	(class selftest::line_table_test): New class, moved here from
      	selftest::temp_line_table in input.c, and renamed.
      	(selftest::for_each_line_table_case): New decl.
      
      From-SVN: r239580
      David Malcolm committed
    • Increase MOVE_RATIO to 17 for Lakemont · 89c88780
      Larger MOVE_RATIO will always make code faster.  17 is the number with
      smaller code sizes for Lakemont.
      
      gcc/
      
      	PR target/72839
      	* config/i386/i386.c (lakemont_cost): Set MOVE_RATIO to 17.
      
      gcc/testsuite/
      
      	PR target/72839
      	* gcc.target/i386/pr72839.c: New test.
      
      From-SVN: r239578
      H.J. Lu committed
    • re PR middle-end/70895 (OpenACC: loop reduction does not work. Output is zero.) · 2c71d454
      2016-08-18  Chung-Lin Tang  <cltang@codesourcery.com>
      
      	PR middle-end/70895
      	gcc/
      	* gimplify.c (omp_add_variable): Adjust/add variable mapping on
      	enclosing parallel construct for reduction variables on OpenACC loop
      	directives.
      
      	gcc/testsuite/
      	* gfortran.dg/goacc/loop-tree-1.f90: Add gimple scan-tree-dump test.
      	* c-c++-common/goacc/reduction-1.c: Likewise.
      	* c-c++-common/goacc/reduction-2.c: Likewise.
      	* c-c++-common/goacc/reduction-3.c: Likewise.
      	* c-c++-common/goacc/reduction-4.c: Likewise.
      
      	libgomp/
      	* testsuite/libgomp.oacc-fortran/reduction-7.f90: Add explicit
      	firstprivate clauses.
      	* testsuite/libgomp.oacc-fortran/reduction-6.f90: Remove explicit
      	copy clauses.
      	* testsuite/libgomp.oacc-c-c++-common/reduction-7.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/reduction-cplx-flt.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/reduction-flt.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/collapse-2.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/loop-red-wv-1.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/collapse-4.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/loop-red-v-1.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/reduction-cplx-dbl.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/loop-red-g-1.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/loop-red-gwv-1.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c: Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/reduction-dbl.c: Likewise.
      
      From-SVN: r239576
      Chung-Lin Tang committed
    • DWARF: do not emit DW_TAG_variable to materialize DWARF procedures · 80c5ad35
      Hello,
      
      For -gdwarf-3 and newer, the DWARF back-end sometimes generates DWARF
      procedures to factorize complex location descriptions.  DWARF procedures
      can be materialized as DW_TAG_dwarf_procedure DIEs, but actually any DIE
      that can hold a DW_AT_location attribute is also accepted.
      
      Unlike what I thought at some point, the DW_TAG_dwarf_procedure tag was
      introduced in the DWARFv3 standard, not the DWARFv4 one, so the back-end
      can always emit DW_TAG_dwarf_procedure DIEs, as this simplifies code and
      prevents the types pruning pass from missing a DWARF procedure.
      
      Boostrapped and regtested on x86_64-linux: no regression.  Ok to commit?
      Thank you in advance!
      
      gcc/
      
      	* dwarf2out.c (copy_dwarf_procedure): Remove obsolete comment.
      	(new_dwarf_proc_die): Emit DW_TAG_dwarf_procedure DIEs even for
      	-gdwarf-3.
      	(function_to_dwarf_procedure): Update comment.
      
      From-SVN: r239575
      Pierre-Marie de Rodat committed
    • Expand libstdc++ docs on testing · 0b224dcf
      	* doc/xml/manual/test.xml (test.run.permutations): Expand section.
      	(test.new_tests): Rewrite section.
      	(tests.dg.directives): New section.
      	* doc/html/*: Regenerate.
      
      From-SVN: r239574
      Jonathan Wakely committed
    • Improve documentation of libstdc++ test targets · b56d48ef
      	* doc/xml/manual/test.xml: Improve documentation of test targets.
      	Document new-abi-baseline, check-debug, and check-parallel targets.
      
      From-SVN: r239573
      Jonathan Wakely committed
    • Document libstdc++.so versioning in manual · 409d5555
      	* doc/xml/manual/build_hacking.xml: New section on shared library
      	versioning.
      
      From-SVN: r239572
      Jonathan Wakely committed
    • Improve markup in libstdc++ manual · a8107a98
      	* doc/xml/manual/build_hacking.xml: Improve markup.
      	* doc/xml/manual/test.xml: Likewise. Change section title from "Test"
      	to "Testing".
      	* doc/xml/faq.xml: Change link text to "Testing".
      
      From-SVN: r239571
      Jonathan Wakely committed
    • Evict selftest tempfiles from the diagnostics file cache · f89b03b6
      Selftests can use class selftest::temp_source_file to write out files
      for testing input-handling, and the files are unlinked in the dtor.
      
      This leads to stale entries in input.c's cache of file content, which
      could lead to errors if a temporary filename gets reused during a run
      of the selftests.
      
      We don't normally expect files to be "deleted from under us", so
      special-case this by adding a special way for temp_source_file's
      dtor to purge any cache entries referring to it.
      
      gcc/ChangeLog:
      	* input.c (diagnostics_file_cache_forcibly_evict_file): New
      	function.
      	* input.h (diagnostics_file_cache_forcibly_evict_file): New
      	declaration.
      	* selftest.c (selftest::temp_source_file::~temp_source_file):
      	Evict m_filename from the diagnostic file cache.
      
      From-SVN: r239570
      David Malcolm committed
    • tree-pass.h (make_pass_materialize_all_clones): Declare. · f0251020
      2016-08-18  Richard Biener  <rguenther@suse.de>
      
      	* tree-pass.h (make_pass_materialize_all_clones): Declare.
      	* ipa.c (pass_data_materialize_all_clones, pass_materialize_all_clones,
      	make_pass_materialize_all_clones): New simple IPA pass encapsulating
      	clone materialization.
      	* passes.def (all_late_ipa_passes): Start with
      	pass_materialize_all_clones.
      	* cgraphunit.c (symbol_table::compile): Remove call to
      	materialize_all_clones.
      	* tree-into-ssa.c: Include statistics.h.
      	(update_ssa): Count number of times we do incremental/rewrite
      	SSA update.
      
      From-SVN: r239567
      Richard Biener committed
    • re PR c/7652 (-Wswitch-break : Warn if a switch case falls through) · 9c62c873
      	PR c/7652
      gcc/cp/
      	* call.c (add_builtin_candidate): Add gcc_fallthrough.
      	* cxx-pretty-print.c (pp_cxx_unqualified_id): Likewise.
      	* parser.c (cp_parser_skip_to_end_of_statement): Likewise.
      	(cp_parser_cache_defarg): Likewise.
      libcpp/
      	* pch.c (write_macdef): Add CPP_FALLTHRU.
      
      From-SVN: r239566
      Marek Polacek committed
    • re PR tree-optimization/77282 (test case gcc.dg/autopar/pr46193.c fails starting with r239414) · f9d97e40
      2016-08-18  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/77282
      	* tree-ssa-pre.c (eliminate_dom_walker::before_dom_children):
      	When doing auto-parallelizing also prevent use of PHIs that
      	carry dependences across loop backedges.
      
      From-SVN: r239565
      Richard Biener committed
    • Remove unintended dg-options directive · 6cb98491
      	* testsuite/tr1/3_function_objects/function/10.cc: Remove unintended
      	dg-options directive.
      
      From-SVN: r239564
      Jonathan Wakely committed
    • [PATCH] [GCC] Don't use section anchors for declarations that don't fit in a single anchor range · 65d21eaf
      On behalf of Tamar Christina  <tamar.christina@arm.com>.
      
      gcc/
      
      	* varasm.c (default_use_anchors_for_symbol_p): Reject too large decls.
      
      
      Co-Authored-By: Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
      
      From-SVN: r239561
      Tamar Christina committed