DR 1453
/cp 2014-09-02 Paolo Carlini <paolo.carlini@oracle.com> DR 1453 * class.c (check_field_decls): A class of literal type cannot have volatile non-static data members and base classes. (explain_non_literal_class): Update. /testsuite 2014-09-02 Paolo Carlini <paolo.carlini@oracle.com> DR 1453 * g++.dg/cpp0x/constexpr-volatile.C: New. * g++.dg/ext/is_literal_type2.C: Likewise. From-SVN: r214823
This commit is contained in:
parent
4e2b2eeec9
commit
cec362c90b
@ -1,3 +1,10 @@
|
||||
2014-09-02 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
DR 1453
|
||||
* class.c (check_field_decls): A class of literal type cannot have
|
||||
volatile non-static data members and base classes.
|
||||
(explain_non_literal_class): Update.
|
||||
|
||||
2014-09-02 Jakub Jelinek <jakub@redhat.com>
|
||||
Balaji V. Iyer <balaji.v.iyer@intel.com>
|
||||
Igor Zamyatin <igor.zamyatin@intel.com>
|
||||
|
@ -3528,9 +3528,11 @@ check_field_decls (tree t, tree *access_decls,
|
||||
CLASSTYPE_NON_AGGREGATE (t) = 1;
|
||||
|
||||
/* If at least one non-static data member is non-literal, the whole
|
||||
class becomes non-literal. Note: if the type is incomplete we
|
||||
will complain later on. */
|
||||
if (COMPLETE_TYPE_P (type) && !literal_type_p (type))
|
||||
class becomes non-literal. Per Core/1453, volatile non-static
|
||||
data members and base classes are also not allowed.
|
||||
Note: if the type is incomplete we will complain later on. */
|
||||
if (COMPLETE_TYPE_P (type)
|
||||
&& (!literal_type_p (type) || CP_TYPE_VOLATILE_P (type)))
|
||||
CLASSTYPE_LITERAL_P (t) = false;
|
||||
|
||||
/* A standard-layout class is a class that:
|
||||
@ -5431,6 +5433,9 @@ explain_non_literal_class (tree t)
|
||||
if (CLASS_TYPE_P (ftype))
|
||||
explain_non_literal_class (ftype);
|
||||
}
|
||||
if (CP_TYPE_VOLATILE_P (ftype))
|
||||
inform (0, " non-static data member %q+D has "
|
||||
"volatile type", field);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,9 @@
|
||||
2014-09-02 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
DR 1453
|
||||
* g++.dg/cpp0x/constexpr-volatile.C: New.
|
||||
* g++.dg/ext/is_literal_type2.C: Likewise.
|
||||
|
||||
2014-09-02 Jakub Jelinek <jakub@redhat.com>
|
||||
Balaji V. Iyer <balaji.v.iyer@intel.com>
|
||||
Igor Zamyatin <igor.zamyatin@intel.com>
|
||||
|
26
gcc/testsuite/g++.dg/cpp0x/constexpr-volatile.C
Normal file
26
gcc/testsuite/g++.dg/cpp0x/constexpr-volatile.C
Normal file
@ -0,0 +1,26 @@
|
||||
// DR 1453
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
struct S {
|
||||
constexpr S() : n{} { }
|
||||
volatile int n;
|
||||
};
|
||||
|
||||
constexpr S s; // { dg-error "literal" }
|
||||
|
||||
struct Z {
|
||||
volatile int m;
|
||||
};
|
||||
|
||||
struct T {
|
||||
constexpr T() : n{} { }
|
||||
Z n;
|
||||
};
|
||||
|
||||
constexpr T t; // { dg-error "literal" }
|
||||
|
||||
struct U : Z {
|
||||
constexpr U() : Z{} { }
|
||||
};
|
||||
|
||||
constexpr U u; // { dg-error "literal" }
|
26
gcc/testsuite/g++.dg/ext/is_literal_type2.C
Normal file
26
gcc/testsuite/g++.dg/ext/is_literal_type2.C
Normal file
@ -0,0 +1,26 @@
|
||||
// DR 1453
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
struct S {
|
||||
constexpr S() : n{} { }
|
||||
volatile int n;
|
||||
};
|
||||
|
||||
static_assert(!__is_literal_type(S), "");
|
||||
|
||||
struct Z {
|
||||
volatile int m;
|
||||
};
|
||||
|
||||
struct T {
|
||||
constexpr T() : n{} { }
|
||||
Z n;
|
||||
};
|
||||
|
||||
static_assert(!__is_literal_type(T), "");
|
||||
|
||||
struct U : Z {
|
||||
constexpr U() : Z{} { }
|
||||
};
|
||||
|
||||
static_assert(!__is_literal_type(U), "");
|
Loading…
Reference in New Issue
Block a user