gcc.git
8 years agore PR fortran/61318 (Improve error diagnostic by pointing to the expression and not...
Steven G. Kargl [Mon, 22 Aug 2016 18:18:14 +0000 (18:18 +0000)]
re PR fortran/61318 (Improve error diagnostic by pointing to the expression and not to declared-at of a USE-associated variable)

2016-08-22  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/61318
* interface.c (compare_parameter): Use better locus for error message.

2016-08-22  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/61318
* gfortran.dg/pr61318.f90: New test.

From-SVN: r239667

8 years agore PR fortran/77260 (bogus warning with ENTRY in a function)
Steven G. Kargl [Mon, 22 Aug 2016 18:12:33 +0000 (18:12 +0000)]
re PR fortran/77260 (bogus warning with ENTRY in a function)

2016-08-22  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/77260
* gcc/fortran/trans-decl.c (generate_local_decl): Suppress warning
for unused variable if symbol is entry point.

2016-08-22  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/77260
* gfortran.dg/pr77260_1.f90: New test.
* gfortran.dg/pr77260_2.f90: Ditto.

From-SVN: r239666

8 years agoSupport __builtin_isinf_sign for new floating-point types (PR middle-end/77269).
Joseph Myers [Mon, 22 Aug 2016 18:03:59 +0000 (19:03 +0100)]
Support __builtin_isinf_sign for new floating-point types (PR middle-end/77269).

The __builtin_isinf_sign folding uses a type-specific signbit built-in
function, meaning it only works for the types float, double and long
double, not for types such as _FloatN, _FloatNx, __float128.  Since
the signbit built-in function is now type-generic, that can be used
unconditionally, much as the code uses the type-generic isinf built-in
function unconditionally, and this patch makes it do so, thereby
enabling __builtin_isinf_sign (which glibc uses to expand the isinf
macro since that macro in glibc traditionally provided the stronger
guarantees about the return value given by __builtin_isinf_sign) to
work for all floating-point types.

The test gcc.dg/torture/builtin-isinf_sign-1.c needs updating because
it tests that comparisons of calls to __builtin_isinf_sign to
conditional expressions involving __builtin_isinf and
__builtin_signbit* get optimized away, and with a change of what
particular built-in function for signbit is used, GCC doesn't notice
the expressions with type-generic and non-type-generic built-in
functions are equivalent at -O0 or -O1 (it does optimize away the
original test at -O2).

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

PR middle-end/77269
gcc:
* builtins.c (fold_builtin_classify): Use builtin_decl_explicit
(BUILT_IN_SIGNBIT) to expand __builtin_isinf_sign.

gcc/testsuite:
* gcc.dg/torture/builtin-isinf_sign-1.c: Use __builtin_signbit not
__builtin_signbitf and __builtin_signbitl in expected generic
expansion.
* gcc.dg/torture/float128-tg-2.c, gcc.dg/torture/float128x-tg-2.c,
gcc.dg/torture/float16-tg-2.c, gcc.dg/torture/float32-tg-2.c,
gcc.dg/torture/float32x-tg-2.c, gcc.dg/torture/float64-tg-2.c,
gcc.dg/torture/float64x-tg-2.c, gcc.dg/torture/floatn-tg-2.h: New
tests.

From-SVN: r239665

8 years agolibstdc++/68297 avoid throw/catch in make_exception_ptr
Gleb Natapov [Mon, 22 Aug 2016 17:29:31 +0000 (17:29 +0000)]
libstdc++/68297 avoid throw/catch in make_exception_ptr

2016-08-22  Gleb Natapov  <gleb@scylladb.com>

PR libstdc++/68297
* config/abi/pre/gnu-versioned-namespace.ver: Export
__cxa_init_primary_exception and std::exception_ptr(void*).
* config/abi/pre/gnu.ver (CXXABI_1.3.11) : Add new symbol version and
export __cxa_init_primary_exception and std::exception_ptr(void*).
* include/Makefile.am: Add new headers.
* include/Makefile.in: Regenerate.
* libsupc++/Makefile.am: Add new headers.
* libsupc++/Makefile.in: Regenerate.
* libsupc++/cxxabi.h (__cxa_allocate_exception): Move to ...
* libsupc++/cxxabi_init_exception.h: New header.
(__cxa_init_primary_exception): Declare.
* libsupc++/eh_throw.cc (__cxa_init_primary_exception): Define.
(__cxa_throw): Use __cxa_init_primary_exception.
* libsupc++/exception (std::exception): Move to ...
* libsupc++/exception.h: New header.
* libsupc++/exception_ptr.h (__exception_ptr::exception_ptr): Add
friend declaration.
(__exception_ptr::__dest_thunk): New function template.
(std::make_exception_ptr) [__cpp_rtti && !_GLIBCXX_HAVE_CDTOR_CALLABI]:
Use __cxa_allocate_exception and __cxa_init_primary_exception to
create exception_ptr.
* libsupc++/typeinfo: Include bits/exception.h instead of exception.
* testsuite/util/testsuite_abi.cc: Add CXXABI_1.3.11 version.

From-SVN: r239664

8 years agoUpdate links to libstdc++ Doxygen pages
Jonathan Wakely [Mon, 22 Aug 2016 16:47:39 +0000 (17:47 +0100)]
Update links to libstdc++ Doxygen pages

* doc/xml/api.xml: Replace hardcoded links for specific versions with
link to docs for all releases.
* doc/html/*: Regenerate.

From-SVN: r239663

8 years agoAdd noexcept to std::function swap
Jonathan Wakely [Mon, 22 Aug 2016 16:47:34 +0000 (17:47 +0100)]
Add noexcept to std::function swap

PR libstdc++/77322
* doc/xml/manual/intro.xml: Document DR 2062 change.
* include/std/functional (function::swap): Add noexcept.
(swap(function<Res(Args...)&, function<Res(Args...)&)): Likewise.
* testsuite/20_util/function/77322.cc: New test.

From-SVN: r239662

8 years agoImprove readability of debug_tree() dumps for SSA_NAME and VECTOR_CST
Patrick Palka [Mon, 22 Aug 2016 15:13:16 +0000 (15:13 +0000)]
Improve readability of debug_tree() dumps for SSA_NAME and VECTOR_CST

gcc/ChangeLog:

* print-tree.c (print_node) [VECTOR_CST]: Coalesce the output of
identical consecutive elements.
[SSA_NAME]: Print the name's def stmt on its own line.  When printing
the node's def stmt, avoid printing an unwanted trailing newline by
replacing the call to print_gimple_stmt() with its inlined body and
adjusting it to not set pp_needs_newline and to call pp_flush()
instead of pp_newline_and_flush().

From-SVN: r239661

8 years agoAdd minimal _FloatN, _FloatNx built-in functions.
Joseph Myers [Mon, 22 Aug 2016 11:57:39 +0000 (12:57 +0100)]
Add minimal _FloatN, _FloatNx built-in functions.

This patch adds a minimal set of built-in functions for the new
_FloatN and _FloatNx types.

The functions added are __builtin_fabs*, __builtin_copysign*,
__builtin_huge_val*, __builtin_inf*, __builtin_nan* and
__builtin_nans* (where * = fN or fNx).  That is, 42 new entries are
added to the enum of built-in functions and the associated array of
decls, where not all of them are actually supported on any one target.

These functions are believed to be sufficient for libgcc (complex
multiplication and division use __builtin_huge_val*,
__builtin_copysign* and __builtin_fabs*) and for glibc (which also
depends on complex multiplication from libgcc, as well as using such
functions itself).  The basic target-independent support for folding /
expanding calls to these built-in functions is wired up, so those for
constants can be used in static initializers, and the fabs and
copysign built-ins can always be expanded to bit-manipulation inline
(for any format setting signbit_ro and signbit_rw, which covers all
formats supported for _FloatN and _FloatNx), although insn patterns
for fabs (abs<mode>2) and copysign (copysign<mode>3) will be used when
available and may result in more optimal code.

The complex multiplication and division functions in libgcc rely on
predefined macros (defined with -fbuilding-libgcc) to say what the
built-in function suffixes to use with a particular mode are.  This
patch updates that code accordingly, where previously it involved a
hack supposing that machine-specific suffixes for constants were also
suffixes for built-in functions.

As with the main _FloatN / _FloatNx patch, this patch does not update
code dealing only with optimizations that currently has cases only
covering float, double and long double, though some such cases are
straightforward and may be covered in a followup patch.

The functions are defined with DEF_GCC_BUILTIN, so calls to the TS
18661-3 functions such as fabsf128 and copysignf128, without the
__builtin_, will not be optimized.  As noted in the original _FloatN /
_FloatNx patch submission, in principle the bulk of the libm functions
that have built-in versions should have those versions extended to
cover the new types, but that would require more consideration of the
effects of increasing the size of the enum and initializing many more
functions at startup.

I don't know whether target-specific built-in functions can readily be
made into aliases for target-independent functions, but if they can,
it would make sense to do so for the x86, ia64 and rs6000 *q functions
corresponding to these, so that they can benefit from the
architecture-independent folding logic and from any optimizations
enabled for these functions in future, and so that less
target-specific code is needed to support them.

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

gcc:
* tree.h (CASE_FLT_FN_FLOATN_NX, float16_type_node)
(float32_type_node, float64_type_node, float32x_type_node)
(float128x_type_node): New macros.
* builtin-types.def (BT_FLOAT16, BT_FLOAT32, BT_FLOAT64)
(BT_FLOAT128, BT_FLOAT32X, BT_FLOAT64X, BT_FLOAT128X)
(BT_FN_FLOAT16, BT_FN_FLOAT32, BT_FN_FLOAT64, BT_FN_FLOAT128)
(BT_FN_FLOAT32X, BT_FN_FLOAT64X, BT_FN_FLOAT128X)
(BT_FN_FLOAT16_FLOAT16, BT_FN_FLOAT32_FLOAT32)
(BT_FN_FLOAT64_FLOAT64, BT_FN_FLOAT128_FLOAT128)
(BT_FN_FLOAT32X_FLOAT32X, BT_FN_FLOAT64X_FLOAT64X)
(BT_FN_FLOAT128X_FLOAT128X, BT_FN_FLOAT16_CONST_STRING)
(BT_FN_FLOAT32_CONST_STRING, BT_FN_FLOAT64_CONST_STRING)
(BT_FN_FLOAT128_CONST_STRING, BT_FN_FLOAT32X_CONST_STRING)
(BT_FN_FLOAT64X_CONST_STRING, BT_FN_FLOAT128X_CONST_STRING)
(BT_FN_FLOAT16_FLOAT16_FLOAT16, BT_FN_FLOAT32_FLOAT32_FLOAT32)
(BT_FN_FLOAT64_FLOAT64_FLOAT64, BT_FN_FLOAT128_FLOAT128_FLOAT128)
(BT_FN_FLOAT32X_FLOAT32X_FLOAT32X)
(BT_FN_FLOAT64X_FLOAT64X_FLOAT64X)
(BT_FN_FLOAT128X_FLOAT128X_FLOAT128X): New type definitions.
* builtins.def (DEF_GCC_FLOATN_NX_BUILTINS): New macro.
(copysign, fabs, huge_val, inf, nan, nans): Use it.
* builtins.c (expand_builtin): Use CASE_FLT_FN_FLOATN_NX for fabs
and copysign.
(fold_builtin_0): Use CASE_FLT_FN_FLOATN_NX for inf and huge_val.
(fold_builtin_1): Use CASE_FLT_FN_FLOATN_NX for fabs.
* doc/extend.texi (Other Builtins): Document these built-in
functions.
* fold-const-call.c (fold_const_call): Use CASE_FLT_FN_FLOATN_NX
for nan and nans.

gcc/c-family:
* c-family/c-cppbuiltin.c (c_cpp_builtins): Check _FloatN and
_FloatNx types for suffixes for built-in functions.

gcc/testsuite:
* gcc.dg/torture/float128-builtin.c,
gcc.dg/torture/float128-ieee-nan.c,
gcc.dg/torture/float128x-builtin.c,
gcc.dg/torture/float128x-nan.c, gcc.dg/torture/float16-builtin.c,
gcc.dg/torture/float16-nan.c, gcc.dg/torture/float32-builtin.c,
gcc.dg/torture/float32-nan.c, gcc.dg/torture/float32x-builtin.c,
gcc.dg/torture/float32x-nan.c, gcc.dg/torture/float64-builtin.c,
gcc.dg/torture/float64-nan.c, gcc.dg/torture/float64x-builtin.c,
gcc.dg/torture/float64x-nan.c, gcc.dg/torture/floatn-builtin.h,
gcc.dg/torture/floatn-nan.h: New tests.

From-SVN: r239658

8 years agoUpdate TEST_I_F calls in ARM fp-int-convert tests.
Joseph Myers [Mon, 22 Aug 2016 11:48:14 +0000 (12:48 +0100)]
Update TEST_I_F calls in ARM fp-int-convert tests.

gcc/testsuite:
* gcc.dg/torture/arm-fp16-int-convert-alt.c (FP16_MAX_EXP): New
macro.
(main): Update calls to TEST_I_F.
* gcc.dg/torture/arm-fp16-int-convert-ieee.c (FP16_MAX_EXP): New
macro.
(main): Update calls to TEST_I_F.

From-SVN: r239657

8 years ago* doc/install.texi (Binaries): www.opencsw.org now uses https.
Gerald Pfeifer [Mon, 22 Aug 2016 11:43:35 +0000 (11:43 +0000)]
* doc/install.texi (Binaries): opencsw.org now uses https.

From-SVN: r239656

8 years agoCorrect type names in fp-int-convert-float*x-timode.c tests.
Joseph Myers [Mon, 22 Aug 2016 10:45:23 +0000 (11:45 +0100)]
Correct type names in fp-int-convert-float*x-timode.c tests.

gcc/testsuite:
* gcc.dg/torture/fp-int-convert-float128x-timode.c,
gcc.dg/torture/fp-int-convert-float32x-timode.c,
gcc.dg/torture/fp-int-convert-float64x-timode.c: Correct type
names in calls to TEST_I_F.

From-SVN: r239655

8 years agotree-ssa-forwprop.c (pass_forwprop::execute): Use RPO order.
Richard Biener [Mon, 22 Aug 2016 08:25:30 +0000 (08:25 +0000)]
tree-ssa-forwprop.c (pass_forwprop::execute): Use RPO order.

2016-08-22  Richard Biener  <rguenther@suse.de>

* tree-ssa-forwprop.c (pass_forwprop::execute): Use RPO order.

From-SVN: r239653

8 years agore PR c/52952 (Wformat location info is bad (wrong column number))
Bernd Edlinger [Mon, 22 Aug 2016 07:34:34 +0000 (07:34 +0000)]
re PR c/52952 (Wformat location info is bad (wrong column number))

2016-08-22  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR c/52952
        * gcc.dg/cpp/pr66415-1.c: Fix sporadic failure.

From-SVN: r239649

8 years agoSkip tests that assume 4 byte alignment for avr
Senthil Kumar Selvaraj [Mon, 22 Aug 2016 06:12:32 +0000 (06:12 +0000)]
Skip tests that assume 4 byte alignment for avr

gcc/testsuite

        * gcc.dg/ipa/propalign-1.c: Skip for targets with !natural_alignment_32
        and !natural_alignment_64.
        * gcc.dg/ipa/propalign-2.c: Likewise.
        * gcc.dg/ipa/propalign-3.c: Likewise.
        * gcc.dg/ipa/propalign-4.c: Likewise.
        * gcc.dg/ipa/propalign-5.c: Likewise.
        * lib/target-supports.exp
        (check_effective_target_natural_alignment_32): Add avr-*-*.

From-SVN: r239647

8 years agoDaily bump.
GCC Administrator [Mon, 22 Aug 2016 00:16:15 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r239646

8 years agore PR target/77270 (Flag -mprftchw is shared with 3dnow for -march=k8)
Uros Bizjak [Sun, 21 Aug 2016 18:53:48 +0000 (20:53 +0200)]
re PR target/77270 (Flag -mprftchw is shared with 3dnow for -march=k8)

PR target/77270
* config/i386/i386.md (prefetch): When TARGET_PRFCHW or
TARGET_PREFETCHWT1 are disabled, emit 3dNOW! write prefetches for
non-SSE2 athlons only, otherwise prefer SSE prefetches.

From-SVN: r239643

8 years agoDaily bump.
GCC Administrator [Sun, 21 Aug 2016 00:16:14 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r239642

8 years agotree-vrp.c (vrp_visit_assignment_or_call): Changed to Return VR.
Kugan Vivekanandarajah [Sat, 20 Aug 2016 12:12:06 +0000 (12:12 +0000)]
tree-vrp.c (vrp_visit_assignment_or_call): Changed to Return VR.

gcc/ChangeLog:

2016-08-20  Kugan Vivekanandarajah  <kuganv@linaro.org>

* tree-vrp.c (vrp_visit_assignment_or_call): Changed to Return VR.
(vrp_visit_cond_stmt): Just sets TAKEN_EDGE_P.
(vrp_visit_switch_stmt): Likewise.
(extract_range_from_stmt): Factored out from vrp_visit_stmt.
(extract_range_from_phi_node): Factored out from vrp_visit_phi_stmt.
(vrp_visit_stmt): Use extract_range_from_stmt.
(vrp_visit_phi_node): Use extract_range_from_phi_node.

From-SVN: r239639

8 years agoMakefile.in: Add tree-vrp.h to GTFILES.
Kugan Vivekanandarajah [Sat, 20 Aug 2016 05:43:01 +0000 (05:43 +0000)]
Makefile.in: Add tree-vrp.h to GTFILES.

gcc/ChangeLog:

2016-08-20  Kugan Vivekanandarajah  <kuganv@linaro.org>

* Makefile.in: Add tree-vrp.h to GTFILES.
* gengtype.c (open_base_files): Add tree-vrp.h.
* asan.c: Add tree-vrp.h which now has the definition value_range_type.
* builtins.c: Likewise.
* fold-const.c: Likewise.
* gimple-builder.c: Likewise.
* gimple-laddress.c: Likewise.
* hsa-gen.c: Likewise.
* internal-fn.c: Likewise.
* ssa.h: Likewise.
* targhooks.c: Liewise,
* tree-ssa-address.c: Likewise.
* tree-ssanames.h (value_range_type: Move to tree-vrp.h.
* tree-vrp.c (struct value_range): Move to tree-vrp.h
* tree-vrp.h: New file.

From-SVN: r239638

8 years agore PR tree-optimization/61839 (More optimize opportunity for VRP)
Kugan Vivekanandarajah [Sat, 20 Aug 2016 01:18:09 +0000 (01:18 +0000)]
re PR tree-optimization/61839 (More optimize opportunity for VRP)

gcc/testsuite/ChangeLog:

2016-08-20  Kugan Vivekanandarajah  <kuganv@linaro.org>

PR tree-optimization/61839
* gcc.dg/tree-ssa/pr61839_1.c: New test.
* gcc.dg/tree-ssa/pr61839_2.c: New test.
* gcc.dg/tree-ssa/pr61839_3.c: New test.
* gcc.dg/tree-ssa/pr61839_4.c: New test.

gcc/ChangeLog:

2016-08-20  Kugan Vivekanandarajah  <kuganv@linaro.org>

PR tree-optimization/61839
* tree-vrp.c (two_valued_val_range_p): New.
(simplify_stmt_using_ranges): Convert CST BINOP VAR where VAR is
two-valued to VAR == VAL1 ? (CST BINOP VAL1) : (CST BINOP VAL2).
Also Convert VAR BINOP CST where VAR is two-valued to
VAR == VAL1 ? (VAL1 BINOP CST) : (VAL2 BINOP CST).

From-SVN: r239637

8 years agoDaily bump.
GCC Administrator [Sat, 20 Aug 2016 00:16:13 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r239636

8 years agoReimplement removal fix-it hints in terms of replace
David Malcolm [Fri, 19 Aug 2016 21:18:05 +0000 (21:18 +0000)]
Reimplement removal fix-it hints in terms of replace

This patch eliminates class fixit_remove, reimplementing
rich_location::add_fixit_remove in terms of replacement with the
empty string.  Deleting the removal subclass simplifies
fixit-handling code, as we only have two concrete fixit_hint
subclasses to deal with, rather than three.

The patch also fixes some problems in diagnostic-show-locus.c for
situations where a replacement fix-it has a different range to the
range of the diagnostic, by unifying the drawing of the two kinds of
fixits.  For example, this:

  foo = bar.field;
      ^
            m_field

becomes:

  foo = bar.field;
      ^
            -----
            m_field

showing the range to be replaced.

gcc/ChangeLog:
* diagnostic-show-locus.c
(layout::annotation_line_showed_range_p): New method.
(layout::print_any_fixits): Remove case fixit_hint::REMOVE.
Reimplement case fixit_hint::REPLACE to cover removals, and
replacements where the range of the replacement isn't one
of the ranges in the rich_location.
(test_one_liner_fixit_replace): Likewise.
(selftest::test_one_liner_fixit_replace_non_equal_range): New
function.
(selftest::test_one_liner_fixit_replace_equal_secondary_range):
New function.
(selftest::test_diagnostic_show_locus_one_liner): Call the new
functions.
* diagnostic.c (print_parseable_fixits): Remove case
fixit_hint::REMOVE.

libcpp/ChangeLog:
* include/line-map.h (fixit_hint::kind): Delete REPLACE.
(class fixit_remove): Delete.
* line-map.c (rich_location::add_fixit_remove): Reimplement
by calling add_fixit_replace with an empty string.
(fixit_remove::fixit_remove): Delete.
(fixit_remove::affects_line_p): Delete.

From-SVN: r239632

8 years agoRegenerate .pot files.
Joseph Myers [Fri, 19 Aug 2016 21:06:53 +0000 (22:06 +0100)]
Regenerate .pot files.

gcc/po:
* gcc.pot: Regenerate.

libcpp/po:
* cpplib.pot: Regenerate.

From-SVN: r239630

8 years agore PR target/77270 (Flag -mprftchw is shared with 3dnow for -march=k8)
Uros Bizjak [Fri, 19 Aug 2016 18:14:03 +0000 (20:14 +0200)]
re PR target/77270 (Flag -mprftchw is shared with 3dnow for -march=k8)

PR target/77270
* config/i386/i386.c (ix86_option_override_internal): Remove
PTA_PRFCHW from entries that also have PTA_3DNOW flag.
Enable SSE prefetch also for TARGET_PREFETCHWT1.
Do not try to enable TARGET_PRFCHW ISA flag here.
* config/i386/i386.md (prefetch): Enable also for TARGET_3DNOW.
Rewrite expander function body.
(*prefetch_3dnow): Enable for TARGET_3DNOW and TARGET_PREFETCHWT1.

From-SVN: r239626

8 years agoImplement C _FloatN, _FloatNx types.
Joseph Myers [Fri, 19 Aug 2016 17:43:26 +0000 (18:43 +0100)]
Implement C _FloatN, _FloatNx types.

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

8 years agoSimplify dg-options for tests using pthreads
Jonathan Wakely [Fri, 19 Aug 2016 16:36:07 +0000 (17:36 +0100)]
Simplify dg-options for tests using pthreads

* 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

8 years agoDefine std::not_fn for C++17
Jonathan Wakely [Fri, 19 Aug 2016 15:42:34 +0000 (16:42 +0100)]
Define std::not_fn for C++17

* 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

8 years agoDefine std::atomic<T>::is_always_lock_free for C++17
Jonathan Wakely [Fri, 19 Aug 2016 15:42:27 +0000 (16:42 +0100)]
Define std::atomic<T>::is_always_lock_free for C++17

* 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

8 years agoFix ambiguities in C++17 mode
Jonathan Wakely [Fri, 19 Aug 2016 15:42:11 +0000 (16:42 +0100)]
Fix ambiguities in C++17 mode

* 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

8 years agore PR fortran/71014 (associate statement inside omp parallel do appears to disable...
Jakub Jelinek [Fri, 19 Aug 2016 15:30:33 +0000 (17:30 +0200)]
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

8 years agore PR fortran/72744 (ICE in verify_ssa, at tree-ssa.c:1039)
Jakub Jelinek [Fri, 19 Aug 2016 15:28:59 +0000 (17:28 +0200)]
re PR fortran/72744 (ICE in verify_ssa, at tree-ssa.c:1039)

PR fortran/72744
* gfortran.dg/gomp/pr72744.f90: New test.

From-SVN: r239619

8 years agore PR fortran/69281 (gfortran ICE on temporary array in function call with -fstack...
Jakub Jelinek [Fri, 19 Aug 2016 15:27:40 +0000 (17:27 +0200)]
re PR fortran/69281 (gfortran ICE on temporary array in function call with -fstack-arrays -fopenmp)

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

8 years agordseedintrin.h (_rdseed16_step, [...]): Uglify argument names and/or local variable...
Jakub Jelinek [Fri, 19 Aug 2016 15:25:05 +0000 (17:25 +0200)]
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

8 years agofxsrintrin.h (_fxsave): Remove return keyword in inlines returning void.
Jakub Jelinek [Fri, 19 Aug 2016 15:24:22 +0000 (17:24 +0200)]
fxsrintrin.h (_fxsave): Remove return keyword in inlines returning void.

* 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

8 years agot-i386 (i386-c.o): Don't depend on i386-builtin-types.inc.
Jakub Jelinek [Fri, 19 Aug 2016 15:23:42 +0000 (17:23 +0200)]
t-i386 (i386-c.o): Don't depend on i386-builtin-types.inc.

* 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

8 years agoUse a XOR cipher instead of byte shuffling to protect against bad seeds.
Janne Blomqvist [Fri, 19 Aug 2016 14:19:51 +0000 (17:19 +0300)]
Use a XOR cipher instead of byte shuffling to protect against bad seeds.

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

8 years agoAlways initialize PRNG using random data from the OS.
Janne Blomqvist [Fri, 19 Aug 2016 14:12:32 +0000 (17:12 +0300)]
Always initialize PRNG using random data from the OS.

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

8 years ago[ARM] Fix an invalid check for vectors of the same floating-point constants.
Matthew Wahab [Fri, 19 Aug 2016 13:59:18 +0000 (13:59 +0000)]
[ARM] Fix an invalid check for vectors of the same floating-point constants.

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

8 years agoexpr.c (eval_token): Append "evaluates to 0" to Wundef diagnostic.
Prathamesh Kulkarni [Fri, 19 Aug 2016 13:17:09 +0000 (13:17 +0000)]
expr.c (eval_token): Append "evaluates to 0" to Wundef diagnostic.

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

8 years agoUpdate C++17 library status table
Jonathan Wakely [Fri, 19 Aug 2016 08:16:13 +0000 (09:16 +0100)]
Update C++17 library status table

* doc/xml/manual/status_cxx2017.xml: Update status of make_from_tuple
and variant.
* doc/html/*: Regenerate.

From-SVN: r239608

8 years agore PR tree-optimization/77290 (test case gcc.dg/tree-ssa/pr71347.c fails starting...
Richard Biener [Fri, 19 Aug 2016 07:43:11 +0000 (07:43 +0000)]
re PR tree-optimization/77290 (test case gcc.dg/tree-ssa/pr71347.c fails starting with r239565)

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

8 years agomatch.pd (x | 0 -> x): Add.
Richard Biener [Fri, 19 Aug 2016 07:03:48 +0000 (07:03 +0000)]
match.pd (x | 0 -> x): Add.

2016-08-19  Richard Biener  <rguenther@suse.de>

* match.pd (x | 0 -> x): Add.

From-SVN: r239606

8 years agore PR tree-optimization/77286 (ICE in fold_convert_loc, at fold-const.c:2248 building...
Richard Biener [Fri, 19 Aug 2016 07:02:05 +0000 (07:02 +0000)]
re PR tree-optimization/77286 (ICE in fold_convert_loc, at fold-const.c:2248 building 435.gromacs)

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

8 years agoAdd source information to -fverbose-asm
David Malcolm [Fri, 19 Aug 2016 00:18:18 +0000 (00:18 +0000)]
Add source information to -fverbose-asm

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

8 years agoDaily bump.
GCC Administrator [Fri, 19 Aug 2016 00:16:14 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r239603

8 years agoImplement the latest proposed resolution of LWG 2756.
Ville Voutilainen [Thu, 18 Aug 2016 20:33:57 +0000 (23:33 +0300)]
Implement the latest proposed resolution of LWG 2756.

* 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

8 years agoImplement <variant>
Tim Shen [Thu, 18 Aug 2016 20:31:26 +0000 (20:31 +0000)]
Implement <variant>

* 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

8 years agoAllow calling diagnostic_show_locus without a diagnostic_info
David Malcolm [Thu, 18 Aug 2016 19:12:54 +0000 (19:12 +0000)]
Allow calling diagnostic_show_locus without a diagnostic_info

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

8 years agoSpelling suggestions for misspelled preprocessor directives
David Malcolm [Thu, 18 Aug 2016 18:52:43 +0000 (18:52 +0000)]
Spelling suggestions for misspelled preprocessor directives

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

8 years agore PR c/71514 (ICE on C11 code with atomic exchange at -O1 and above on x86_64-linux...
Marek Polacek [Thu, 18 Aug 2016 16:38:49 +0000 (16:38 +0000)]
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

8 years agoselftest.h: add class line_table_test
David Malcolm [Thu, 18 Aug 2016 16:22:10 +0000 (16:22 +0000)]
selftest.h: add class line_table_test

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

8 years agoIncrease MOVE_RATIO to 17 for Lakemont
H.J. Lu [Thu, 18 Aug 2016 14:59:46 +0000 (14:59 +0000)]
Increase MOVE_RATIO to 17 for Lakemont

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

8 years agore PR middle-end/70895 (OpenACC: loop reduction does not work. Output is zero.)
Chung-Lin Tang [Thu, 18 Aug 2016 14:46:19 +0000 (14:46 +0000)]
re PR middle-end/70895 (OpenACC: loop reduction does not work. Output is zero.)

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

8 years agoDWARF: do not emit DW_TAG_variable to materialize DWARF procedures
Pierre-Marie de Rodat [Thu, 18 Aug 2016 14:39:22 +0000 (14:39 +0000)]
DWARF: do not emit DW_TAG_variable to materialize DWARF procedures

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

8 years agoExpand libstdc++ docs on testing
Jonathan Wakely [Thu, 18 Aug 2016 13:47:42 +0000 (14:47 +0100)]
Expand libstdc++ docs on testing

* 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

8 years agoImprove documentation of libstdc++ test targets
Jonathan Wakely [Thu, 18 Aug 2016 13:47:37 +0000 (14:47 +0100)]
Improve documentation of libstdc++ test targets

* doc/xml/manual/test.xml: Improve documentation of test targets.
Document new-abi-baseline, check-debug, and check-parallel targets.

From-SVN: r239573

8 years agoDocument libstdc++.so versioning in manual
Jonathan Wakely [Thu, 18 Aug 2016 13:47:33 +0000 (14:47 +0100)]
Document libstdc++.so versioning in manual

* doc/xml/manual/build_hacking.xml: New section on shared library
versioning.

From-SVN: r239572

8 years agoImprove markup in libstdc++ manual
Jonathan Wakely [Thu, 18 Aug 2016 13:47:28 +0000 (14:47 +0100)]
Improve markup in libstdc++ manual

* 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

8 years agoEvict selftest tempfiles from the diagnostics file cache
David Malcolm [Thu, 18 Aug 2016 13:07:53 +0000 (13:07 +0000)]
Evict selftest tempfiles from the diagnostics file cache

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

8 years agotree-pass.h (make_pass_materialize_all_clones): Declare.
Richard Biener [Thu, 18 Aug 2016 10:41:53 +0000 (10:41 +0000)]
tree-pass.h (make_pass_materialize_all_clones): Declare.

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

8 years agore PR c/7652 (-Wswitch-break : Warn if a switch case falls through)
Marek Polacek [Thu, 18 Aug 2016 10:28:03 +0000 (10:28 +0000)]
re PR c/7652 (-Wswitch-break : Warn if a switch case falls through)

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

8 years agore PR tree-optimization/77282 (test case gcc.dg/autopar/pr46193.c fails starting...
Richard Biener [Thu, 18 Aug 2016 10:06:03 +0000 (10:06 +0000)]
re PR tree-optimization/77282 (test case gcc.dg/autopar/pr46193.c fails starting with r239414)

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

8 years agoRemove unintended dg-options directive
Jonathan Wakely [Thu, 18 Aug 2016 09:58:28 +0000 (10:58 +0100)]
Remove unintended dg-options directive

* testsuite/tr1/3_function_objects/function/10.cc: Remove unintended
dg-options directive.

From-SVN: r239564

8 years ago[PATCH] [GCC] Don't use section anchors for declarations that don't fit in a single...
Tamar Christina [Thu, 18 Aug 2016 08:45:53 +0000 (08:45 +0000)]
[PATCH] [GCC] Don't use section anchors for declarations that don't fit in a single anchor range

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

8 years agossa-iterators.h (ssa_vuse_operand): New inline.
Richard Biener [Thu, 18 Aug 2016 07:21:11 +0000 (07:21 +0000)]
ssa-iterators.h (ssa_vuse_operand): New inline.

2016-08-18  Richard Biener  <rguenther@suse.de>

* ssa-iterators.h (ssa_vuse_operand): New inline.
* tree-if-conv.c (ifc_temp_var): Update virtual operand.
(predicate_all_scalar_phis): Use remove_phi_node to remove
phi nodes predicated.  Delay removing virtual PHIs.
(predicate_mem_writes): Update virtual operands.
(combine_blocks): Likewise.  Propagate out remaining virtual PHIs.
(tree_if_conversion): Do not rewrite virtual SSA form.
* tree-phinodes.c (release_phi_node): Make static.
* tree-phinodes.h (release_phi_node): Remove.

From-SVN: r239560

8 years agoi386.c (enum ix86_builtins): Remove IX86_BUILTIN_* codes that appear in bdesc_* arrays...
Jakub Jelinek [Thu, 18 Aug 2016 06:58:46 +0000 (08:58 +0200)]
i386.c (enum ix86_builtins): Remove IX86_BUILTIN_* codes that appear in bdesc_* arrays...

* config/i386/i386.c (enum ix86_builtins): Remove IX86_BUILTIN_*
codes that appear in bdesc_* arrays, instead include i386-builtin.def
twice to define those.
(bdesc_comi, bdesc_pcmpestr, bdesc_pcmpistr, bdesc_special_args,
bdesc_args, bdesc_round_args, bdesc_mpx, bdesc_mpx_const,
bdesc_multi_arg): Define by including i386-builtin.def the third time.
* config/i386/i386-builtin.def: New file.

From-SVN: r239559

8 years agoDaily bump.
GCC Administrator [Thu, 18 Aug 2016 00:16:13 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r239553

8 years agoinput.c: move test functions within #CHECKING_P and into selftest::
David Malcolm [Thu, 18 Aug 2016 00:13:26 +0000 (00:13 +0000)]
input.c: move test functions within #CHECKING_P and into selftest::

gcc/ChangeLog:
* input.c (get_source_range_for_char): Rename to...
(selftest::get_source_range_for_char): ...this, and move within
the #if CHECKING_P guard.
(get_num_source_ranges_for_substring): Rename to...
(selftest::get_num_source_ranges_for_substring): ...this, move
within the #if CHECKING_P guard, and make static.
(selftest::assert_num_substring_ranges): Initialize
actual_num_ranges.

From-SVN: r239550

8 years ago[RELOAD] Don't assume subreg mem address is ok
Alan Modra [Wed, 17 Aug 2016 22:41:22 +0000 (08:11 +0930)]
[RELOAD] Don't assume subreg mem address is ok

This patch fixes a case where reload blindly assumes a subreg mem is
OK if its address has been partially reloaded by legitimize_reload_address.

PR rtl-optimization/72771
* reload.c (find_reloads): Don't assume that a subreg mem is OK
when find_reloads_toplev returns address_reloaded==-1.
(alternative_allows_const_pool_ref): Update comment.
testsuite/
* gcc.c-torture/compile/pr72771.c: New.

From-SVN: r239549

8 years agoFix invalid dg-do directive
Jonathan Wakely [Wed, 17 Aug 2016 19:58:44 +0000 (20:58 +0100)]
Fix invalid dg-do directive

* testsuite/20_util/reference_wrapper/invoke-2.cc: Fix invalid dg-do
directive and use effective target instead of dg-options.

From-SVN: r239548

8 years agoUse effective target instead of -std in dg-options
Jonathan Wakely [Wed, 17 Aug 2016 19:43:13 +0000 (20:43 +0100)]
Use effective target instead of -std in dg-options

* testsuite/20_util/hash/chi2_q_bit_flip_set.cc: Use effective target
instead of -std in dg-options.
* testsuite/20_util/hash/chi2_q_bit_string_set.cc: Likewise.
* testsuite/20_util/hash/chi2_q_numeric_pattern_set.cc: Likewise.
* testsuite/20_util/hash/chi2_q_uniform_random.cc: Likewise.
* testsuite/20_util/hash/quality.cc: Likewise.
* testsuite/25_algorithms/heap/moveable.cc: Likewise.
* testsuite/25_algorithms/heap/moveable2.cc: Likewise.
* testsuite/25_algorithms/nth_element/random_test.cc: Likewise.
* testsuite/25_algorithms/partial_sort/random_test.cc: Likewise.
* testsuite/25_algorithms/partial_sort_copy/random_test.cc: Likewise.
* testsuite/25_algorithms/sort/random_test.cc: Likewise.

From-SVN: r239547

8 years agoAdd c++11 effective target to tests for C++11 features
Jonathan Wakely [Wed, 17 Aug 2016 19:23:15 +0000 (20:23 +0100)]
Add c++11 effective target to tests for C++11 features

* testsuite/20_util/tuple/67844.cc: Require c++11 effective target.
* testsuite/20_util/tuple/cons/nested_tuple_construct.cc: Likewise.
* testsuite/27_io/rvalue_streams.cc: Likewise.

From-SVN: r239545

8 years agore PR fortran/67496 (trans-array.c sanitizer runtime error: load of value 124, which...
Jakub Jelinek [Wed, 17 Aug 2016 19:08:49 +0000 (21:08 +0200)]
re PR fortran/67496 (trans-array.c sanitizer runtime error: load of value 124, which is not a valid value for type 'bool')

PR fortran/67496
* trans-array.c (trans_array_constructor): Load
expr->ts.u.cl->length_from_typespec only if expr->ts.type is
BT_CHARACTER.

* gfortran.dg/pr67496.f90: New test.

From-SVN: r239544

8 years agoAdd comment explaining why -std=c++14 is needed.
Jonathan Wakely [Wed, 17 Aug 2016 16:09:15 +0000 (17:09 +0100)]
Add comment explaining why -std=c++14 is needed.

* testsuite/26_numerics/complex/literals/types.cc: Add comment.

From-SVN: r239543

8 years agore PR tree-optimization/71752 (ICE in compute_live_loop_exits, at tree-ssa-loop-manip...
Alan Hayward [Wed, 17 Aug 2016 15:31:44 +0000 (15:31 +0000)]
re PR tree-optimization/71752 (ICE in compute_live_loop_exits, at tree-ssa-loop-manip.c:229 w/ -O1 -ftree-vectorize)

2015-08-17  Alan Hayward <alan.hayward@arm.com>

PR tree-optimization/71752
* tree-vect-loop.c (vectorizable_reduction): Keep SLP operand ordering.
* tree-vect-slp.c (vect_get_slp_defs): Handle null operands.

PR tree-optimization/71752
* gcc.dg/vect/pr71752.c: New

From-SVN: r239542

8 years agodec_init_2.f90: Use dg-add-options ieee.
Uros Bizjak [Wed, 17 Aug 2016 14:33:20 +0000 (16:33 +0200)]
dec_init_2.f90: Use dg-add-options ieee.

* gfortran.dg/dec_init_2.f90: Use dg-add-options ieee.

From-SVN: r239540

8 years agogimple-fold.c (gimple_fold_call): Use gimple_call_noreturn_p instead of testing ECF_N...
Jakub Jelinek [Wed, 17 Aug 2016 14:24:53 +0000 (16:24 +0200)]
gimple-fold.c (gimple_fold_call): Use gimple_call_noreturn_p instead of testing ECF_NORETURN bit in gimple_call_flags.

* gimple-fold.c (gimple_fold_call): Use gimple_call_noreturn_p
instead of testing ECF_NORETURN bit in gimple_call_flags.
* tree-cfg.c (make_edges_bb, execute_fixup_cfg): Likewise.
* predict.c (tree_bb_level_predictions): Likewise.
* gimple-low.c (gimple_stmt_may_fallthru): Likewise.

From-SVN: r239539

8 years agoRemove duplicate dg-options directive
Jonathan Wakely [Wed, 17 Aug 2016 14:11:20 +0000 (15:11 +0100)]
Remove duplicate dg-options directive

* testsuite/21_strings/basic_string_view/operations/rfind/char/2.cc:
Remove duplicate dg-options directive.

From-SVN: r239538

8 years agore PR middle-end/77259 (ICE in emit_move_insn since r232167)
Jakub Jelinek [Wed, 17 Aug 2016 13:56:30 +0000 (15:56 +0200)]
re PR middle-end/77259 (ICE in emit_move_insn since r232167)

PR middle-end/77259
* tree-ssa-pre.c (eliminate_dom_walker::before_dom_children): If
turning a call into __builtin_unreachable-like noreturn call, adjust
gimple_call_set_fntype.
* tree-cfgcleanup.c (fixup_noreturn_call): Remove lhs also if
gimple_call_fntype has void return type.

* g++.dg/ipa/devirt-52.C: New test.

From-SVN: r239537

8 years agoAdjust DG directives in libstdc++ Profile Mode test
Jonathan Wakely [Wed, 17 Aug 2016 13:39:14 +0000 (14:39 +0100)]
Adjust DG directives in libstdc++ Profile Mode test

* testsuite/ext/profile/all.cc: Use effective target instead of
-std=gnu++11. Use dg-additional-options instead of repeating options.

From-SVN: r239536

8 years agoAdjust DG directives in libstdc++ XFAIL test
Jonathan Wakely [Wed, 17 Aug 2016 13:39:10 +0000 (14:39 +0100)]
Adjust DG directives in libstdc++ XFAIL test

* testsuite/20_util/bind/ref_neg.cc: Use effective target instead of
-std=gnu++11. Add -fno-show-columns to dg-options. Use dg-prune-output
instead of dg-excess-errors.

From-SVN: r239535

8 years agoAdjust testcases for C++17 compatibility
Jonathan Wakely [Wed, 17 Aug 2016 13:39:05 +0000 (14:39 +0100)]
Adjust testcases for C++17 compatibility

* testsuite/26_numerics/headers/cmath/types_std_c++0x_neg.cc: Disable
test for C++17.
* testsuite/experimental/chrono/value.cc: Avoid ambiguities in C++17.
* testsuite/experimental/ratio/value.cc: Likewise.
* testsuite/ext/pb_ds/regression/hash_map_rand.cc: Disable test for
C++17.
* testsuite/ext/pb_ds/regression/hash_set_rand.cc: Likewise.
* testsuite/ext/pb_ds/regression/list_update_map_rand.cc: Likewise.
* testsuite/ext/pb_ds/regression/list_update_set_rand.cc: Likewise.
* testsuite/ext/pb_ds/regression/priority_queue_rand.cc: Likewise.
* testsuite/ext/pb_ds/regression/tree_map_rand.cc: Likewise.
* testsuite/ext/pb_ds/regression/tree_set_rand.cc: Likewise.
* testsuite/ext/pb_ds/regression/trie_map_rand.cc: Likewise.
* testsuite/ext/pb_ds/regression/trie_set_rand.cc: Likewise.
* testsuite/tr1/5_numerical_facilities/special_functions/
10_cyl_bessel_k/airy.cc: Adjust namespace of __detail::__airy for
C++17 compatibility.

From-SVN: r239534

8 years agoAdjust testcase for C++14 compatibility
Jonathan Wakely [Wed, 17 Aug 2016 13:38:58 +0000 (14:38 +0100)]
Adjust testcase for C++14 compatibility

* testsuite/24_iterators/headers/iterator/range_access.cc: Adjust
expected signatures for C++14 compatibility.

From-SVN: r239533

8 years agoPR 77264 constrain new std::basic_string overloads
Jonathan Wakely [Wed, 17 Aug 2016 13:38:52 +0000 (14:38 +0100)]
PR 77264 constrain new std::basic_string overloads

PR libstdc++/77264
* include/bits/basic_string.h (operator=(__sv_type)
(append(__sv_type), assign(__sv_type), insert(size_type, __sv_type))
(replace(size_type, size_type, __sv_type))
(replace(const_iterator, const_iterator, __sv_type))
(find(__sv_type, size_type), rfind(__sv_type, size_type))
(compare(size_type, size_type, __sv_type)): Reformat.
(_If_sv): Define helper for SFINAE constaints.
(append(const _Tp&, size_type, size_type))
(assign(const _Tp&, size_type, size_type))
(insert(size_type, const _Tp&, size_type, size_type))
(replace(size_type, size_type, const _Tp&, size_type, size_type)):
Use _If_sv.
* testsuite/21_strings/basic_string/modifiers/append/char/4.cc: Test
SFINAE constraints.
* testsuite/21_strings/basic_string/modifiers/append/wchar_t/4.cc:
Likewise.
* testsuite/21_strings/basic_string/modifiers/replace/char/7.cc:
Likewise.
* testsuite/21_strings/basic_string/modifiers/replace/wchar_t/7.cc:
Likewise.
* testsuite/21_strings/basic_string/modifiers/assign/char/4.cc:
Likewise.
* testsuite/21_strings/basic_string/modifiers/assign/wchar_t/4.cc:
Likewise.
* testsuite/21_strings/basic_string/modifiers/insert/char/3.cc:
Likewise.
* testsuite/21_strings/basic_string/modifiers/insert/wchar_t/3.cc:
Likewise.
* testsuite/21_strings/basic_string/modifiers/replace/char/7.cc:
Likewise.
* testsuite/21_strings/basic_string/operations/compare/char/2.cc:
Likewise.
* testsuite/21_strings/basic_string/operations/compare/wchar_t/2.cc:
Likewise.

From-SVN: r239532

8 years agoomp-low.c (lower_oacc_reductions): Adjust variable lookup to use maybe_lookup_decl...
Chung-Lin Tang [Wed, 17 Aug 2016 12:08:30 +0000 (12:08 +0000)]
omp-low.c (lower_oacc_reductions): Adjust variable lookup to use maybe_lookup_decl...

2016-08-17  Chung-Lin Tang  <cltang@codesourcery.com>

* omp-low.c (lower_oacc_reductions): Adjust variable lookup to use
maybe_lookup_decl, to handle nested acc loop directives.

testsuite/
* c-c++-common/goacc/reduction-6.c: New testcase.

From-SVN: r239530

8 years agore PR tree-optimization/76490 (when use -O2 -fcheck-founds compiler appears to hang...
Richard Biener [Wed, 17 Aug 2016 11:51:51 +0000 (11:51 +0000)]
re PR tree-optimization/76490 (when use -O2 -fcheck-founds compiler appears to hang and consumes all memory)

2016-08-17  Richard Biener  <rguenther@suse.de>

PR tree-optimization/76490
* tree-vrp.c (update_value_range): Preserve overflow infinities
when intersecting with ranges from get_range_info.
(operand_less_p): Handle overflow infinities correctly.
(value_range_constant_singleton): Use vrp_operand_equal_p
to handle overflow max/min correctly.
(vrp_valueize): Likewise.
(union_ranges): Likewise.
(intersect_ranges): Likewise.
(vrp_visit_phi_node): Improve iteration limitation to only
apply when we'll possibly re-visit the PHI via a changed argument
on the backedge.

* gfortran.fortran-torture/compile/pr76490.f90: New testcase.
* gcc.dg/pr52904.c: XFAIL.

From-SVN: r239529

8 years agot-aprofile (MULTILIB_EXCEPTIONS): Rewrite into ...
Thomas Preud'homme [Wed, 17 Aug 2016 11:15:29 +0000 (11:15 +0000)]
t-aprofile (MULTILIB_EXCEPTIONS): Rewrite into ...

2016-08-17  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/
    * config/arm/t-aprofile (MULTILIB_EXCEPTIONS): Rewrite into ...
    (MULTILIB_REQUIRED): This by specifying multilib needing to be built
    rather than those that should not be built.

From-SVN: r239528

8 years agomark_spam.py: Mark as spam all comments done by a creator
Martin Liska [Wed, 17 Aug 2016 10:30:54 +0000 (12:30 +0200)]
mark_spam.py: Mark as spam all comments done by a creator

* mark_spam.py: Mark as spam all comments done by a creator.

From-SVN: r239527

8 years agoDocument branch_changer.py script
Martin Liska [Wed, 17 Aug 2016 10:30:37 +0000 (12:30 +0200)]
Document branch_changer.py script

* branch_changer.py: Describe the script. Add sample usage
of the script.

From-SVN: r239526

8 years ago016-08-17 Stanislaw Halik <sthalik@misaki.pl>
Stanislaw Halik [Wed, 17 Aug 2016 09:34:52 +0000 (11:34 +0200)]
016-08-17  Stanislaw Halik  <sthalik@misaki.pl>

        PR target/66488
        * config/i386/xm-mingw32.h (HOST_BITS_PER_PTR): Define if __x86_64__.

From-SVN: r239525

8 years agotree-ssa.c: Include tree-cfg.h and tree-dfa.h.
Richard Biener [Wed, 17 Aug 2016 08:18:47 +0000 (08:18 +0000)]
tree-ssa.c: Include tree-cfg.h and tree-dfa.h.

2016-08-17  Richard Biener  <rguenther@suse.de>

* tree-ssa.c: Include tree-cfg.h and tree-dfa.h.
(verify_vssa): New function verifying virtual SSA form.
(verify_ssa): Call it.
* tree-ssa-loop-manip.c (slpeel_update_phi_nodes_for_guard2):
Do not apply loop-closed SSA handling to virtuals.
* ssa-iterators.h (op_iter_init): Handle GIMPLE_TRANSACTION.
* tree-into-ssa.c (prepare_use_sites_for): Skip virtual SSA names
when rewriting their symbol.
(prepare_def_site_for): Likewise.
* tree-chkp-opt.c (chkp_reduce_bounds_lifetime): Clear virtual
operands of moved stmts.

From-SVN: r239524

8 years agore PR tree-optimization/23855 (loop header should also be pulled out of the inner...
Richard Biener [Wed, 17 Aug 2016 08:11:32 +0000 (08:11 +0000)]
re PR tree-optimization/23855 (loop header should also be pulled out of the inner loop too)

2016-08-17  Richard Biener  <rguenther@suse.de>

PR tree-optimization/23855
* tree-ssa-loop-unswitch.c: Include tree-ssa-loop-manip.h.
(tree_unswitch_outer_loop): Iterate find_loop_guard as long as we
find guards to hoist.  Do not update SSA form but rewrite virtuals
into loop closed SSA.
(find_loop_guard): Adjust to skip already hoisted guards.  Do
not mark virtuals for renaming or update SSA form.

* gcc.dg/loop-unswitch-2.c: Adjust.

From-SVN: r239523

8 years agoDo not use LONG_LONG_TYPE_SIZE in #if macro condition
Martin Liska [Wed, 17 Aug 2016 06:55:35 +0000 (08:55 +0200)]
Do not use LONG_LONG_TYPE_SIZE in #if macro condition

* coverage.c (get_gcov_type): Replace GCOV_TYPE_SIZE with
a LONG_LONG_TYPE_SIZE comparison.
* gcov-io.h: Remove macro definitions.
* tree-profile.c (gimple_gen_edge_profiler): Replace usage
of GCOV_TYPE_ATOMIC_FETCH_ADD with a LONG_LONG_TYPE_SIZE
comparison.

From-SVN: r239522

8 years agoDaily bump.
GCC Administrator [Wed, 17 Aug 2016 00:16:17 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r239518

8 years agore PR tree-optimization/72817 (wrong code at -O3 on x86_64-linux-gnu (in both 32...
Jakub Jelinek [Tue, 16 Aug 2016 22:06:45 +0000 (00:06 +0200)]
re PR tree-optimization/72817 (wrong code at -O3 on x86_64-linux-gnu (in both 32-bit and 64-bit modes))

PR tree-optimization/72817
* gcc.dg/tree-ssa/pr72817.c (a): Change type from char to signed char.

From-SVN: r239514

8 years agoUpdate soft-fp from glibc (PR libgcc/77265).
Joseph Myers [Tue, 16 Aug 2016 21:30:56 +0000 (22:30 +0100)]
Update soft-fp from glibc (PR libgcc/77265).

This patch updates soft-fp from glibc, bringing in the fix for PR
libgcc/77265, XFmode extension to TFmode wrongly turning an infinity
into a NaN.  A test for that bug is added.

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

PR libgcc/77265
gcc/testsuite:
* gcc.dg/torture/float128-extend-inf.c: New test.

libgcc:
* soft-fp/adddf3.c: Update from glibc.
* soft-fp/addsf3.c: Likewise.
* soft-fp/addtf3.c: Likewise.
* soft-fp/divdf3.c: Likewise.
* soft-fp/divsf3.c: Likewise.
* soft-fp/divtf3.c: Likewise.
* soft-fp/double.h: Likewise.
* soft-fp/eqdf2.c: Likewise.
* soft-fp/eqsf2.c: Likewise.
* soft-fp/eqtf2.c: Likewise.
* soft-fp/extenddftf2.c: Likewise.
* soft-fp/extended.h: Likewise.
* soft-fp/extendsfdf2.c: Likewise.
* soft-fp/extendsftf2.c: Likewise.
* soft-fp/extendxftf2.c: Likewise.
* soft-fp/fixdfdi.c: Likewise.
* soft-fp/fixdfsi.c: Likewise.
* soft-fp/fixdfti.c: Likewise.
* soft-fp/fixsfdi.c: Likewise.
* soft-fp/fixsfsi.c: Likewise.
* soft-fp/fixsfti.c: Likewise.
* soft-fp/fixtfdi.c: Likewise.
* soft-fp/fixtfsi.c: Likewise.
* soft-fp/fixtfti.c: Likewise.
* soft-fp/fixunsdfdi.c: Likewise.
* soft-fp/fixunsdfsi.c: Likewise.
* soft-fp/fixunsdfti.c: Likewise.
* soft-fp/fixunssfdi.c: Likewise.
* soft-fp/fixunssfsi.c: Likewise.
* soft-fp/fixunssfti.c: Likewise.
* soft-fp/fixunstfdi.c: Likewise.
* soft-fp/fixunstfsi.c: Likewise.
* soft-fp/fixunstfti.c: Likewise.
* soft-fp/floatdidf.c: Likewise.
* soft-fp/floatdisf.c: Likewise.
* soft-fp/floatditf.c: Likewise.
* soft-fp/floatsidf.c: Likewise.
* soft-fp/floatsisf.c: Likewise.
* soft-fp/floatsitf.c: Likewise.
* soft-fp/floattidf.c: Likewise.
* soft-fp/floattisf.c: Likewise.
* soft-fp/floattitf.c: Likewise.
* soft-fp/floatundidf.c: Likewise.
* soft-fp/floatundisf.c: Likewise.
* soft-fp/floatunditf.c: Likewise.
* soft-fp/floatunsidf.c: Likewise.
* soft-fp/floatunsisf.c: Likewise.
* soft-fp/floatunsitf.c: Likewise.
* soft-fp/floatuntidf.c: Likewise.
* soft-fp/floatuntisf.c: Likewise.
* soft-fp/floatuntitf.c: Likewise.
* soft-fp/gedf2.c: Likewise.
* soft-fp/gesf2.c: Likewise.
* soft-fp/getf2.c: Likewise.
* soft-fp/ledf2.c: Likewise.
* soft-fp/lesf2.c: Likewise.
* soft-fp/letf2.c: Likewise.
* soft-fp/muldf3.c: Likewise.
* soft-fp/mulsf3.c: Likewise.
* soft-fp/multf3.c: Likewise.
* soft-fp/negdf2.c: Likewise.
* soft-fp/negsf2.c: Likewise.
* soft-fp/negtf2.c: Likewise.
* soft-fp/op-1.h: Likewise.
* soft-fp/op-2.h: Likewise.
* soft-fp/op-4.h: Likewise.
* soft-fp/op-8.h: Likewise.
* soft-fp/op-common.h: Likewise.
* soft-fp/quad.h: Likewise.
* soft-fp/single.h: Likewise.
* soft-fp/soft-fp.h: Likewise.
* soft-fp/subdf3.c: Likewise.
* soft-fp/subsf3.c: Likewise.
* soft-fp/subtf3.c: Likewise.
* soft-fp/truncdfsf2.c: Likewise.
* soft-fp/trunctfdf2.c: Likewise.
* soft-fp/trunctfsf2.c: Likewise.
* soft-fp/trunctfxf2.c: Likewise.
* soft-fp/unorddf2.c: Likewise.
* soft-fp/unordsf2.c: Likewise.
* soft-fp/unordtf2.c: Likewise.

From-SVN: r239513

8 years agoi386.c (enum ix86_builtins): Reorder enumerators...
Jakub Jelinek [Tue, 16 Aug 2016 19:27:41 +0000 (21:27 +0200)]
i386.c (enum ix86_builtins): Reorder enumerators...

* config/i386/i386.c (enum ix86_builtins): Reorder enumerators, so
that builtins not mentioned in bdesc_* arrays come first, then
the ones mentioned in bdesc_* arrays in the order they appear in
the arrays in between IX86_BUILTIN__BDESC_*_FIRST and
IX86_BUILTIN__BDESC_*_LAST enumerator.
(bdesc_mpx): Fix up a comment typo.
(bdesc_multi_arg): Remove __builtin_ia32_vpcomne[bwdq] and
__builtin_ia32_vpcomneu[bwdq] builtins.
(BDESC_VERIFY, BDESC_VERIFYS): Define.
(ix86_init_mmx_sse_builtins, ix86_init_mpx_builtins): Verify
enum ix86_builtins ordering.
(ix86_expand_builtin): Use enum ix86_builtins ordering assumption
for direct bdesc_* array member access instead of searching all the
arrays until an fcode match is found.

From-SVN: r239512

8 years agoi386.md (*ashl<mode>3_mask): Rewrite define_insn pattern as define_insn_and_split.
Uros Bizjak [Tue, 16 Aug 2016 18:23:47 +0000 (20:23 +0200)]
i386.md (*ashl<mode>3_mask): Rewrite define_insn pattern as define_insn_and_split.

* config/i386/i386.md (*ashl<mode>3_mask): Rewrite define_insn
pattern as define_insn_and_split.  Split insn before reload to
ashl<mode>3_1.
(*<shift_insn><mode>3_mask): Ditto.  Split insn before reload to
<shift_insn><mode>3_1.
(*<rotate_insn><mode>3_mask): Ditto.  Split insn before reload to
<rotate_insn><mode>3_1.

From-SVN: r239511

8 years agoFix caret locations in format_type_warning (PR c/72857)
David Malcolm [Tue, 16 Aug 2016 18:19:34 +0000 (18:19 +0000)]
Fix caret locations in format_type_warning (PR c/72857)

gcc/c-family/ChangeLog:
PR c/72857
* c-common.c (substring_loc::get_range): Rename to...
(substring_loc::get_location): ...this, converting param from a
source_range * to a location_t *.  Call
get_source_location_for_substring rather than
get_source_range_for_substring, and pass in m_caret_idx.
* c-common.h (substring_loc::substring_loc): Add param "caret_idx".
(substring_loc::get_range): Replace with...
(substring_loc::get_location): ...this.
(substring_loc::set_caret_index): New method.
(substring_loc): Add field m_caret_idx.
* c-format.c (format_warning_va): Update for above changes.
Rename local "substring_loc" to "fmt_substring_loc" to avoid
clashing with type name.
(format_warning_at_char): Add caret_idx param to substring_loc ctor.
(check_argument_type): Likewise.
(format_type_warning): Rename param "fmt_loc" to "whole_fmt_loc"
Use a copy when emitting warnings, setting the caret index from TYPE.

gcc/ChangeLog:
PR c/72857
* input.c (get_source_range_for_substring): Rename to...
(get_source_location_for_substring): ...this, adding param
"caret_idx", and converting output param from source_range * to
location_t *.
(get_source_range_for_char): New function.
(get_num_source_ranges_for_substring): Update comment to reflect
above renaming.
(assert_char_at_range): Update to use get_source_range_for_char
rather than get_source_range_for_substring.
(test_lexer_string_locations_concatenation_2): Likewise.
* substring-locations.h (get_source_range_for_substring): Rename
to...
(get_source_location_for_substring): ...this, and adding param
"caret_idx", and converting output param from source_range * to
location_t *.

gcc/testsuite/ChangeLog:
PR c/72857
* gcc.dg/format/asm_fprintf-1.c: Restore column numbers
for embedded NUL.
* gcc.dg/format/c90-printf-1.c: Restore column numbers.
* gcc.dg/format/diagnostic-ranges.c (test_hex): Update expected
caret placement.
(test_oct): Likewise.
(test_multiple): Likewise.
(test_field_width_specifier): Likewise.
(test_field_width_specifier_2): New function.
(test_field_precision_specifier): New function.
(test_embedded_nul): Update expected caret placement.
(test_non_contiguous_strings): Update line number.
* gcc.dg/plugin/diagnostic-test-string-literals-1.c
(__emit_string_literal_range): Add "caret_idx" param.
(test_simple_string_literal): Add value for new param, updating
expected output..
(test_concatenated_string_literal): Likewise.
(test_multiline_string_literal): Likewise.
(test_hex): Likewise.
(test_oct): Likewise.
(test_multiple): Likewise.
(test_ucn4): Likewise.
(test_ucn8): Likewise.
(test_u8): Likewise.
(test_u): Likewise; update expected message, from "range" to
"location".
(test_U): Likewise.
(test_L): Likewise.
(test_macro): Add value for new param.
* gcc.dg/plugin/diagnostic-test-string-literals-2.c
(__emit_string_literal_range): Add "caret_idx" param.
(test_stringified_token_1): Add value for new param.  Update
expected message, from "range" to "location".
(test_stringized_token_2): Likewise, adding param to macro.
(test_stringified_token_3): Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_string_literals.c
(emit_warning): Convert param from source_range to location_t.
(test_string_literals): Add caret_idx param, and use it when
constructing a substring_loc.  Update error message, from
"range" to "location".

From-SVN: r239510

8 years agoMove class temp_source_file from input.c to selftest.c/h
David Malcolm [Tue, 16 Aug 2016 18:02:43 +0000 (18:02 +0000)]
Move class temp_source_file from input.c to selftest.c/h

gcc/ChangeLog:
* input.c (class selftest::temp_source_file): Move to
selftest.h.
(selftest::temp_source_file::temp_source_file): Move to
selftest.c.
(selftest::temp_source_file::~temp_source_file): Likewise.
* selftest.c (selftest::temp_source_file::temp_source_file): Move
here from input.c.
(selftest::temp_source_file::~temp_source_file): Likewise.
* selftest.h (class selftest::temp_source_file): Move here from
input.c

From-SVN: r239509