based on n3589[1], this feature mostly makes use of already-established
logic, namely push_cleanup used by the cleanup attribute, and the
constraints put in place for checking local jumps against statement
expressions

1: https://open-std.org/JTC1/SC22/WG14/www/docs/n3589.pdf

Anna (navi) Figueiredo Gomes (4):
  c: add D_C2Y disable mask
  c: handle expression nodes in push_cleanup
  c: introduce jump barriers for statement expressions
  c: implement the defer keyword

 gcc/c-family/c-common.cc       |   1 +
 gcc/c-family/c-common.h        |  39 +++---
 gcc/c-family/c-cppbuiltin.cc   |   3 +
 gcc/c/c-decl.cc                | 143 +++++++++++++++------
 gcc/c/c-parser.cc              |  41 ++++++
 gcc/c/c-tree.h                 |   8 +-
 gcc/c/c-typeck.cc              |  56 +++++++--
 gcc/testsuite/gcc.dg/defer-1.c | 224 +++++++++++++++++++++++++++++++++
 gcc/testsuite/gcc.dg/defer-2.c |  83 ++++++++++++
 gcc/testsuite/gcc.dg/defer-3.c |  15 +++
 10 files changed, 544 insertions(+), 69 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/defer-1.c
 create mode 100644 gcc/testsuite/gcc.dg/defer-2.c
 create mode 100644 gcc/testsuite/gcc.dg/defer-3.c

-- 
2.49.1

Reply via email to