From 6f5c81f86f9b1b08b57435562be657fb2d220408 Mon Sep 17 00:00:00 2001 From: Connor Abbott Date: Tue, 21 Jul 2015 19:54:29 -0700 Subject: [PATCH] nir/cf: fix link_blocks() when there are no successors When we insert a single basic block A into another basic block B, we will split B into C and D, insert A in the middle, and then splice together C, A, and D. When we splice together C and A, we need to move the successors of A into C -- except A has no successors, since it hasn't been inserted yet. So in move_successors(), we need to handle the case where the block whose successors are to be moved doesn't have any successors. Fixing link_blocks() here prevents a segfault and makes it work correctly. Signed-off-by: Connor Abbott Reviewed-by: Kenneth Graunke --- src/glsl/nir/nir_control_flow.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/glsl/nir/nir_control_flow.c b/src/glsl/nir/nir_control_flow.c index 91788adb85f..9ae113f3959 100644 --- a/src/glsl/nir/nir_control_flow.c +++ b/src/glsl/nir/nir_control_flow.c @@ -57,7 +57,8 @@ static void link_blocks(nir_block *pred, nir_block *succ1, nir_block *succ2) { pred->successors[0] = succ1; - block_add_pred(succ1, pred); + if (succ1 != NULL) + block_add_pred(succ1, pred); pred->successors[1] = succ2; if (succ2 != NULL) -- 2.30.2