     [ struct f redefine-tuple-class ] [ make-final ] bi ;
 
 : resize-underlying ( struct -- )
-    [ 2 slot ]
-    [ class-of "struct-size" word-prop '[ _ swap resize ] [ f ] if* ]
+    [ 2 slot dup byte-array? ]
+    [ class-of "struct-size" word-prop '[ _ swap resize ] [ drop f ] if ]
     [ 2 set-slot ] tri ;
 
 M: struct update-tuple

    \ cleave [ ] 2sequence
    \ output>array [ ] 2sequence ;

: (define-struct-slot-values-method) ( class -- )
    [ \ struct-slot-values ] [ struct-slot-values-quot ] bi
    define-inline-method ;

: forget-struct-slot-values-method ( class -- )
    \ struct-slot-values ?lookup-method forget ;

: clone-underlying ( struct -- byte-array )
    binary-object memory>byte-array ; inline

: (define-clone-method) ( class -- )
    [ \ clone ]
    [ \ clone-underlying swap literalize \ memory>struct [ ] 3sequence ] bi
    define-inline-method ;

        [ forget-struct-slot-accessors ]
        [ forget-struct-slot-values-method ]
        [ forget-clone-method ]
        [ forget-equal-method ]
        [ { "c-type" "layout" "struct-size" } remove-word-props ]
        [ call-next-method ]
    } cleave ;
