/* Generated by re2c */
// re2c $INPUT -o $OUTPUT -i --tags
// This test shows that tag liveness should be attributed to DFA edges,
// not to DFA states. State granularity is too crude: there might be
// two different paths to the same state, with some tag alive on one
// path but not on the other. If liveness is attributed to states, then
// tag liveness on one path implies tag liveness in the join state,
// which affects the other path. But if liveness is attributed to
// edges, then liveness of one path won't affect liveness of the other.

// In this example tag 'p' is loop-invariant: it should be moved out
// of loop and set once in the very end. However, if liveness is
// attributed to states rather than edges, the accepting state (dispatch
// on 'yyaccept') will force liveness on the looping path and prevent
// tag from hoisting out of loop.


{
	YYCTYPE yych;
	unsigned int yyaccept = 0;
	YYMARKER = YYCURSOR;
	if (YYLIMIT <= YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
	switch (yych) {
		case 'a': goto yy2;
		default:
			yyt1 = NULL;
			goto yy1;
	}
yy1:
	p = yyt1;
	{ p }
yy2:
	++YYCURSOR;
	if (YYLIMIT <= YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
	switch (yych) {
		case 'b': goto yy4;
		default: goto yy3;
	}
yy3:
	YYCURSOR = YYMARKER;
	if (yyaccept == 0) {
		yyt1 = NULL;
		goto yy1;
	} else {
		yyt1 = YYCURSOR;
		goto yy1;
	}
yy4:
	yyaccept = 1;
	YYMARKER = ++YYCURSOR;
	if (YYLIMIT <= YYCURSOR) YYFILL(1);
	yych = *YYCURSOR;
	switch (yych) {
		case 'a': goto yy2;
		default:
			yyt1 = YYCURSOR;
			goto yy1;
	}
}

tags/fallback2.re:18:15: warning: rule matches empty string [-Wmatch-empty-string]
