class T {
	static int fib (int n) {
		int f0 = 0, f1 = 1, f2 = 0, i;

		if (n <= 1) goto L3;
		i = 2;
	L1:
		if (i <= n) goto L2;
		return f2;
	L2:
		f2 = f0 + f1;
		f0 = f1;
		f1 = f2;
		i++;
		goto L1;
	L3: 
		return n;
	}

	static int xx (int n) {
		if (n <= 1) goto L3;
	L1:
		if (1 <= n) goto L2;
		return n;
	L2:
		goto L1;
	L3:               
		return n;
	}

	// This is from System.Text.RegularExpressions.Syntax.Parser::ParseGroup.
	void foo (int a)
	{
		bool b = false;

		while (true) {
			switch (a) {
			case 3:
				break;
			}

			if (b)
				goto EndOfGroup;
		}

	EndOfGroup:
		;
	}

	// Another case of goto that we did not handle properly
	static void XXXA () {
		goto each_logic_expr;

		int j;
		bool x = true;
		try {
		}
		catch {}
		int dd;
		each_logic_expr:
		;
	}

	static void Main() {}
}
