patch 9.1.1099: Vim9: import with extends may crash

Problem:  Vim9: import with extends may crash, v9.1.1087 wasn't the
          correct way to fix it)
Solution: When using an import class, Check for a valid class member
          variable at compile time (Yegappan Lakshmanan)

related: #16601
closes: #16603

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/testdir/Makefile b/src/testdir/Makefile
index 4c7a273..680d1a1 100644
--- a/src/testdir/Makefile
+++ b/src/testdir/Makefile
@@ -96,7 +96,7 @@
 	-rm -f opt_test.vim test_result.log $(CLEANUP_FILES)
 	-rm -rf $(RM_ON_RUN) $(RM_ON_START)
 	-rm -f valgrind.*
-	-rm -f asan.*
+	-rm -f asan.* asan_test_*
 	-rm -f guidialog guidialogfile
 
 # Delete the files produced by benchmarking, so they can run again.
diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim
index c8dfa1e..5f5c928 100644
--- a/src/testdir/test_vim9_import.vim
+++ b/src/testdir/test_vim9_import.vim
@@ -3454,8 +3454,7 @@
     var myView = View.new('This should be ok')
     assert_equal('This should be ok', myView.content.value)
   END
-  # TODO: The root cause will be identified later.
-  v9.CheckScriptFailure(lines, 'E1099: Unknown error while executing new', 7)
+  v9.CheckScriptFailure(lines, 'E1376: Object variable "value2" accessible only using class "Run" object', 2)
 enddef
 
 " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
diff --git a/src/version.c b/src/version.c
index 12cdfce..f72f817 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1099,
+/**/
     1098,
 /**/
     1097,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index aa3e17e..be26c9b 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -2496,9 +2496,10 @@
 	lhs->lhs_type = cctx->ctx_type_stack.ga_len == 0 ? &t_void
 						  : get_type_on_stack(cctx, 0);
 
-	if (lhs->lhs_type->tt_type == VAR_OBJECT)
+	if (lhs->lhs_type->tt_type == VAR_CLASS
+		|| lhs->lhs_type->tt_type == VAR_OBJECT)
 	{
-	    // Check whether the object variable is modifiable
+	    // Check whether the class or object variable is modifiable
 	    if (!lhs_class_member_modifiable(lhs, var_start, cctx))
 		return FAIL;
 	}
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 5022000..c7f0e67 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -2461,14 +2461,8 @@
 		otv = class->class_members_tv;
 	    }
 
-	    if (otv != NULL)
-	    {
-		clear_tv(&otv[lidx]);
-		otv[lidx] = *tv;
-	    }
-	    else
-		status = FAIL;
-
+	    clear_tv(&otv[lidx]);
+	    otv[lidx] = *tv;
 	}
 	else
 	{