// run-pass
// Tests that nested vtables work with overloaded calls.

// pretty-expanded FIXME #23616

#![feature(unboxed_closures, fn_traits)]

use std::marker::PhantomData;
use std::ops::Fn;
use std::ops::Add;

struct G<A>(PhantomData<A>);

impl<'a, A: Add<i32, Output=i32>> Fn<(A,)> for G<A> {
    extern "rust-call" fn call(&self, (arg,): (A,)) -> i32 {
        arg.add(1)
    }
}

impl<'a, A: Add<i32, Output=i32>> FnMut<(A,)> for G<A> {
    extern "rust-call" fn call_mut(&mut self, args: (A,)) -> i32 { self.call(args) }
}

impl<'a, A: Add<i32, Output=i32>> FnOnce<(A,)> for G<A> {
    type Output = i32;
    extern "rust-call" fn call_once(self, args: (A,)) -> i32 { self.call(args) }
}

fn main() {
    // ICE trigger
    (G(PhantomData))(1);
}
