CWG 2094 - volatile scalars are trivially copyable.

PR c++/85679
	* tree.c (trivially_copyable_p): Don't check CP_TYPE_VOLATILE_P for
	scalar types.

	* g++.dg/ext/is_trivially_constructible1.C: Change the expected result
	for volatile int.
	* g++.dg/ext/is_trivially_copyable.C: New test.

	* testsuite/20_util/is_trivially_copyable/value.cc: Change the expected
	result for volatile int.

From-SVN: r271435
This commit is contained in:
Marek Polacek 2019-05-20 19:10:57 +00:00 committed by Marek Polacek
parent f12ea6acde
commit be9e458d8b
7 changed files with 46 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2019-05-20 Marek Polacek <polacek@redhat.com>
CWG 2094 - volatile scalars are trivially copyable.
PR c++/85679
* tree.c (trivially_copyable_p): Don't check CP_TYPE_VOLATILE_P for
scalar types.
2019-05-20 Marek Polacek <polacek@redhat.com>
* pt.c (convert_template_argument): Add a diagnostic for the

View File

@ -4098,7 +4098,8 @@ trivially_copyable_p (const_tree t)
&& !TYPE_HAS_COMPLEX_MOVE_ASSIGN (t)
&& TYPE_HAS_TRIVIAL_DESTRUCTOR (t));
else
return !CP_TYPE_VOLATILE_P (t) && scalarish_type_p (t);
/* CWG 2094 makes volatile-qualified scalars trivially copyable again. */
return scalarish_type_p (t);
}
/* Returns 1 iff type T is a trivial type, as defined in [basic.types] and

View File

@ -1,3 +1,11 @@
2019-05-20 Marek Polacek <polacek@redhat.com>
CWG 2094 - volatile scalars are trivially copyable.
PR c++/85679
* g++.dg/ext/is_trivially_constructible1.C: Change the expected result
for volatile int.
* g++.dg/ext/is_trivially_copyable.C: New test.
2019-05-20 Marek Polacek <polacek@redhat.com>
* g++.dg/ext/utf8-2.C: Accept both "char" and "char8_t" in aka.

View File

@ -48,7 +48,9 @@ SA(!__is_trivially_constructible(int*, const int*));
SA(!__is_trivially_constructible(D));
SA(__is_trivially_copyable(int));
SA(!__is_trivially_copyable(volatile int));
// Changed in CWG 2094, which made volatile-qualified scalars trivially
// copyable.
SA(__is_trivially_copyable(volatile int));
struct E1 {const int val;};
SA(__is_trivially_copyable(E1));

View File

@ -0,0 +1,16 @@
// CWG 2094 - volatile scalars are trivially copyable.
// PR c++/85679
// { dg-do compile { target c++11 } }
#define SA(X) static_assert((X),#X)
struct S{};
SA(__is_trivially_copyable(S volatile));
SA(__is_trivially_copyable(S volatile[]));
SA(__is_trivially_copyable(S const volatile));
SA(__is_trivially_copyable(S const volatile[]));
SA(__is_trivially_copyable(int volatile));
SA(__is_trivially_copyable(int volatile[]));
SA(__is_trivially_copyable(int const volatile));
SA(__is_trivially_copyable(int const volatile[]));

View File

@ -1,3 +1,10 @@
2019-05-20 Marek Polacek <polacek@redhat.com>
CWG 2094 - volatile scalars are trivially copyable.
PR c++/85679
* testsuite/20_util/is_trivially_copyable/value.cc: Change the expected
result for volatile int.
2019-05-20 Jonathan Wakely <jwakely@redhat.com>
* testsuite/17_intro/names.cc: Do not check 'ptr' on Solaris.

View File

@ -46,8 +46,10 @@ void test01()
static_assert(test_property<is_trivially_copyable,
int>(true), "");
// Changed in CWG 2094, which made volatile-qualified scalars trivially
// copyable.
static_assert(test_property<is_trivially_copyable,
volatile int>(false), "");
volatile int>(true), "");
static_assert(test_property<is_trivially_copyable,
TType>(true), "");
static_assert(test_property<is_trivially_copyable,