/* Generated by re2c */
// re2c $INPUT -o $OUTPUT -i --tags
// This test demonstrates the need for copy coalescing during
// allocation of tag variables: low interference allows for many
// ways of partitioning tag versions into equivalence classes.

// Without copy coalescing the choice is arbitrary: operands of
// copy command may or may not get into the same class.
// Coalescing adds bias to this choice: we first try to merge
// copy operands, then examine the rest of tags.

yyt1


{
	YYCTYPE yych;
	unsigned int yyaccept = 0;
	if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
	yych = *YYCURSOR;
	switch (yych) {
		case 'a': goto yy3;
		default: goto yy1;
	}
yy1:
	++YYCURSOR;
yy2:
	{}
yy3:
	yych = *++YYCURSOR;
	switch (yych) {
		case 'c': goto yy4;
		case 'd': goto yy6;
		default: goto yy2;
	}
yy4:
	yyaccept = 0;
	YYMARKER = ++YYCURSOR;
	if (YYLIMIT <= YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
	switch (yych) {
		case 'a': goto yy8;
		default:
			yyt1 = YYCURSOR;
			goto yy5;
	}
yy5:
	q = yyt1;
	p = yyt1;
	if (p != NULL) p -= 1;
	{ p q }
yy6:
	yyaccept = 1;
	YYMARKER = ++YYCURSOR;
	if (YYLIMIT <= YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
	switch (yych) {
		case 'a': goto yy10;
		default:
			yyt1 = YYCURSOR;
			goto yy7;
	}
yy7:
	s = yyt1;
	r = yyt1;
	if (r != NULL) r -= 1;
	{ r s }
yy8:
	++YYCURSOR;
	if (YYLIMIT <= YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
	switch (yych) {
		case 'c': goto yy4;
		default: goto yy9;
	}
yy9:
	YYCURSOR = YYMARKER;
	if (yyaccept == 0) {
		yyt1 = YYCURSOR;
		goto yy5;
	} else {
		yyt1 = YYCURSOR;
		goto yy7;
	}
yy10:
	++YYCURSOR;
	if (YYLIMIT <= YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
	switch (yych) {
		case 'd': goto yy6;
		default: goto yy9;
	}
}

tags/copy_coalescing1.re:13:21: warning: rule matches empty string [-Wmatch-empty-string]
tags/copy_coalescing1.re:14:21: warning: rule matches empty string [-Wmatch-empty-string]
