| Index: src/types.cc
 | 
| diff --git a/src/types.cc b/src/types.cc
 | 
| index db638ed141d604e95ffe7ab9f9099aac0ba34a2d..da86ef2398130ec2dad1195e05d53b6d5def2e8d 100644
 | 
| --- a/src/types.cc
 | 
| +++ b/src/types.cc
 | 
| @@ -313,16 +313,12 @@ bool TypeImpl<Config>::SlowIs(TypeImpl* that) {
 | 
|  
 | 
|    // T <= (T1 \/ ... \/ Tn)  <=>  (T <= T1) \/ ... \/ (T <= Tn)
 | 
|    // (iff T is not a union)
 | 
| -  ASSERT(!this->IsUnion());
 | 
| -  if (that->IsUnion()) {
 | 
| -    UnionHandle unioned = handle(that->AsUnion());
 | 
| -    for (int i = 0; i < unioned->Length(); ++i) {
 | 
| -      if (this->Is(unioned->Get(i))) return true;
 | 
| -      if (this->IsBitset()) break;  // Fast fail, only first field is a bitset.
 | 
| -    }
 | 
| -    return false;
 | 
| +  ASSERT(!this->IsUnion() && that->IsUnion());
 | 
| +  UnionHandle unioned = handle(that->AsUnion());
 | 
| +  for (int i = 0; i < unioned->Length(); ++i) {
 | 
| +    if (this->Is(unioned->Get(i))) return true;
 | 
| +    if (this->IsBitset()) break;  // Fast fail, only first field is a bitset.
 | 
|    }
 | 
| -
 | 
|    return false;
 | 
|  }
 | 
|  
 | 
| @@ -382,11 +378,8 @@ bool TypeImpl<Config>::Maybe(TypeImpl* that) {
 | 
|    }
 | 
|  
 | 
|    ASSERT(!this->IsUnion() && !that->IsUnion());
 | 
| -  if (this->IsBitset()) {
 | 
| -    return BitsetType::IsInhabited(this->AsBitset() & that->BitsetLub());
 | 
| -  }
 | 
| -  if (that->IsBitset()) {
 | 
| -    return BitsetType::IsInhabited(this->BitsetLub() & that->AsBitset());
 | 
| +  if (this->IsBitset() || that->IsBitset()) {
 | 
| +    return BitsetType::IsInhabited(this->BitsetLub() & that->BitsetLub());
 | 
|    }
 | 
|    if (this->IsClass()) {
 | 
|      return that->IsClass()
 | 
| 
 |