code: func isCompat(t1, t2 *Type) bool {
  	t1 = stripTypedef(t1)
  	t2 = stripTypedef(t2)
  	if t1 == nil || t2 == nil || t1.Kind != t2.Kind {
  		return false
  	}
  	if t1 == t2 {
  		return true
  	}
  	switch t1.Kind {
  	default:
  		// arithmetic
  		return true
  	case Ptr, Array:
  		return isCompat(ptrBase(t1), ptrBase(t2))
  	case Struct, Union, Enum:
  		return t1.Tag != "" && t1.Tag == t2.Tag
  	case Func:
  		if len(t1.Decls) != len(t2.Decls) || !isCompat(t1.Base, t2.Base) {
  			return false
  		}
  		for i, d1 := range t1.Decls {
  			d2 := t2.Decls[i]
  			if d1.Type == nil && d1.Name == "..." {
  				if d2.Type == nil && d2.Name == "..." {
  					continue
  				}
  				return false
  			}
  			if !isCompat(d1.Type, d2.Type) {
  				return false
  			}
  		}
  		return true
  	}
  }
docs: // This is not correct; see C99 §6.2.7.