diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2005-02-14 09:36:35 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2005-02-14 09:36:35 +0000 |
commit | 12a669d1e1b3b14f15bf512479c664130f52c89d (patch) | |
tree | 489402919c97378f6127944f463d865fdc1383ad /gcc/cp/search.c | |
parent | 90bb1c1f1511ccb29fc3c23fe2ab871c24c6b040 (diff) | |
download | gcc-12a669d1e1b3b14f15bf512479c664130f52c89d.tar.gz |
re PR c++/19891 (Covariant returns are broken)
cp:
PR c++/19891
* class.c (build_simple_base_path): Build the component_ref
directly.
(update_vtable_entry_for_fn): Walk the covariant's binfo chain
rather than using lookup_base.
* search.c (dfs_walk_once): Add non-recursive assert check.
* typeck.c (build_class_member_access_expr): It is possible for
the member type to be both const and volatile.
testsuite:
PR c++/19891
* g++.dg/abi/covariant4.C: New.
From-SVN: r95005
Diffstat (limited to 'gcc/cp/search.c')
-rw-r--r-- | gcc/cp/search.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/cp/search.c b/gcc/cp/search.c index a0cb0ff0bc1..f6a9b577dfc 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -1639,9 +1639,12 @@ tree dfs_walk_once (tree binfo, tree (*pre_fn) (tree, void *), tree (*post_fn) (tree, void *), void *data) { + static int active = 0; /* We must not be called recursively. */ tree rval; gcc_assert (pre_fn || post_fn); + gcc_assert (!active); + active++; if (!CLASSTYPE_DIAMOND_SHAPED_P (BINFO_TYPE (binfo))) /* We are not diamond shaped, and therefore cannot encounter the @@ -1666,6 +1669,9 @@ dfs_walk_once (tree binfo, tree (*pre_fn) (tree, void *), else dfs_unmark_r (binfo); } + + active--; + return rval; } |