aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/pt.c
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-07-07 17:53:58 -0400
committerJason Merrill <jason@gcc.gnu.org>2011-07-07 17:53:58 -0400
commit0771d9d750576cd36a710a1a99cdd4163efa0164 (patch)
tree225d7cd1863805212f54357b70b2849d0160340a /gcc/cp/pt.c
parentceeb79a48e25f19f6242e1ac281883a07dd1d2f1 (diff)
downloadgcc-0771d9d750576cd36a710a1a99cdd4163efa0164.zip
gcc-0771d9d750576cd36a710a1a99cdd4163efa0164.tar.gz
gcc-0771d9d750576cd36a710a1a99cdd4163efa0164.tar.bz2
re PR c++/49663 ([C++0x] ICE in lookup_base)
PR c++/49663 * pt.c (push_deduction_access_scope): Preserve processing_template_decl across push_to_top_level. And revert: * class.c (pushclass): Accept NULL argument. (popclass): Deal with popping null class. * pt.c (push_access_scope, pop_access_scope): Use them rather than push_to_top_level/pop_from_top_level. * name-lookup.c (lookup_name_real_1): Check current_class_type. From-SVN: r176013
Diffstat (limited to 'gcc/cp/pt.c')
-rw-r--r--gcc/cp/pt.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 17ca44c..2c64dd4 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -214,7 +214,7 @@ push_access_scope (tree t)
else if (DECL_CLASS_SCOPE_P (t))
push_nested_class (DECL_CONTEXT (t));
else
- pushclass (NULL_TREE);
+ push_to_top_level ();
if (TREE_CODE (t) == FUNCTION_DECL)
{
@@ -239,7 +239,7 @@ pop_access_scope (tree t)
if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
pop_nested_class ();
else
- popclass ();
+ pop_from_top_level ();
}
/* Do any processing required when DECL (a member template
@@ -13843,7 +13843,13 @@ static void
push_deduction_access_scope (tree tmpl)
{
if (cxx_dialect >= cxx0x)
- push_access_scope (DECL_TEMPLATE_RESULT (tmpl));
+ {
+ int ptd = processing_template_decl;
+ push_access_scope (DECL_TEMPLATE_RESULT (tmpl));
+ /* Preserve processing_template_decl across push_to_top_level. */
+ if (ptd && !processing_template_decl)
+ ++processing_template_decl;
+ }
else
push_deferring_access_checks (dk_no_check);
}