Notice that the macro EACH_OBJ_TEST_0 begins a loop block (but not ending it), another macro END_EACH_OBJ_TEST_0 should be used to end the loop block.
Put the caret on the function func_after_test, and do a find reference on it, VA fails to show any reference.
bool test_obj(int* p)
{
	return p != nullptr;
}
#define EACH_OBJ_TEST_0(p, __IS_SEL)	for( ; p; (p)++)	{	if( !__IS_SEL(p) )	continue;
#define	END_EACH_OBJ_TEST_0						}
#define EACH_OBJ_TEST(p)						EACH_OBJ_TEST_0(p, test_obj)
#define	END_EACH_OBJ_TEST						END_EACH_OBJ_TEST_0
void func_before_test()
{
}
void test_function_1(int* p)
{
	EACH_OBJ_TEST(p)
		p++;
	END_EACH_OBJ_TEST
}
void func_after_test()
{
}
int main() {
	
	func_after_test();
	return 0;
}