https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105077
Bug ID: 105077
Summary: The std::bad_array_new_length is not thrown for some
new array scenarios.
Product: gcc
Version: 11.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: chumarshal at foxmail dot com
Target Milestone: ---
The std::bad_array_new_length is not thrown for the following three scenarios.
These scenarios do not follow C++ spec:"std::bad_array_new_length is the type
of the object thrown as exceptions by the new-expressions to report invalid
array lengths if array length is negative."
case1 using g++ -O0
==========================================================================
#include <new>
#include <stdexcept>
int main()
{
try
{
int negative = -1;
new char[negative];
}
catch(const std::bad_array_new_length &e)
{
}
return 0;
}
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
case2 using g++ -O0
==========================================================================
#include <new>
#include <stdexcept>
struct s_char
{
char ch;
};
int main()
{
try
{
int negative = -1;
new s_char[negative];
}
catch(const std::bad_array_new_length &e)
{
}
return 0;
}
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
case3 using g++ -O0
==========================================================================
#include <new>
#include <stdexcept>
struct s_char_with_new
{
char ch;
void *operator new[] (std::size_t sz)
{
abort();
}
};
int main()
{
try
{
int negative = -1;
new char[negative];
}
catch(const std::bad_array_new_length &e)
{
}
return 0;
}
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc