The following works:
e : 2*x/(sqrt(y)+x) - (x^2/((sqrt(y)+x)^2));
trigrat(e);
trigrat(xthru(e));
Both of the following lines will make the second "trigrat" call take forever (100% CPU utilization, will never return):
( trigrat(e), trigrat(xthru(e)) );
[ trigrat(e), trigrat(xthru(e)) ];
So: evaluating both lines separately works, but evaluating them together or inside a function will cause the "bug".
If you switch the expressions, it works fine:
( trigrat(e), trigrat(xthru(e)) ); /* loops forever */
( trigrat(xthru(e)), trigrat(e) ); /* works */
trigrat bug demo
Maxima version: "5.28.0"
Maxima build date: "2012-09-03 11:36:16"
Host type: "x86_64-unknown-linux-gnu"
Lisp implementation type: "CLISP"
Lisp implementation version: "2.42 (2007-10-16) (built 3403443236) (memory 3555653780)"
Stavros Macrakis posted another, simpler, example on the mailing list:
f: 1/(y+sqrt(y))$
[trigrat(f), trigrat(f)]
It doesn't loop forever, but the first result is different from the second!