diff --git a/tests/basics/class_super.py b/tests/basics/class_super.py
index 4b052d8f3cf14cbe366b7edcf37467f67cee51aa..1338ef4523208928ca417a679bea63d2fff33eba 100644
--- a/tests/basics/class_super.py
+++ b/tests/basics/class_super.py
@@ -20,3 +20,17 @@ class A:
     def p(self):
         print(str(super())[:18])
 A().p()
+
+
+# test compiler's handling of long expressions with super
+class A:
+    bar = 123
+    def foo(self):
+        print('A foo')
+        return [1, 2, 3]
+class B(A):
+    def foo(self):
+        print('B foo')
+        print(super().bar) # accessing attribute after super()
+        return super().foo().count(2) # calling a subsequent method
+print(B().foo())
diff --git a/tests/cmdline/cmd_showbc.py b/tests/cmdline/cmd_showbc.py
index 2f4e953bb24f519ae0f8e7bdf209023d541a8ea5..6e99fc418905b105f977a6396f1d44f6a33a36af 100644
--- a/tests/cmdline/cmd_showbc.py
+++ b/tests/cmdline/cmd_showbc.py
@@ -150,3 +150,7 @@ class Class:
 
 # delete name
 del Class
+
+# load super method
+def f(self):
+    super().f()
diff --git a/tests/cmdline/cmd_showbc.py.exp b/tests/cmdline/cmd_showbc.py.exp
index d0baee10f8a2a4f86904f52c41bdf676bbafe1e3..1e015eb03cd3eee92421eedd11ce359bbf15d2d0 100644
--- a/tests/cmdline/cmd_showbc.py.exp
+++ b/tests/cmdline/cmd_showbc.py.exp
@@ -7,7 +7,7 @@ arg names:
 (N_EXC_STACK 0)
   bc=-1 line=1
 ########
-  bc=\\d\+ line=152
+  bc=\\d\+ line=155
 00 MAKE_FUNCTION \.\+
 \\d\+ STORE_NAME f
 \\d\+ MAKE_FUNCTION \.\+
@@ -25,6 +25,8 @@ arg names:
 \\d\+ CALL_FUNCTION n=2 nkw=0
 \\d\+ STORE_NAME Class
 \\d\+ DELETE_NAME Class
+\\d\+ MAKE_FUNCTION \.\+
+\\d\+ STORE_NAME f
 \\d\+ LOAD_CONST_NONE
 \\d\+ RETURN_VALUE
 File cmdline/cmd_showbc.py, code block 'f' (descriptor: \.\+, bytecode @\.\+ bytes)
@@ -428,6 +430,23 @@ arg names:
 10 STORE_NAME __qualname__
 13 LOAD_CONST_NONE
 14 RETURN_VALUE
+File cmdline/cmd_showbc.py, code block 'f' (descriptor: \.\+, bytecode @\.\+ bytes)
+Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
+########
+\.\+5b
+arg names: self
+(N_STATE 4)
+(N_EXC_STACK 0)
+  bc=-1 line=1
+  bc=0 line=156
+00 LOAD_GLOBAL super (cache=0)
+\\d\+ LOAD_GLOBAL __class__ (cache=0)
+\\d\+ LOAD_FAST 0
+\\d\+ LOAD_SUPER_METHOD f
+\\d\+ CALL_METHOD n=0 nkw=0
+\\d\+ POP_TOP
+\\d\+ LOAD_CONST_NONE
+\\d\+ RETURN_VALUE
 File cmdline/cmd_showbc.py, code block '<genexpr>' (descriptor: \.\+, bytecode @\.\+ bytes)
 Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
 ########
diff --git a/tests/micropython/heapalloc_super.py b/tests/micropython/heapalloc_super.py
new file mode 100644
index 0000000000000000000000000000000000000000..1cf5293d2d28661c2e2069e3f7976952d6ceb5ae
--- /dev/null
+++ b/tests/micropython/heapalloc_super.py
@@ -0,0 +1,17 @@
+# test super() operations which don't require allocation
+import micropython
+
+class A:
+    def foo(self):
+        print('A foo')
+        return 42
+class B(A):
+    def foo(self):
+        print('B foo')
+        print(super().foo())
+
+b = B()
+
+micropython.heap_lock()
+b.foo()
+micropython.heap_unlock()
diff --git a/tests/micropython/heapalloc_super.py.exp b/tests/micropython/heapalloc_super.py.exp
new file mode 100644
index 0000000000000000000000000000000000000000..5dabd0c7ccd3b05e4ee79750340f69ac72af1648
--- /dev/null
+++ b/tests/micropython/heapalloc_super.py.exp
@@ -0,0 +1,3 @@
+B foo
+A foo
+42