
void foo(void)
{
	int a = 0;
	while (a < 3) {
		a++;
	}

	while (b < a) // trailing C++ comment
		b++;

	do { // trailing C++ comment
		a--;
	} while (a > 0);

	do
		a--;
	while (a > 0);

	for (a = 0; a < 10; a++) { // trailing C++ comment
		printf("a=%d\n", a);
	}

	if (a == 10) { // trailing C++ comment
		printf("a looks good\n");
	} else { // trailing C++ comment
		printf("not so good\n");
	}

	if (state == ST_RUN) {
		if ((foo < bar) &&
		    (bar > foo2)) {
			if (a < 5) {
				a *= a;
			} else if (b != 0)
				a /= b;
			else // trailing C++ comment
				a += b;
		}
	}

	list_for_each(k)
	{
		if (a)
			if (b) {
				c++;
			}
	}


	while (1)
		; /* hang forever */
}

void f()
{
	if (buf[0] == '~' && strchr(tmp, '/') == NULL) {
		buf = mallocstrcpy(buf, tmp);
		matches = username_tab_completion(tmp, &num_matches);
	}
	/* If we're in the middle of the original line, copy the string
	   only up to the cursor position into buf, so tab completion
	   will result in buf's containing only the tab-completed
	   path/filename. */
	else if (strlen(buf) > strlen(tmp))
		buf = mallocstrcpy(buf, tmp);
}

void f()
{
}
void g()
{
}

