P.S.: Use cases of identifier syntax include:
(1) Procedures overloaded by macros (as discussed here; see also
"define-integrable" in Chez's manual).
(2) Definition of immutable variables (where "set!" gives an error).
(3) LISP-style dynamic variables/C-style thread-local variables.
In all these cases, the syntax is well-behaved (and it can be reasoned
about as if variable references were given).
Thanks, that's helpful. From the logs of #scheme back in 2011-08, Sam Tobin-Hochstadt listed the following partial list of identifier-syntax uses in Racket: "contracted values, functions w/ keyword arguments, structure constructors, the `this' binding in classes, local field references in classes, imports in units". Note the presence of keyword arguments.
I also found this recipe (which could of course be packaged in a macro) for identifier-syntax with ER (the use of IR is trivial and could be removed):
(er-macro-transformer
(lambda (exp r c)
(let ([new-name (cadr exp)]
[old-name (caddr exp)])
`(define-syntax ,new-name
(ir-macro-transformer
(lambda (exp i c)
`(,',old-name ,@(cdr exp)))))))))