mirror of git://gcc.gnu.org/git/gcc.git
PR c++/77804 - Internal compiler error on incorrect initialization of new-d array
gcc/cp/ChangeLog: PR c++/77804 * init.c (warn_placement_new_too_small): Avoid assuming an array type has a constant size. gcc/testsuite/ChangeLog: PR c++/77804 * g++.dg/warn/Wplacement-new-size-4.C: New test. From-SVN: r240754
This commit is contained in:
parent
3814e88007
commit
8ff04ff92d
|
|
@ -1,3 +1,9 @@
|
|||
2016-10-04 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
PR c++/77804
|
||||
* init.c (warn_placement_new_too_small): Avoid assuming an array type
|
||||
has a constant size.
|
||||
|
||||
2016-10-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/77791
|
||||
|
|
|
|||
|
|
@ -2526,8 +2526,13 @@ warn_placement_new_too_small (tree type, tree nelts, tree size, tree oper)
|
|||
else if (nelts && CONSTANT_CLASS_P (nelts))
|
||||
bytes_need = tree_to_uhwi (nelts)
|
||||
* tree_to_uhwi (TYPE_SIZE_UNIT (type));
|
||||
else
|
||||
else if (tree_fits_uhwi_p (TYPE_SIZE_UNIT (type)))
|
||||
bytes_need = tree_to_uhwi (TYPE_SIZE_UNIT (type));
|
||||
else
|
||||
{
|
||||
/* The type is a VLA. */
|
||||
return;
|
||||
}
|
||||
|
||||
if (bytes_avail < bytes_need)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
2016-10-04 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
PR c++/77804
|
||||
* g++.dg/warn/Wplacement-new-size-4.C: New test.
|
||||
|
||||
2016-10-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/77791
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
// PR c++/77804 - Internal compiler error on incorrect initialization of
|
||||
// new-d array
|
||||
// { dg-do compile }
|
||||
// { dg-additional-options "-Wplacement-new -Wvla -Wno-error=vla" }
|
||||
|
||||
void* operator new[] (__SIZE_TYPE__ n, void *p) { return p; }
|
||||
|
||||
int main()
|
||||
{
|
||||
char buf[256];
|
||||
unsigned n = 10;
|
||||
int* p = new (buf) (int[n]); // { dg-warning "non-constant array new length must be specified without parentheses around the type-id" }
|
||||
// { dg-warning "ISO C\\+\\+ forbids variable length array" "vla warning" { target *-*-* } .-1 }
|
||||
}
|
||||
Loading…
Reference in New Issue