C C-LB+o-sync-o+rl-o-o-rul+o-rl-rul-o+o-sync-o.litmus

{
}

P0(int *a, int *b)
{
	int r1;

	r1 = READ_ONCE(*a);
	synchronize_rcu();
	WRITE_ONCE(*b, 1);
}

P1(int *b, int *c)
{
	int r2;

	rcu_read_lock();
	r2 = READ_ONCE(*b);
	WRITE_ONCE(*c, 1);
	rcu_read_unlock();
}

P2(int *c, int *d)
{
	int r3;

	r3 = READ_ONCE(*c);
	rcu_read_lock();
	// do_something_else();
	rcu_read_unlock();
	WRITE_ONCE(*d, 1);
}

P3(int *d, int *a)
{
	int r4;

	r4 = READ_ONCE(*d);
	synchronize_rcu();
	WRITE_ONCE(*a, 1);
}

exists
(0:r1=1 /\ 1:r2=1 /\ 2:r3=1 /\ 3:r4=1)
