/* make sure the type is constructed */
(void) get_ir_type(type);
+ /* for gcc compatibility we have to produce (dummy) addresses for some
+ * builtins */
+ if (entity->kind == ENTITY_FUNCTION && entity->function.btk != bk_none) {
+ if (warning.other) {
+ warningf(&ref->base.source_position,
+ "taking address of builtin '%Y'", ref->entity->base.symbol);
+ }
+
+ /* simply create a NULL pointer */
+ ir_mode *mode = get_ir_mode_arithmetic(type_void_ptr);
+ ir_node *res = new_Const_long(mode, 0);
+
+ return res;
+ }
+
switch ((declaration_kind_t) entity->declaration.kind) {
case DECLARATION_KIND_UNKNOWN:
break;
}
case DECLARATION_KIND_FUNCTION: {
ir_mode *const mode = get_ir_mode_storage(type);
-
- if (entity->function.btk != bk_none) {
- /* for gcc compatibility we have to produce (dummy) addresses for some
- * builtins */
- if (warning.other) {
- warningf(&ref->base.source_position,
- "taking address of builtin '%Y'", ref->entity->base.symbol);
- }
-
- /* simply create a NULL pointer */
- ir_mode *mode = get_ir_mode_arithmetic(type_void_ptr);
- ir_node *res = new_Const_long(mode, 0);
-
- return res;
- }
return create_symconst(dbgi, mode, entity->function.irentity);
}
case DECLARATION_KIND_INNER_FUNCTION: {
return create_invalid_expression();
}
-#if 0
-/**
- * Parses a __builtin_expect(, end_error) expression.
- */
-static expression_t *parse_builtin_expect(void, end_error)
-{
- expression_t *expression
- = allocate_expression_zero(EXPR_BINARY_BUILTIN_EXPECT);
-
- eat(T___builtin_expect);
-
- expect('(', end_error);
- expression->binary.left = parse_assignment_expression();
- expect(',', end_error);
- expression->binary.right = parse_constant_expression();
- expect(')', end_error);
-
- expression->base.type = expression->binary.left->base.type;
-
- return expression;
-end_error:
- return create_invalid_expression();
-}
-#endif
-
/**
* Parses a MS assume() expression.
*/