- implemented __builtin_trap()
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Wed, 24 Dec 2008 02:38:38 +0000 (02:38 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Wed, 24 Dec 2008 02:38:38 +0000 (02:38 +0000)
[r24883]

ast2firm.c
parser.c
tokens.inc

index 287c078..555a717 100644 (file)
@@ -1676,11 +1676,17 @@ static ir_node *process_builtin_call(const call_expression_t *call)
                        in[1] = new_Const_long(mode_int, 0);
                        in[2] = new_Const_long(mode_int, 3);
                }
-               ir_type *tp  = get_ir_type((type_t*) function_type);
+               ir_type *tp  = get_ir_type(function_type);
                ir_node *irn = new_d_Builtin(dbgi, get_store(), ir_bk_prefetch, 3, in, tp);
                set_store(new_Proj(irn, mode_M, pn_Builtin_M));
                return NULL;
        }
+       case T___builtin_trap: {
+               ir_type *tp  = get_ir_type(function_type);
+               ir_node *irn = new_d_Builtin(dbgi, get_store(), ir_bk_prefetch, 0, NULL, tp);
+               set_store(new_Proj(irn, mode_M, pn_Builtin_M));
+               return NULL;
+       }
        default:
                panic("unsupported builtin found");
        }
index 964e69f..32055db 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -6973,6 +6973,11 @@ static type_t *get_builtin_symbol_type(symbol_t *symbol)
                return make_function_1_type(type_int, type_unsigned_int);
        case T___builtin_prefetch:
                return make_function_1_type_variadic(type_float, type_void_ptr);
+       case T___builtin_trap: {
+               type_t *type = make_function_0_type(type_void);
+               type->function.base.modifiers |= DM_NORETURN;
+               return type;
+       }
        default:
                internal_errorf(HERE, "not implemented builtin identifier found");
        }
@@ -7845,7 +7850,8 @@ static expression_t *parse_primary_expression(void)
                case T___builtin_ctz:
                case T___builtin_popcount:
                case T___builtin_parity:
-               case T___builtin_prefetch:           return parse_builtin_symbol();
+               case T___builtin_prefetch:
+               case T___builtin_trap:               return parse_builtin_symbol();
                case T___builtin_isgreater:
                case T___builtin_isgreaterequal:
                case T___builtin_isless:
@@ -8155,7 +8161,7 @@ static void handle_builtin_argument_restrictions(call_expression_t *call) {
                        break;
                }
                case T___builtin_prefetch: {
-                       /* second and third argument must be constant if existant */
+                       /* second and third argument must be constant if existent */
                        call_argument_t *rw = call->arguments->next;
                        call_argument_t *locality = NULL;
 
index 2e39abf..607e3e2 100644 (file)
@@ -116,6 +116,7 @@ S(_ALL, __builtin_clz)
 S(_ALL, __builtin_ctz)
 S(_ALL, __builtin_popcount)
 S(_ALL, __builtin_parity)
+S(_ALL, __builtin_trap)
 S(_ALL, __builtin_types_compatible_p)
 S(_ALL, __PRETTY_FUNCTION__)
 S(_ALL, __FUNCTION__)