From: wilson Date: Tue, 17 Aug 2004 00:00:50 +0000 (+0000) Subject: Make unsafe vector float optimizations dependent on -ffast-math. X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=4c77974444cb8aad3524031282d4190346a6d0b5 Make unsafe vector float optimizations dependent on -ffast-math. * tree.h (VECTOR_FLOAT_TYPE_P): New. (FLOAT_TYPE_P): Use it. * c-typeck.c (build_binary_op): After convert calls, check for check for ERROR_MARK operands. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@86088 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 49d413af340..e7e7961811b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-08-16 James E Wilson + + * tree.h (VECTOR_FLOAT_TYPE_P): New. + (FLOAT_TYPE_P): Use it. + * c-typeck.c (build_binary_op): After convert calls, check for + check for ERROR_MARK operands. + 2004-08-16 Zack Weinberg * Makefile.in (BUILD_PREFIX, BUILD_PREFIX_1): Delete. diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 5fca42def6e..168883421f4 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -7551,6 +7551,11 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1, op0 = convert (result_type, op0); if (TREE_TYPE (op1) != result_type) op1 = convert (result_type, op1); + + /* This can happen if one operand has a vector type, and the other + has a different type. */ + if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK) + return error_mark_node; } if (build_type == NULL_TREE) diff --git a/gcc/tree.h b/gcc/tree.h index ff03d9c7aa6..4feabefb2c4 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -668,11 +668,18 @@ extern void tree_operand_check_failed (int, enum tree_code, (TREE_CODE (TYPE) == COMPLEX_TYPE \ && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE) +/* Nonzero if TYPE represents a vector floating-point type. */ + +#define VECTOR_FLOAT_TYPE_P(TYPE) \ + (TREE_CODE (TYPE) == VECTOR_TYPE \ + && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE) + /* Nonzero if TYPE represents a floating-point type, including complex - floating-point types. */ + and vector floating-point types. */ #define FLOAT_TYPE_P(TYPE) \ - (SCALAR_FLOAT_TYPE_P (TYPE) || COMPLEX_FLOAT_TYPE_P (TYPE)) + (SCALAR_FLOAT_TYPE_P (TYPE) || COMPLEX_FLOAT_TYPE_P (TYPE) \ + || VECTOR_FLOAT_TYPE_P (TYPE)) /* Nonzero if TYPE represents an aggregate (multi-component) type. */