Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/cpp2a/constexpr-new3.C @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
line wrap: on
line source
// P0784R7 // { dg-do compile { target c++2a } } // { dg-additional-options "-fdelete-null-pointer-checks" } constexpr int * f1 () { return new int (2); // { dg-error "is not a constant expression because it refers to a result of" } } constexpr auto v1 = f1 (); constexpr bool f2 () { int *p = new int (3); // { dg-error "is not a constant expression because allocated storage has not been deallocated" } return false; } constexpr auto v2 = f2 (); constexpr bool f3 () { int *p = new int (3); int *q = p; delete p; delete q; // { dg-error "deallocation of already deallocated storage" } return false; } constexpr auto v3 = f3 (); // { dg-message "in 'constexpr' expansion of" } constexpr bool f4 (int *p) { delete p; // { dg-error "deallocation of storage that was not previously allocated" } return false; } int q; constexpr auto v4 = f4 (&q); // { dg-message "in 'constexpr' expansion of" } constexpr bool f5 () { int *p = new int; // { dg-message "allocated here" } return *p == 1; } constexpr auto v5 = f5 (); // { dg-error "the content of uninitialized storage is not usable in a constant expression" } // { dg-message "in 'constexpr' expansion of" "" { target *-*-* } .-1 } constexpr bool f6 () { int *p = new int (2); // { dg-message "allocated here" } int *q = p; delete p; return *q == 2; } constexpr auto v6 = f6 (); // { dg-error "use of allocated storage after deallocation in a constant expression" } // { dg-message "in 'constexpr' expansion of" "" { target *-*-* } .-1 } constexpr int * f7 () { int *p = new int (2); // { dg-error "is not a constant expression because it refers to a result of" } delete p; return p; } constexpr auto v7 = f7 ();