//! Regression test for <https://github.com/rust-lang/rust/issues/27997>
//@ run-pass
use std::sync::atomic::{Ordering, AtomicUsize};

use std::mem;
struct S<U,V> {
    _u: U,
    size_of_u: usize,
    _v: V,
    size_of_v: usize
}

impl<U, V> S<U, V> {
    fn new(u: U, v: V) -> Self {
        S {
            _u: u,
            size_of_u: mem::size_of::<U>(),
            _v: v,
            size_of_v: mem::size_of::<V>()
        }
    }
}

static COUNT: AtomicUsize = AtomicUsize::new(0);

impl<V, U> Drop for S<U, V> {
    fn drop(&mut self) {
        assert_eq!(mem::size_of::<U>(), self.size_of_u);
        assert_eq!(mem::size_of::<V>(), self.size_of_v);
        COUNT.store(COUNT.load(Ordering::SeqCst)+1, Ordering::SeqCst);
    }
}

fn main() {
    assert_eq!(COUNT.load(Ordering::SeqCst), 0);
    { S::new(0u8, 1u16); }
    assert_eq!(COUNT.load(Ordering::SeqCst), 1);
}
