class.c (fixed_type_or_null): Handle NSDMI.
* class.c (fixed_type_or_null): Handle NSDMI. * method.c (walk_field_subobs): Disable NSDMI noexcept checking for now. From-SVN: r179435
This commit is contained in:
parent
3bf108578e
commit
f10eaa2dcc
@ -1,3 +1,9 @@
|
||||
2011-10-02 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* class.c (fixed_type_or_null): Handle NSDMI.
|
||||
* method.c (walk_field_subobs): Disable NSDMI noexcept checking
|
||||
for now.
|
||||
|
||||
2011-09-30 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* cp-tree.h (TREE_NEGATED_INT): Remove.
|
||||
|
@ -6062,10 +6062,13 @@ fixed_type_or_null (tree instance, int *nonnull, int *cdtorp)
|
||||
if (nonnull)
|
||||
*nonnull = 1;
|
||||
|
||||
/* if we're in a ctor or dtor, we know our type. */
|
||||
if (DECL_LANG_SPECIFIC (current_function_decl)
|
||||
&& (DECL_CONSTRUCTOR_P (current_function_decl)
|
||||
|| DECL_DESTRUCTOR_P (current_function_decl)))
|
||||
/* if we're in a ctor or dtor, we know our type. If
|
||||
current_class_ptr is set but we aren't in a function, we're in
|
||||
an NSDMI (and therefore a constructor). */
|
||||
if (current_scope () != current_function_decl
|
||||
|| (DECL_LANG_SPECIFIC (current_function_decl)
|
||||
&& (DECL_CONSTRUCTOR_P (current_function_decl)
|
||||
|| DECL_DESTRUCTOR_P (current_function_decl))))
|
||||
{
|
||||
if (cdtorp)
|
||||
*cdtorp = 1;
|
||||
|
@ -1042,12 +1042,16 @@ walk_field_subobs (tree fields, tree fnname, special_function_kind sfk,
|
||||
inform (0, "initializer for %q+#D is invalid", field);
|
||||
if (trivial_p)
|
||||
*trivial_p = false;
|
||||
#if 0
|
||||
/* Core 1351: If the field has an NSDMI that could throw, the
|
||||
default constructor is noexcept(false). FIXME this is
|
||||
broken by deferred parsing and 1360 saying we can't
|
||||
lazily declare a non-trivial default constructor. */
|
||||
broken by deferred parsing and 1360 saying we can't lazily
|
||||
declare a non-trivial default constructor. Also this
|
||||
needs to do deferred instantiation. Disable until the
|
||||
conflict between 1351 and 1360 is resolved. */
|
||||
if (spec_p && !expr_noexcept_p (DECL_INITIAL (field), complain))
|
||||
*spec_p = noexcept_false_spec;
|
||||
#endif
|
||||
|
||||
/* Don't do the normal processing. */
|
||||
continue;
|
||||
|
@ -1,3 +1,7 @@
|
||||
2011-10-02 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* g++.dg/cpp0x/nsdmi5.C: New.
|
||||
|
||||
2011-10-02 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
PR target/50579
|
||||
|
20
gcc/testsuite/g++.dg/cpp0x/nsdmi5.C
Normal file
20
gcc/testsuite/g++.dg/cpp0x/nsdmi5.C
Normal file
@ -0,0 +1,20 @@
|
||||
// { dg-options -std=c++0x }
|
||||
|
||||
struct X
|
||||
{
|
||||
int x = 5;
|
||||
int f() { return x; }
|
||||
};
|
||||
struct Y : X
|
||||
{
|
||||
int y = this->x;
|
||||
};
|
||||
template <class T> struct Z : T
|
||||
{
|
||||
int y = this->f();
|
||||
};
|
||||
int main()
|
||||
{
|
||||
Y foo;
|
||||
Z<X> bar;
|
||||
}
|
Loading…
Reference in New Issue
Block a user