projects
/
cparser
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
issue a warning if returning the address of a local variable
[cparser]
/
ast_t.h
diff --git
a/ast_t.h
b/ast_t.h
index
0f5f420
..
d19147a
100644
(file)
--- a/
ast_t.h
+++ b/
ast_t.h
@@
-25,10
+25,13
@@
typedef enum {
EXPR_ARRAY_ACCESS,
EXPR_SIZEOF,
EXPR_CLASSIFY_TYPE,
EXPR_ARRAY_ACCESS,
EXPR_SIZEOF,
EXPR_CLASSIFY_TYPE,
+ EXPR_ALIGNOF,
EXPR_FUNCTION,
EXPR_PRETTY_FUNCTION,
EXPR_BUILTIN_SYMBOL,
EXPR_FUNCTION,
EXPR_PRETTY_FUNCTION,
EXPR_BUILTIN_SYMBOL,
+ EXPR_BUILTIN_CONSTANT_P,
+ EXPR_BUILTIN_PREFETCH,
EXPR_OFFSETOF,
EXPR_VA_START,
EXPR_VA_ARG,
EXPR_OFFSETOF,
EXPR_VA_START,
EXPR_VA_ARG,
@@
-48,7
+51,8
@@
typedef enum {
EXPR_UNARY_CAST,
EXPR_UNARY_CAST_IMPLICIT, /**< compiler generated cast */
EXPR_UNARY_ASSUME, /**< MS __assume() */
EXPR_UNARY_CAST,
EXPR_UNARY_CAST_IMPLICIT, /**< compiler generated cast */
EXPR_UNARY_ASSUME, /**< MS __assume() */
- EXPR_UNARY_LAST = EXPR_UNARY_ASSUME,
+ EXPR_UNARY_BITFIELD_EXTRACT,
+ EXPR_UNARY_LAST = EXPR_UNARY_BITFIELD_EXTRACT,
EXPR_BINARY_FIRST,
EXPR_BINARY_ADD = EXPR_BINARY_FIRST,
EXPR_BINARY_FIRST,
EXPR_BINARY_ADD = EXPR_BINARY_FIRST,
@@
-90,7
+94,7
@@
typedef enum {
EXPR_BINARY_ISLESSGREATER,
EXPR_BINARY_ISUNORDERED,
EXPR_BINARY_LAST = EXPR_BINARY_ISUNORDERED,
EXPR_BINARY_ISLESSGREATER,
EXPR_BINARY_ISUNORDERED,
EXPR_BINARY_LAST = EXPR_BINARY_ISUNORDERED,
-} expression_
type
_t;
+} expression_
kind
_t;
/* convenience macros */
#define EXPR_BINARY_CASES \
/* convenience macros */
#define EXPR_BINARY_CASES \
@@
-145,14
+149,15
@@
typedef enum {
case EXPR_UNARY_PREFIX_DECREMENT: \
case EXPR_UNARY_CAST: \
case EXPR_UNARY_CAST_IMPLICIT: \
case EXPR_UNARY_PREFIX_DECREMENT: \
case EXPR_UNARY_CAST: \
case EXPR_UNARY_CAST_IMPLICIT: \
- case EXPR_UNARY_ASSUME:
+ case EXPR_UNARY_ASSUME: \
+ case EXPR_UNARY_BITFIELD_EXTRACT:
struct context_t {
struct context_t {
- declaration_t *declarations;
+ declaration_t *declarations;
/**< List of declarations in this context. */
};
struct expression_base_t {
};
struct expression_base_t {
- expression_
type_t type
;
+ expression_
kind_t kind
;
type_t *datatype;
source_position_t source_position;
};
type_t *datatype;
source_position_t source_position;
};
@@
-180,6
+185,18
@@
struct builtin_symbol_expression_t {
symbol_t *symbol;
};
symbol_t *symbol;
};
+struct builtin_constant_expression_t {
+ expression_base_t expression;
+ expression_t *value;
+};
+
+struct builtin_prefetch_expression_t {
+ expression_base_t expression;
+ expression_t *adr;
+ expression_t *rw;
+ expression_t *locality;
+};
+
struct reference_expression_t {
expression_base_t expression;
symbol_t *symbol;
struct reference_expression_t {
expression_base_t expression;
symbol_t *symbol;
@@
-229,6
+246,11
@@
struct sizeof_expression_t {
expression_t *size_expression;
};
expression_t *size_expression;
};
+struct alignof_expression_t {
+ expression_base_t expression;
+ type_t *type;
+};
+
struct designator_t {
symbol_t *symbol;
expression_t *array_access;
struct designator_t {
symbol_t *symbol;
expression_t *array_access;
@@
-270,12
+292,14
@@
struct classify_type_expression_t {
};
union expression_t {
};
union expression_t {
- expression_
type_t type
;
+ expression_
kind_t kind
;
expression_base_t base;
const_expression_t conste;
string_literal_expression_t string;
wide_string_literal_expression_t wide_string;
builtin_symbol_expression_t builtin_symbol;
expression_base_t base;
const_expression_t conste;
string_literal_expression_t string;
wide_string_literal_expression_t wide_string;
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;
reference_expression_t reference;
call_expression_t call;
unary_expression_t unary;
@@
-289,6
+313,7
@@
union expression_t {
conditional_expression_t conditional;
statement_expression_t statement;
classify_type_expression_t classify_type;
conditional_expression_t conditional;
statement_expression_t statement;
classify_type_expression_t classify_type;
+ alignof_expression_t alignofe;
};
typedef enum {
};
typedef enum {
@@
-317,10
+342,10
@@
typedef enum {
INITIALIZER_LIST,
INITIALIZER_STRING,
INITIALIZER_WIDE_STRING
INITIALIZER_LIST,
INITIALIZER_STRING,
INITIALIZER_WIDE_STRING
-} initializer_
type
_t;
+} initializer_
kind
_t;
struct initializer_base_t {
struct initializer_base_t {
- initializer_
type_t type
;
+ initializer_
kind_t kind
;
};
struct initializer_value_t {
};
struct initializer_value_t {
@@
-345,7
+370,7
@@
struct initializer_wide_string_t {
};
union initializer_t {
};
union initializer_t {
- initializer_
type_t type
;
+ initializer_
kind_t kind
;
initializer_base_t base;
initializer_value_t value;
initializer_list_t list;
initializer_base_t base;
initializer_value_t value;
initializer_list_t list;
@@
-369,7
+394,7
@@
typedef unsigned short decl_modifiers_t;
struct declaration_t {
unsigned char namespc;
unsigned char storage_class;
struct declaration_t {
unsigned char namespc;
unsigned char storage_class;
- decl_modifiers_t
decl_
modifiers;
+ decl_modifiers_t modifiers;
unsigned int address_taken : 1;
unsigned int is_inline : 1;
type_t *type;
unsigned int address_taken : 1;
unsigned int is_inline : 1;
type_t *type;
@@
-389,12
+414,13
@@
struct declaration_t {
/** next declaration with same symbol */
declaration_t *symbol_next;
/** next declaration with same symbol */
declaration_t *symbol_next;
- unsigned char declaration_type; /* used in ast2firm module */
+ /* the following fields are used in ast2firm module */
+ unsigned char declaration_kind;
union {
union {
- unsigned int value_number;
/* used in ast2firm module */
- ir_entity *entity;
/* used in ast2firm module */
- ir_node *block;
/* used in ast2firm module */
- tarval *enum_val;
/* used in ast2firm module */
+ unsigned int value_number;
+ ir_entity *entity;
+ ir_node *block;
+ tarval *enum_val;
} v;
};
} v;
};
@@
-415,10
+441,10
@@
typedef enum {
STATEMENT_DO_WHILE,
STATEMENT_FOR,
STATEMENT_ASM
STATEMENT_DO_WHILE,
STATEMENT_FOR,
STATEMENT_ASM
-} statement_
type
_t;
+} statement_
kind
_t;
struct statement_base_t {
struct statement_base_t {
- statement_
type_t type
;
+ statement_
kind_t kind
;
statement_t *next;
source_position_t source_position;
};
statement_t *next;
source_position_t source_position;
};
@@
-518,7
+544,7
@@
struct asm_statement_t {
};
union statement_t {
};
union statement_t {
- statement_
type_t type
;
+ statement_
kind_t kind
;
statement_base_t base;
return_statement_t returns;
compound_statement_t compound;
statement_base_t base;
return_statement_t returns;
compound_statement_t compound;