Commit 7273813a by Jakub Jelinek Committed by Jakub Jelinek

re PR c/47473 (Incorrect computation with complex numbers when using -std=c99)

	PR c/47473
	* c-lex.c (interpret_float): If CPP_N_IMAGINARY, ensure
	EXCESS_PRECISION_EXPR is created with COMPLEX_TYPE instead of
	REAL_TYPE.

	* gcc.dg/torture/pr47473.c: New test.

From-SVN: r169299
parent b800200d
2011-01-26 Jakub Jelinek <jakub@redhat.com>
PR c/47473
* c-lex.c (interpret_float): If CPP_N_IMAGINARY, ensure
EXCESS_PRECISION_EXPR is created with COMPLEX_TYPE instead of
REAL_TYPE.
2011-01-26 Arnaud Charlet <charlet@adacore.com>
* c-ada-spec.c (dump_generic_ada_node): Avoid dereferencing null type.
......
/* Mainly the interface between cpplib and the C front ends.
Copyright (C) 1987, 1988, 1989, 1992, 1994, 1995, 1996, 1997
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010,
2011 Free Software Foundation, Inc.
This file is part of GCC.
......@@ -752,8 +752,15 @@ interpret_float (const cpp_token *token, unsigned int flags)
/* Create a node with determined type and value. */
value = build_real (const_type, real);
if (flags & CPP_N_IMAGINARY)
value = build_complex (NULL_TREE, convert (const_type, integer_zero_node),
value);
{
value = build_complex (NULL_TREE, convert (const_type,
integer_zero_node), value);
if (type != const_type)
{
const_type = TREE_TYPE (value);
type = build_complex_type (type);
}
}
if (type != const_type)
value = build1 (EXCESS_PRECISION_EXPR, type, value);
......
2011-01-26 Jakub Jelinek <jakub@redhat.com>
PR c/47473
* gcc.dg/torture/pr47473.c: New test.
2011-01-26 Jan Hubicka <jh@suse.cz>
PR target/47237
......
/* PR c/47473 */
/* { dg-do run } */
/* { dg-options "-std=c99" } */
int
main (void)
{
long double _Complex w = 0.2L - 0.3iL;
w = w * (0.3L - (0.0F + 1.0iF) * 0.9L);
if (__builtin_fabsl (__real__ w + 0.21L) > 0.001L
|| __builtin_fabsl (__imag__ w + 0.27L) > 0.001L)
__builtin_abort ();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment