Might be related to this line here:
ATestWeapon* Wp = Cast<ATestWeapon>(Weapon);
What exactly is “Weapon”? Are you 100% sure it will always be valid? Do you ever assign the spawned “Wp” to your weapon variable?
Try adding a check such as
if(Wp) Wp->SetActorLocation(ADSOffset);