SReject didn't put a halt or return at the end of each goto statement. This will display multiple random messages once triggered.
If you decide not to put a halt or return, you must use an alias to call from it. And yes, as Matcou said, the first message should've gone on top of the goto command.
The error check is not necessary based on the code construction.