I think I'm seeing a gambit bug.

I have a situation where this returns #f:

(with-exception-handler
  (lambda (e) #t)
  (lambda () (trampoline-gp-set! (make-trampoline) 6 99) #f))

And this returns #t:

(with-exception-catcher
  (lambda (e) #t)
  (lambda () (trampoline-gp-set! (make-trampoline) 6 99) #f))

And running this from the repl raises:

(trampoline-gp-set! (make-trampoline) 6 99)

The definition of trampoline-gp-set! is currently:

(define trampoline-gp-set!/internal
  (c-lambda (trampoline int unsigned-int64)
   void
    "___arg1->gp[___arg2] = ___arg3;"))

(define (trampoline-gp-set! trampoline index value)
  (if (>= index 6)
    (raise "invalid index for trampoline-gp-set!"))
  (trampoline-gp-set!/internal trampoline index value))

But all this happens with this definition as well:

(define trampoline-gp-set!
  (c-lambda (trampoline int unsigned-int64)
   void
#<<END_OF_C_LAMBDA
  if (___arg2 >= 6)  
    ___err = ___FIX(___UNKNOWN_ERR);
  else
    ___arg1->gp[___arg2] = ___arg3;
END_OF_C_LAMBDA
))

Am I missing something?

I'm using WITH-EXCEPTION-HANDLER elsewhere to do the same thing and it appears to be working there.