8160742: Node::operator new invokes undefined behavior
Summary: remove obsolete asserts
Reviewed-by: kvn
--- a/hotspot/src/share/vm/opto/node.cpp Wed Jul 20 12:34:11 2016 +0200
+++ b/hotspot/src/share/vm/opto/node.cpp Wed Jul 27 10:56:01 2016 -0700
@@ -295,9 +295,6 @@
if (req > 0) {
// Allocate space for _in array to have double alignment.
_in = (Node **) ((char *) (C->node_arena()->Amalloc_D(req * sizeof(void*))));
-#ifdef ASSERT
- _in[req-1] = this; // magic cookie for assertion check
-#endif
}
// If there are default notes floating around, capture them:
Node_Notes* nn = C->default_node_notes();
@@ -326,10 +323,8 @@
debug_only( verify_construction() );
NOT_PRODUCT(nodes_created++);
if (req == 0) {
- assert( _in == (Node**)this, "Must not pass arg count to 'new'" );
_in = NULL;
} else {
- assert( _in[req-1] == this, "Must pass arg count to 'new'" );
Node** to = _in;
for(uint i = 0; i < req; i++) {
to[i] = NULL;
@@ -346,8 +341,6 @@
{
debug_only( verify_construction() );
NOT_PRODUCT(nodes_created++);
- // Assert we allocated space for input array already
- assert( _in[0] == this, "Must pass arg count to 'new'" );
assert( is_not_dead(n0), "can not use dead node");
_in[0] = n0; if (n0 != NULL) n0->add_out((Node *)this);
}
@@ -361,8 +354,6 @@
{
debug_only( verify_construction() );
NOT_PRODUCT(nodes_created++);
- // Assert we allocated space for input array already
- assert( _in[1] == this, "Must pass arg count to 'new'" );
assert( is_not_dead(n0), "can not use dead node");
assert( is_not_dead(n1), "can not use dead node");
_in[0] = n0; if (n0 != NULL) n0->add_out((Node *)this);
@@ -378,8 +369,6 @@
{
debug_only( verify_construction() );
NOT_PRODUCT(nodes_created++);
- // Assert we allocated space for input array already
- assert( _in[2] == this, "Must pass arg count to 'new'" );
assert( is_not_dead(n0), "can not use dead node");
assert( is_not_dead(n1), "can not use dead node");
assert( is_not_dead(n2), "can not use dead node");
@@ -397,8 +386,6 @@
{
debug_only( verify_construction() );
NOT_PRODUCT(nodes_created++);
- // Assert we allocated space for input array already
- assert( _in[3] == this, "Must pass arg count to 'new'" );
assert( is_not_dead(n0), "can not use dead node");
assert( is_not_dead(n1), "can not use dead node");
assert( is_not_dead(n2), "can not use dead node");
@@ -418,8 +405,6 @@
{
debug_only( verify_construction() );
NOT_PRODUCT(nodes_created++);
- // Assert we allocated space for input array already
- assert( _in[4] == this, "Must pass arg count to 'new'" );
assert( is_not_dead(n0), "can not use dead node");
assert( is_not_dead(n1), "can not use dead node");
assert( is_not_dead(n2), "can not use dead node");
@@ -442,8 +427,6 @@
{
debug_only( verify_construction() );
NOT_PRODUCT(nodes_created++);
- // Assert we allocated space for input array already
- assert( _in[5] == this, "Must pass arg count to 'new'" );
assert( is_not_dead(n0), "can not use dead node");
assert( is_not_dead(n1), "can not use dead node");
assert( is_not_dead(n2), "can not use dead node");
@@ -468,8 +451,6 @@
{
debug_only( verify_construction() );
NOT_PRODUCT(nodes_created++);
- // Assert we allocated space for input array already
- assert( _in[6] == this, "Must pass arg count to 'new'" );
assert( is_not_dead(n0), "can not use dead node");
assert( is_not_dead(n1), "can not use dead node");
assert( is_not_dead(n2), "can not use dead node");
--- a/hotspot/src/share/vm/opto/node.hpp Wed Jul 20 12:34:11 2016 +0200
+++ b/hotspot/src/share/vm/opto/node.hpp Wed Jul 27 10:56:01 2016 -0700
@@ -217,9 +217,6 @@
inline void* operator new(size_t x) throw() {
Compile* C = Compile::current();
Node* n = (Node*)C->node_arena()->Amalloc_D(x);
-#ifdef ASSERT
- n->_in = (Node**)n; // magic cookie for assertion check
-#endif
return (void*)n;
}