diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2020-06-17 07:50:57 -0400 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2020-06-17 07:50:57 -0400 |
commit | b9e67f2840ce0d8859d96e7f8df8fe9584af5eba (patch) | |
tree | ed3b7284ff15c802583f6409b9c71b3739642d15 /gcc/tree-iterator.c | |
parent | 1957047ed1c94bf17cf993a2b1866965f493ba87 (diff) | |
parent | 56638b9b1853666f575928f8baf17f70e4ed3517 (diff) | |
download | gcc-b9e67f2840ce0d8859d96e7f8df8fe9584af5eba.zip gcc-b9e67f2840ce0d8859d96e7f8df8fe9584af5eba.tar.gz gcc-b9e67f2840ce0d8859d96e7f8df8fe9584af5eba.tar.bz2 |
Merge from trunk at:
commit 56638b9b1853666f575928f8baf17f70e4ed3517
Author: GCC Administrator <gccadmin@gcc.gnu.org>
Date: Wed Jun 17 00:16:36 2020 +0000
Daily bump.
Diffstat (limited to 'gcc/tree-iterator.c')
-rw-r--r-- | gcc/tree-iterator.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/gcc/tree-iterator.c b/gcc/tree-iterator.c index ddc908f..81833b5 100644 --- a/gcc/tree-iterator.c +++ b/gcc/tree-iterator.c @@ -354,4 +354,45 @@ expr_last (tree expr) return expr; } +/* If EXPR is a STATEMENT_LIST containing just DEBUG_BEGIN_STMTs and + a single other stmt, return that other stmt (recursively). + If it is a STATEMENT_LIST containing no non-DEBUG_BEGIN_STMTs or + multiple, return NULL_TREE. + Otherwise return EXPR. */ + +tree +expr_single (tree expr) +{ + if (expr == NULL_TREE) + return expr; + + if (TREE_CODE (expr) == STATEMENT_LIST) + { + /* With -gstatement-frontiers we could have a STATEMENT_LIST with + DEBUG_BEGIN_STMT(s) and only a single other stmt, which with + -g wouldn't be present and we'd have that single other stmt + directly instead. */ + struct tree_statement_list_node *n = STATEMENT_LIST_HEAD (expr); + if (!n) + return NULL_TREE; + while (TREE_CODE (n->stmt) == DEBUG_BEGIN_STMT) + { + n = n->next; + if (!n) + return NULL_TREE; + } + expr = n->stmt; + do + { + n = n->next; + if (!n) + return expr_single (expr); + } + while (TREE_CODE (n->stmt) == DEBUG_BEGIN_STMT); + return NULL_TREE; + } + + return expr; +} + #include "gt-tree-iterator.h" |