re PR c++/45520 ([C++0x] compiler segmentation fault on decltype in lambda-declarator)

PR c++/45520
	* tree.c (maybe_dummy_object): Check current_class_ref against
	context, not current_class_type.

From-SVN: r168654
This commit is contained in:
Jason Merrill 2011-01-11 06:29:58 -05:00 committed by Jason Merrill
parent 5826c8d29e
commit 41d04a8dfe
4 changed files with 31 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2011-01-11 Jason Merrill <jason@redhat.com>
PR c++/45520
* tree.c (maybe_dummy_object): Check current_class_ref against
context, not current_class_type.
2011-01-08 Nicola Pero <nicola.pero@meta-innovation.com>
PR objc/47078

View File

@ -2374,12 +2374,12 @@ maybe_dummy_object (tree type, tree* binfop)
if (binfop)
*binfop = binfo;
if (current_class_ref && context == current_class_type
/* Kludge: Make sure that current_class_type is actually
correct. It might not be if we're in the middle of
tsubst_default_argument. */
&& same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)),
current_class_type))
if (current_class_ref
/* current_class_ref might not correspond to current_class_type if
we're in tsubst_default_argument or a lambda-declarator; in either
case, we want to use current_class_ref if it matches CONTEXT. */
&& (same_type_ignoring_top_level_qualifiers_p
(TREE_TYPE (current_class_ref), context)))
decl = current_class_ref;
else if (current != current_class_type
&& context == nonlambda_method_basetype ())

View File

@ -1,3 +1,8 @@
2011-01-11 Jason Merrill <jason@redhat.com>
PR c++/45520
* g++.dg/cpp0x/lambda/lambda-this3.C: New.
2011-01-11 Iain Sandoe <iains@gcc.gnu.org>
* objc-obj-c++-shared/next-mapping.h: Add copyright header.

View File

@ -0,0 +1,14 @@
// PR c++/45520
// { dg-options -std=c++0x }
struct M {
int i;
};
struct S {
M m;
void f() {
auto lambda=[&](decltype(m.i) & i) { };
}
};