AST_FLAG_IS_VARARG = 1 << 6,
AST_FLAG_ALIAS = 1 << 7,
AST_FLAG_ERASEABLE = 1 << 8,
- AST_FLAG_ACCUMULATE = 1 << 9,
+ AST_FLAG_NOERASE = 1 << 9, /* Never allow it to be erased, even if ERASEABLE is present */
+ AST_FLAG_ACCUMULATE = 1 << 10,
/* An array declared as []
* so that the size is taken from the initializer
*/
- AST_FLAG_ARRAY_INIT = 1 << 10,
+ AST_FLAG_ARRAY_INIT = 1 << 11,
- AST_FLAG_FINAL_DECL = 1 << 11,
+ AST_FLAG_FINAL_DECL = 1 << 12,
/* Several coverage options
* AST_FLAG_COVERAGE means there was an explicit [[coverage]] attribute,
* In the future there might be more options like tracking variable access
* by creating get/set wrapper functions.
*/
- AST_FLAG_COVERAGE = 1 << 12,
- AST_FLAG_BLOCK_COVERAGE = 1 << 13,
+ AST_FLAG_COVERAGE = 1 << 13,
+ AST_FLAG_BLOCK_COVERAGE = 1 << 14,
+
+ /*
+ * Propagates norefness to the IR so the unused (read/write) check can be
+ * more intelligently done.
+ */
+ AST_FLAG_NOREF = 1 << 15,
AST_FLAG_LAST,
AST_FLAG_TYPE_MASK = (AST_FLAG_VARIADIC | AST_FLAG_NORETURN),
*/
std::vector<basic_value_t> m_initlist;
- /* usecount for the parser */
- size_t m_uses = 0;
-
ir_value *m_ir_v = nullptr;
std::vector<ir_value*> m_ir_values;
size_t m_ir_value_count = 0;