[Bug c++/102514] New: The allocation function shall not be called when existing an erroneous expression in noptr-new-declarator
xmh970252187 at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Sep 28 09:07:20 GMT 2021
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102514
Bug ID: 102514
Summary: The allocation function shall not be called when
existing an erroneous expression in
noptr-new-declarator
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: xmh970252187 at gmail dot com
Target Milestone: ---
````
struct C{
void* operator new[](std::size_t N) noexcept(false){ // #1
std::cout<<"abc\n";
auto p = malloc(10);
return p;
}
};
int n = -1;
auto ptr = new C[n];
std::cout<< ptr;
delete [] ptr;
````
GCC prints that `#1` is called and the address is non-null. According to
[expr.new] p9, the function at `#1` shall not be called, and since the function
has potential throwing specification, the new-expression should terminate by
throwing an exception.
Example 2:
````cpp
struct C2{
void* operator new[](std::size_t N) noexcept{ // #2
std::cout<<"abc\n";
auto p = malloc(10);
return p;
}
};
int n = -1;
auto ptr = new C2[n];
std::cout<< ptr;
delete [] ptr;
````
GCC calls `#2`, and the address is non-null.
More information about the Gcc-bugs
mailing list