module top(input i, output o); A A(); B B(); assign A.i = i; assign o = B.o; always @* assert(o == i); endmodule module A; wire i, y; `ifdef FAIL assign B.x = i; `else assign B.x = !i; `endif assign y = !B.y; endmodule module B; wire x, y, o; assign y = x, o = A.y; endmodule