Consider following code at dd162a3f226
(cl-defstruct (a (:noinline t)) b c)
(let ((a (make-a :b 1 :c 2)))
(setf (a-b a) 1))
Get an error "Symbol’s function definition is void: \(setf\ a-b\)".
IMO, the problem is when :noinline was given, cl-defstruct will use defun
instead of cl-defsubst to create getter, which can't be handled by "setf"'s form
expansion automatically. If we want to allow user to modify slots of a struct
defined with :noinline argument, we should define the setters manually.