Why is my function being called when it should not be?

My function gets called when the bool is true or false, and it should only be called when booln=true. Here is the code:

public int int1;
public int int2;
private Vector3 dir;
public bool booln;

void Start()
{
	dir.z=transform.position.z;
}

void OnCollisionEnter (Collision col)
{
	if(!(col.gameObject.name=="road")){
		Destroy(col.gameObject);
		int1=(int2+100);
	}
}

void func2(){
	if(Input.GetKeyDown(KeyCode.D)&&(dir.x<6)){
		dir.z=transform.position.z;
		dir.x+=3;
		transform.position=dir;
	}
	
	if(Input.GetKeyDown(KeyCode.A)&&(dir.x>(-6))){
		dir.z=transform.position.z;
		dir.x-=3;
		transform.position=dir;
	}
}

void func1()
{
	int2++;
	if(int2>=int1){booln=true;} 
	if(int2<int1){booln=false;}

	if(booln==true){func2();}
}

void LateUpdate()
{
	func1();
}

P.S. any unnecessary code is there because I am frustrated.

If anybody else winds up having the same problem just look at the comments of the question.

The script in your first post, is that CLeftRight2.cs ?
Also wondering if that particular script is anywhere else? It could be running multiple instances of the same script. Try making your int and booln variables static, so there can only be one instance of them.
You could also put an instance check in the code, but this would gloss over a problem if the script is inadvertantly running elsewhere.

// in another script, maybe GameManager or similar
public CLeftRightMove2 instanceCheck;

// In the CLeftRightMove2 Start() function

if (!GameManager.instanceCheck)
{
 GameManager.instanceCheck=this;
}
else if (GameManager.instanceCheck!=this)
{
 Destroy(this);
}