diff --git a/src/las.c b/src/las.c
index becda1eae7126dbcb4d37365d942ee07eeaa3911..f33fbd40ddcbc440ff29de82879265ab1a013f22 100644
--- a/src/las.c
+++ b/src/las.c
@@ -3054,9 +3054,16 @@ static struct pike_string *get_name_of_function(node *n)
       if(SUBTYPEOF(n->u.sval) == FUNCTION_BUILTIN)
       {
 	name = n->u.sval.u.efun->name;
-      }else{
-	name =
-	  ID_FROM_INT(n->u.sval.u.object->prog, SUBTYPEOF(n->u.sval))->name;
+      } else {
+	struct program *p = n->u.sval.u.object->prog;
+	if (!p) {
+	  p = id_to_program(n->u.sval.u.object->program_id);
+	}
+	if (p) {
+	  name = ID_FROM_INT(p, SUBTYPEOF(n->u.sval))->name;
+	} else {
+	  MAKE_CONST_STRING(name, "function in destructed object");
+	}
       }
       break;
 
diff --git a/src/program.c b/src/program.c
index 470d57bb926b203fdbffc49b643714335e6a6d8e..992b7105f2bc516333a891ddedd968a23188e4c0 100644
--- a/src/program.c
+++ b/src/program.c
@@ -9100,6 +9100,7 @@ static int run_pass1(struct compilation *c)
     }else{
       free_program(c->placeholder->prog);
       add_ref(c->placeholder->prog=Pike_compiler->new_program);
+      c->placeholder->program_id = Pike_compiler->new_program->id;
       debug_malloc_touch(c->placeholder);
     }
   }