diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c
index eb49817cee..1ce14097d8 100644
--- a/src/backend/executor/execExprInterp.c
+++ b/src/backend/executor/execExprInterp.c
@@ -3150,6 +3150,10 @@ ExecEvalFieldStoreDeForm(ExprState *state, ExprEvalStep *op, ExprContext *econte
 		HeapTupleHeader tuphdr;
 		HeapTupleData tmptup;
 
+		if (DatumGetPointer(tupDatum) == NULL)
+		{
+			return;
+		}
 		tuphdr = DatumGetHeapTupleHeader(tupDatum);
 		tmptup.t_len = HeapTupleHeaderGetDatumLength(tuphdr);
 		ItemPointerSetInvalid(&(tmptup.t_self));
diff --git a/src/test/regress/expected/plpgsql.out b/src/test/regress/expected/plpgsql.out
index 278d056505..745c9354a1 100644
--- a/src/test/regress/expected/plpgsql.out
+++ b/src/test/regress/expected/plpgsql.out
@@ -5726,3 +5726,8 @@ END; $$ LANGUAGE plpgsql;
 ERROR:  "x" is not a scalar variable
 LINE 3:   GET DIAGNOSTICS x = ROW_COUNT;
                           ^
+CREATE TYPE two_ints as (if1 int, if2 int);
+CREATE DOMAIN domain AS two_ints CHECK ((VALUE).if1 > 0);
+CREATE TABLE domain_indirection_test (f1 int, f3 domain, domain_array domain[]);
+INSERT INTO domain_indirection_test (f1,f3.if1) VALUES (0, 1);
+UPDATE domain_indirection_test SET domain_array[0].if2 = 5;
diff --git a/src/test/regress/sql/plpgsql.sql b/src/test/regress/sql/plpgsql.sql
index 7e52d4745d..f93eb3ec05 100644
--- a/src/test/regress/sql/plpgsql.sql
+++ b/src/test/regress/sql/plpgsql.sql
@@ -4667,3 +4667,9 @@ BEGIN
   GET DIAGNOSTICS x = ROW_COUNT;
   RETURN;
 END; $$ LANGUAGE plpgsql;
+
+CREATE TYPE two_ints as (if1 int, if2 int);
+CREATE DOMAIN domain AS two_ints CHECK ((VALUE).if1 > 0);
+CREATE TABLE domain_indirection_test (f1 int, f3 domain, domain_array domain[]);
+INSERT INTO domain_indirection_test (f1,f3.if1) VALUES (0, 1);
+UPDATE domain_indirection_test SET domain_array[0].if2 = 5;
