This is definitely wrong. This bit of code checks for subtypes and combines types, so just ignoring variadic means that you could combine variadic and non-variadic fn types indiscriminately. What you want to do is to require that both a.variadic and b.variadic agree, and then use a.variadic in the result. Something like:

```
if a.variadic != b.variadic { return Err(ty::terr_variadic_mismatch(expected_found(a.variadic, b.variadic)); }
...
Ok(FnSig {
...
variadic: a.variadic
})
```