diff options
author | Mark Mitchell <mark@codesourcery.com> | 1999-04-05 23:09:51 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 1999-04-05 23:09:51 +0000 |
commit | a7d2d407f901c68a72d08b2868080617a5878656 (patch) | |
tree | cb9c5be581f8d0d7642fc8deb66bc0c2cce2b87c /gcc | |
parent | 7c72138aa2c52e51598f2a1f82325bb109f8b529 (diff) | |
download | gcc-a7d2d407f901c68a72d08b2868080617a5878656.zip gcc-a7d2d407f901c68a72d08b2868080617a5878656.tar.gz gcc-a7d2d407f901c68a72d08b2868080617a5878656.tar.bz2 |
decl.c (lookup_name_current_level): Tweak, and improve documentation.
* decl.c (lookup_name_current_level): Tweak, and improve
documentation.
From-SVN: r26210
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/decl.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/crash8.C | 10 |
3 files changed, 22 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0e3c6fe..e5d86a9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 1999-04-05 Mark Mitchell <mark@codesourcery.com> + * decl.c (lookup_name_current_level): Tweak, and improve + documentation. + * class.c (maybe_fixup_vptrs): Remove declaration. (build_class_init_list): Likewise. * decl.c (pushdecl_class_level): Call check_template_shadow here diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 0372dae..0989237 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -5727,15 +5727,21 @@ lookup_name (name, prefer_type) return lookup_name_real (name, prefer_type, 0, 0); } -/* Similar to `lookup_name' but look only at current binding level. */ +/* Similar to `lookup_name' but look only in the innermost non-class + binding level. */ tree lookup_name_current_level (name) tree name; { - register tree t = NULL_TREE; + struct binding_level *b; + tree t = NULL_TREE; + + b = current_binding_level; + while (b->parm_flag == 2) + b = b->level_chain; - if (current_binding_level->namespace_p) + if (b->namespace_p) { t = IDENTIFIER_NAMESPACE_VALUE (name); @@ -5746,8 +5752,6 @@ lookup_name_current_level (name) else if (IDENTIFIER_BINDING (name) && LOCAL_BINDING_P (IDENTIFIER_BINDING (name))) { - struct binding_level *b = current_binding_level; - while (1) { if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b) diff --git a/gcc/testsuite/g++.old-deja/g++.other/crash8.C b/gcc/testsuite/g++.old-deja/g++.other/crash8.C new file mode 100644 index 0000000..22b27ef --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/crash8.C @@ -0,0 +1,10 @@ +// Build don't link: +// Origin: Jason Merrill <jason@cygnus.com> + +int main() +{ + void f(); + class A { + friend void f(); + }; +} |