EXPR_FUNCNAME,
EXPR_BUILTIN_SYMBOL,
EXPR_BUILTIN_CONSTANT_P,
+ EXPR_BUILTIN_TYPES_COMPATIBLE_P,
EXPR_BUILTIN_PREFETCH,
EXPR_OFFSETOF,
EXPR_VA_START,
case EXPR_UNARY_DELETE_ARRAY:
/**
- * unary expression with optinal operand
+ * unary expression with optional operand
*/
#define EXPR_UNARY_CASES_OPTIONAL \
case EXPR_UNARY_THROW: \
expression_t *value;
};
+struct builtin_types_compatible_expression_t {
+ expression_base_t base;
+ type_t *left;
+ type_t *right;
+};
+
struct builtin_prefetch_expression_t {
expression_base_t base;
expression_t *adr;
};
union expression_t {
- expression_kind_t kind;
- expression_base_t base;
- const_expression_t conste;
- funcname_expression_t funcname;
- string_literal_expression_t string;
- wide_string_literal_expression_t wide_string;
- compound_literal_expression_t compound_literal;
- builtin_symbol_expression_t builtin_symbol;
- builtin_constant_expression_t builtin_constant;
- builtin_prefetch_expression_t builtin_prefetch;
- reference_expression_t reference;
- call_expression_t call;
- unary_expression_t unary;
- binary_expression_t binary;
- select_expression_t select;
- array_access_expression_t array_access;
- typeprop_expression_t typeprop;
- offsetof_expression_t offsetofe;
- va_start_expression_t va_starte;
- va_arg_expression_t va_arge;
- conditional_expression_t conditional;
- statement_expression_t statement;
- classify_type_expression_t classify_type;
- label_address_expression_t label_address;
+ expression_kind_t kind;
+ expression_base_t base;
+ const_expression_t conste;
+ funcname_expression_t funcname;
+ string_literal_expression_t string;
+ wide_string_literal_expression_t wide_string;
+ compound_literal_expression_t compound_literal;
+ builtin_symbol_expression_t builtin_symbol;
+ builtin_constant_expression_t builtin_constant;
+ builtin_types_compatible_expression_t builtin_types_compatible;
+ builtin_prefetch_expression_t builtin_prefetch;
+ reference_expression_t reference;
+ call_expression_t call;
+ unary_expression_t unary;
+ binary_expression_t binary;
+ select_expression_t select;
+ array_access_expression_t array_access;
+ typeprop_expression_t typeprop;
+ offsetof_expression_t offsetofe;
+ va_start_expression_t va_starte;
+ va_arg_expression_t va_arge;
+ conditional_expression_t conditional;
+ statement_expression_t statement;
+ classify_type_expression_t classify_type;
+ label_address_expression_t label_address;
};
typedef enum initializer_kind_t {
GNU_AK_FASTCALL,
GNU_AK_DEPRECATED,
GNU_AK_NOINLINE,
+ GNU_AK_RETURNS_TWICE,
GNU_AK_NORETURN,
GNU_AK_NAKED,
GNU_AK_PURE,
STATEMENT_COMPOUND,
STATEMENT_RETURN,
STATEMENT_DECLARATION,
- STATEMENT_LOCAL_LABEL,
STATEMENT_IF,
STATEMENT_SWITCH,
STATEMENT_EXPRESSION,
statement_base_t base;
statement_t *statements;
scope_t scope;
+ bool stmt_expr; /* The compound statement is a statement expression */
};
struct declaration_statement_t {
entity_t *declarations_end;
};
-struct local_label_statement_t {
- statement_base_t base;
- entity_t *labels_begin;
- entity_t *labels_end;
-};
-
struct if_statement_t {
statement_base_t base;
expression_t *condition;
return_statement_t returns;
compound_statement_t compound;
declaration_statement_t declaration;
- local_label_statement_t local_label;
if_statement_t ifs;
switch_statement_t switchs;
goto_statement_t gotos;