Go to file
Joseph Myers bb75facd24 Implement C11 excess precision semantics for conversions (PR c/82071).
C11 semantics for excess precision (from N1531) are that an implicit
conversion (from the usual arithmetic conversions, not by assignment)
from integer to floating point has a result in the corresponding
evaluation format of that floating-point type, so possibly with excess
precision (whereas a cast or conversion by assignment from integer to
floating point must produce a value without excess range or precision,
as always).  This patch makes GCC support those semantics if
flag_isoc11 (which in turn means that conditional expressions need to
support generating a result with excess precision even if neither
operand had excess precision).

C99 is less than entirely clear in this regard, but my reading as
outlined at <https://gcc.gnu.org/ml/gcc-patches/2008-11/msg00105.html>
is that the results of conversions from integer to floating-point
types are always expected to be representable in the target type
without excess precision, and this patch conservatively keeps these
semantics for pre-C11 (i.e. if an older standard is explicitly
selected).

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

	PR c/82071

gcc/c:
	* c-typeck.c (ep_convert_and_check): Just call convert_and_check
	for C11.
	(build_conditional_expr): For C11, generate result with excess
	precision when one argument is an integer and the other is of a
	type using excess precision.

gcc/testsuite:
	* gcc.target/i386/excess-precision-8.c: New test.

From-SVN: r252847
2017-09-15 21:49:02 +01:00
config
contrib
fixincludes
gcc Implement C11 excess precision semantics for conversions (PR c/82071). 2017-09-15 21:49:02 +01:00
gnattools re PR ada/81878 (--disable-bootstrap --enable-languages=ada fails) 2017-08-17 13:39:58 +00:00
gotools libgo: update to go1.9 2017-09-14 17:11:35 +00:00
include [include] Add macro DISABLE_COPY_AND_ASSIGN 2017-09-15 15:40:50 +00:00
INSTALL
intl
libada
libatomic
libbacktrace re PR other/81096 (test case ttest in libbacktrace fails starting with its introduction in r249111) 2017-09-12 17:00:00 +00:00
libcc1
libcilkrts
libcpp invoke.texi: Document -std=c++17 and -std=gnu++17 and document c++1z and gnu++1z as deprecated. 2017-09-15 18:15:46 +02:00
libdecnumber
libffi
libgcc config.host (*-*-vxworks7): Widen scope to vxworks7*. 2017-09-01 13:43:01 +00:00
libgfortran re PR fortran/34640 (ICE when assigning item of a derived-component to a pointer) 2017-09-10 17:02:53 +00:00
libgo libgo: update to go1.9 2017-09-14 17:11:35 +00:00
libgomp Introduce libgomp/testsuite/libgomp.c-c++-common 2017-09-14 21:15:40 +00:00
libhsail-rt
libiberty [demangler] Fix nested generic lambda 2017-09-15 12:23:57 +00:00
libitm
libmpx
libobjc [2/77] Add an E_ prefix to case statements 2017-08-30 11:08:28 +00:00
liboffloadmic
libquadmath re PR libquadmath/81848 (Add PowerPC support to libquadmath) 2017-09-01 22:10:57 +00:00
libsanitizer
libssp
libstdc++-v3 invoke.texi: Document -std=c++17 and -std=gnu++17 and document c++1z and gnu++1z as deprecated. 2017-09-15 18:15:46 +02:00
libvtv
lto-plugin
maintainer-scripts
zlib
.dir-locals.el
.gitattributes
.gitignore
ABOUT-NLS
ChangeLog * MAINTAINERS: Remove myself as a vxworks maintainer. 2017-09-15 17:34:43 +00:00
ChangeLog.jit
ChangeLog.tree-ssa
compile
config-ml.in
config.guess
config.rpath
config.sub
configure
configure.ac
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
COPYING.RUNTIME
depcomp
install-sh
libtool-ldflags
libtool.m4
lt~obsolete.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
MAINTAINERS * MAINTAINERS: Remove myself as a vxworks maintainer. 2017-09-15 17:34:43 +00:00
Makefile.def
Makefile.in
Makefile.tpl
missing
mkdep
mkinstalldirs
move-if-change
README
symlink-tree
ylwrap

This directory contains the GNU Compiler Collection (GCC).

The GNU Compiler Collection is free software.  See the files whose
names start with COPYING for copying permission.  The manuals, and
some of the runtime libraries, are under different terms; see the
individual source files for details.

The directory INSTALL contains copies of the installation information
as HTML and plain text.  The source of this information is
gcc/doc/install.texi.  The installation information includes details
of what is included in the GCC sources and what files GCC installs.

See the file gcc/doc/gcc.texi (together with other files that it
includes) for usage and porting information.  An online readable
version of the manual is in the files gcc/doc/gcc.info*.

See http://gcc.gnu.org/bugs/ for how to report bugs usefully.

Copyright years on GCC source files may be listed using range
notation, e.g., 1987-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.