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.

--

Zihao