Boolean expressions involving the NOT operator (') and side effects compile when ydb_boolean=1

Final Release Note

Boolean expressions involving the NOT operator (') and side effects ($increment(), extrinsic function calls, etc.) compile when the ydb_boolean or ydb_side_effects environment variables are set to 1. Previously, the compilation would hang (loop for ever). [#553 (closed)]

Description

Below is a simple example demonstrating the issue. test.m is a simple M program. If the ydb_boolean env var is set to 1, compiling this M program with a production build of YDB never terminates. And it hogs up 100% of the CPU. So it is in some spin loop. When compiling it with a debug build of YDB, one sees an assert failure. If the ydb_boolean env var is set to 0, then one does not see either the looping or the assert failure. This issue exists in all YDB releases and all GT.M versions starting V6.3-003A (until the latest V6.3-010). Note that for testing with GT.M versions, one needs to set the gtm_boolean env var to 1 as those do not honor the ydb_boolean env var.

$ cat test.m
	write 0!(0=('(1&$$zero))),!
	quit
zero()
	quit 0

$ export ydb_boolean=1
$ $ydb_dist/yottadb test.m
%YDB-F-ASSERT, Assert failed in sr_port/bx_relop.c line 56 for expression (NULL == tripbp->bpt)

Draft Release Note

Boolean expressions involving the NOT operator (') and side effects ($increment, extrinsic function calls etc.) compile fine when the ydb_boolean or ydb_side_effects env var is set to 1. Previously, the compile process would be stuck in a spin loop and never terminate. [#553 (closed)]

Edited by K.S. Bhaskar