diff --git a/pkgs/racket-test-core/tests/racket/jitinline.rktl b/pkgs/racket-test-core/tests/racket/jitinline.rktl index 567fdd9123..f9c005de6f 100644 --- a/pkgs/racket-test-core/tests/racket/jitinline.rktl +++ b/pkgs/racket-test-core/tests/racket/jitinline.rktl @@ -1055,6 +1055,13 @@ (test 9 dynamic-require ''assign-to-bytes-array-with-non-constant-offset 'out) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Make sure `char=?` and similar don't get confused when trying to +;; reverse the argument order internally +(let ([f (lambda () (char=? (peek-char (open-input-string "")) #\x))]) + (set! f f) + (err/rt-test (f))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/racket/src/racket/src/jitinline.c b/racket/src/racket/src/jitinline.c index 597d679b49..fa46ace7ce 100644 --- a/racket/src/racket/src/jitinline.c +++ b/racket/src/racket/src/jitinline.c @@ -2697,6 +2697,9 @@ static int generate_binary_char(mz_jit_state *jitter, Scheme_App3_Rec *app, int if (direction < 0) { /* reverse sense of comparison */ + GC_CAN_IGNORE Scheme_Object *tmp = r2; + r2 = r1; + r1 = tmp; switch (cmp) { case CMP_LEQ: cmp = CMP_GEQ;