mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-18 18:14:38 +02:00
8194988: 8 Null pointer dereference defect groups related to MultiNode::proj_out()
Reviewed-by: kvn
This commit is contained in:
parent
97a0bf821a
commit
4714dab4cb
16 changed files with 76 additions and 70 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -496,7 +496,7 @@ Node *PhaseMacroExpand::value_from_mem_phi(Node *mem, BasicType ft, const Type *
|
|||
if (level <= 0) {
|
||||
return NULL; // Give up: phi tree too deep
|
||||
}
|
||||
Node *start_mem = C->start()->proj_out(TypeFunc::Memory);
|
||||
Node *start_mem = C->start()->proj_out_or_null(TypeFunc::Memory);
|
||||
Node *alloc_mem = alloc->in(TypeFunc::Memory);
|
||||
|
||||
uint length = mem->req();
|
||||
|
@ -576,7 +576,7 @@ Node *PhaseMacroExpand::value_from_mem(Node *sfpt_mem, Node *sfpt_ctl, BasicType
|
|||
|
||||
int alias_idx = C->get_alias_index(adr_t);
|
||||
int offset = adr_t->offset();
|
||||
Node *start_mem = C->start()->proj_out(TypeFunc::Memory);
|
||||
Node *start_mem = C->start()->proj_out_or_null(TypeFunc::Memory);
|
||||
Node *alloc_ctrl = alloc->in(TypeFunc::Control);
|
||||
Node *alloc_mem = alloc->in(TypeFunc::Memory);
|
||||
Arena *a = Thread::current()->resource_area();
|
||||
|
@ -974,8 +974,8 @@ bool PhaseMacroExpand::scalar_replacement(AllocateNode *alloc, GrowableArray <Sa
|
|||
}
|
||||
|
||||
static void disconnect_projections(MultiNode* n, PhaseIterGVN& igvn) {
|
||||
Node* ctl_proj = n->proj_out(TypeFunc::Control);
|
||||
Node* mem_proj = n->proj_out(TypeFunc::Memory);
|
||||
Node* ctl_proj = n->proj_out_or_null(TypeFunc::Control);
|
||||
Node* mem_proj = n->proj_out_or_null(TypeFunc::Memory);
|
||||
if (ctl_proj != NULL) {
|
||||
igvn.replace_node(ctl_proj, n->in(0));
|
||||
}
|
||||
|
@ -1086,12 +1086,12 @@ void PhaseMacroExpand::process_users_of_allocation(CallNode *alloc) {
|
|||
// Eliminate Initialize node.
|
||||
InitializeNode *init = use->as_Initialize();
|
||||
assert(init->outcnt() <= 2, "only a control and memory projection expected");
|
||||
Node *ctrl_proj = init->proj_out(TypeFunc::Control);
|
||||
Node *ctrl_proj = init->proj_out_or_null(TypeFunc::Control);
|
||||
if (ctrl_proj != NULL) {
|
||||
assert(init->in(TypeFunc::Control) == _fallthroughcatchproj, "allocation control projection");
|
||||
_igvn.replace_node(ctrl_proj, _fallthroughcatchproj);
|
||||
}
|
||||
Node *mem_proj = init->proj_out(TypeFunc::Memory);
|
||||
Node *mem_proj = init->proj_out_or_null(TypeFunc::Memory);
|
||||
if (mem_proj != NULL) {
|
||||
Node *mem = init->in(TypeFunc::Memory);
|
||||
#ifdef ASSERT
|
||||
|
@ -1198,7 +1198,7 @@ bool PhaseMacroExpand::eliminate_allocate_node(AllocateNode *alloc) {
|
|||
|
||||
bool PhaseMacroExpand::eliminate_boxing_node(CallStaticJavaNode *boxing) {
|
||||
// EA should remove all uses of non-escaping boxing node.
|
||||
if (!C->eliminate_boxing() || boxing->proj_out(TypeFunc::Parms) != NULL) {
|
||||
if (!C->eliminate_boxing() || boxing->proj_out_or_null(TypeFunc::Parms) != NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1580,8 +1580,8 @@ void PhaseMacroExpand::expand_allocate_common(
|
|||
// before the InitializeNode happen before the storestore
|
||||
// barrier.
|
||||
|
||||
Node* init_ctrl = init->proj_out(TypeFunc::Control);
|
||||
Node* init_mem = init->proj_out(TypeFunc::Memory);
|
||||
Node* init_ctrl = init->proj_out_or_null(TypeFunc::Control);
|
||||
Node* init_mem = init->proj_out_or_null(TypeFunc::Memory);
|
||||
|
||||
MemBarNode* mb = MemBarNode::make(C, Op_MemBarStoreStore, Compile::AliasIdxBot);
|
||||
transform_later(mb);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue