Parse __builtin_inf{,f,l} and correct __builtin_nand to __builtin_nanl.
authorChristoph Mallon <christoph.mallon@gmx.de>
Thu, 2 Oct 2008 07:57:02 +0000 (07:57 +0000)
committerChristoph Mallon <christoph.mallon@gmx.de>
Thu, 2 Oct 2008 07:57:02 +0000 (07:57 +0000)
[r22406]

ast.c
ast2firm.c
parser.c
tokens.inc

diff --git a/ast.c b/ast.c
index 4daf4f6..6b0542e 100644 (file)
--- a/ast.c
+++ b/ast.c
@@ -1672,9 +1672,12 @@ static bool is_builtin_const_call(const expression_t *expression)
 
        switch (symbol->ID) {
        case T___builtin_huge_val:
+       case T___builtin_inf:
+       case T___builtin_inff:
+       case T___builtin_infl:
        case T___builtin_nan:
        case T___builtin_nanf:
-       case T___builtin_nand:
+       case T___builtin_nanl:
                return true;
        }
 
index eb68d0f..d237cfb 100644 (file)
@@ -1578,7 +1578,11 @@ static ir_node *process_builtin_call(const call_expression_t *call)
 
                return res;
        }
-       case T___builtin_huge_val: {
+
+       case T___builtin_huge_val:
+       case T___builtin_inf:
+       case T___builtin_inff:
+       case T___builtin_infl: {
                ir_mode *mode = get_ir_mode(function_type->function.return_type);
                tarval  *tv   = get_mode_infinite(mode);
                ir_node *res  = new_d_Const(dbgi, mode, tv);
@@ -1586,7 +1590,7 @@ static ir_node *process_builtin_call(const call_expression_t *call)
        }
        case T___builtin_nan:
        case T___builtin_nanf:
-       case T___builtin_nand: {
+       case T___builtin_nanl: {
                /* Ignore string for now... */
                assert(is_type_function(function_type));
                ir_mode *mode = get_ir_mode(function_type->function.return_type);
index 452095e..6c8e3a3 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -6005,11 +6005,17 @@ static type_t *get_builtin_symbol_type(symbol_t *symbol)
                return make_function_1_type(type_void_ptr, type_size_t);
        case T___builtin_huge_val:
                return make_function_0_type(type_double);
+       case T___builtin_inf:
+               return make_function_0_type(type_double);
+       case T___builtin_inff:
+               return make_function_0_type(type_float);
+       case T___builtin_infl:
+               return make_function_0_type(type_long_double);
        case T___builtin_nan:
                return make_function_1_type(type_double, type_char_ptr);
        case T___builtin_nanf:
                return make_function_1_type(type_float, type_char_ptr);
-       case T___builtin_nand:
+       case T___builtin_nanl:
                return make_function_1_type(type_long_double, type_char_ptr);
        case T___builtin_va_end:
                return make_function_1_type(type_void, type_valist);
@@ -6837,9 +6843,12 @@ static expression_t *parse_primary_expression(void)
                case T___builtin_va_arg:         return parse_va_arg();
                case T___builtin_expect:
                case T___builtin_alloca:
+               case T___builtin_inf:
+               case T___builtin_inff:
+               case T___builtin_infl:
                case T___builtin_nan:
-               case T___builtin_nand:
                case T___builtin_nanf:
+               case T___builtin_nanl:
                case T___builtin_huge_val:
                case T___builtin_va_end:         return parse_builtin_symbol();
                case T___builtin_isgreater:
@@ -9697,9 +9706,12 @@ expression_statment:
        case T___builtin_islessequal:
        case T___builtin_islessgreater:
        case T___builtin_isunordered:
+       case T___builtin_inf:
+       case T___builtin_inff:
+       case T___builtin_infl:
        case T___builtin_nan:
-       case T___builtin_nand:
        case T___builtin_nanf:
+       case T___builtin_nanl:
        case T___builtin_offsetof:
        case T___builtin_prefetch:
        case T___builtin_va_arg:
index 2f9cef9..d6d6483 100644 (file)
@@ -55,9 +55,12 @@ S(_ALL, __builtin_offsetof)
 S(_ALL, __builtin_va_arg)
 S(_ALL, __builtin_va_end)
 S(_ALL, __builtin_alloca)
-S(_ALL, __builtin_nanf)
+S(_ALL, __builtin_inf)
+S(_ALL, __builtin_inff)
+S(_ALL, __builtin_infl)
 S(_ALL, __builtin_nan)
-S(_ALL, __builtin_nand)
+S(_ALL, __builtin_nanf)
+S(_ALL, __builtin_nanl)
 S(_ALL, __builtin_isgreater)
 S(_ALL, __builtin_isgreaterequal)
 S(_ALL, __builtin_isless)