namespace Unity.Burst.CompilerServices
{
    /// 
    /// Compile-time aliasing intrinsics.
    /// 
    public static class Aliasing
    {
        /// 
        /// Will cause a compiler error in Burst-compiled code if a and b do not alias.
        /// 
        /// A pointer to do aliasing checks on.
        /// A pointer to do aliasing checks on.
        public static unsafe void ExpectAliased(void* a, void* b) { }
        /// 
        /// Will cause a compiler error in Burst-compiled code if a and b do not alias.
        /// 
        /// The type of a.
        /// The type of b.
        /// A reference to do aliasing checks on.
        /// A reference to do aliasing checks on.
        public static void ExpectAliased(in A a, in B b) where A : struct where B : struct { }
        /// 
        /// Will cause a compiler error in Burst-compiled code if a and b do not alias.
        /// 
        /// The type of b.
        /// A pointer to do aliasing checks on.
        /// A reference to do aliasing checks on.
        public static unsafe void ExpectAliased(void* a, in B b) where B : struct { }
        /// 
        /// Will cause a compiler error in Burst-compiled code if a and b do not alias.
        /// 
        /// The type of a.
        /// A reference to do aliasing checks on.
        /// A pointer to do aliasing checks on.
        public static unsafe void ExpectAliased(in A a, void* b) where A : struct { }
        /// 
        /// Will cause a compiler error in Burst-compiled code if a and b can alias.
        /// 
        /// A pointer to do aliasing checks on.
        /// A pointer to do aliasing checks on.
        public static unsafe void ExpectNotAliased(void* a, void* b) { }
        /// 
        /// Will cause a compiler error in Burst-compiled code if a and b can alias.
        /// 
        /// The type of a.
        /// The type of b.
        /// A reference to do aliasing checks on.
        /// A reference to do aliasing checks on.
        public static void ExpectNotAliased(in A a, in B b) where A : struct where B : struct { }
        /// 
        /// Will cause a compiler error in Burst-compiled code if a and b can alias.
        /// 
        /// The type of b.
        /// A pointer to do aliasing checks on.
        /// A reference to do aliasing checks on.
        public static unsafe void ExpectNotAliased(void* a, in B b) where B : struct { }
        /// 
        /// Will cause a compiler error in Burst-compiled code if a and b can alias.
        /// 
        /// The type of a.
        /// A reference to do aliasing checks on.
        /// A pointer to do aliasing checks on.
        public static unsafe void ExpectNotAliased(in A a, void* b) where A : struct { }
    }
}