{
NO_CHANGE_KIND = 0,
- /// This means that a given IR artifact has local differences, with
- /// respect to the other artifact it was compared against. A local
- /// change is a change that is carried by the artifact itself (or
- /// its type), rather than by one off its sub-types.
- ///
- /// Note that if this bit is set, then either one of the @ref
- /// LOCAL_TYPE_CHANGE_KIND or LOCAL_NON_TYPE_CHANGE_KIND bit must be
- /// set to, detailing what the kind of local change we have.
- LOCAL_CHANGE_KIND = 1,
-
- /// This means that a given IR artifact has a local type change. If
- /// this bit is set, then the LOCAL_CHANGE_KIND bit must be set too.
- LOCAL_TYPE_CHANGE_KIND = 1 << 1,
+ /// This means that a given IR artifact has a local type change.
+ LOCAL_TYPE_CHANGE_KIND = 1 << 0,
/// This means that a given IR artifact has a local non-type change.
/// That is a change that is carried by the artifact itself, not by
- /// its type. If this bit is set, then the LOCAL_CHANGE_KIND bit
- /// must be set too.
- LOCAL_NON_TYPE_CHANGE_KIND = 1 << 2,
+ /// its type.
+ LOCAL_NON_TYPE_CHANGE_KIND = 1 << 1,
+
+ /// Testing (anding) against this mask means that a given IR artifact has
+ /// local differences, with respect to the other artifact it was compared
+ /// against. A local change is a change that is carried by the artifact
+ /// itself (or its type), rather than by one off its sub-types.
+ ALL_LOCAL_CHANGES_MASK = LOCAL_TYPE_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND,
/// This means that a given IR artifact has changes in some of its
/// sub-types, with respect to the other artifact it was compared
/// against.
- SUBTYPE_CHANGE_KIND = 1 << 3,
-
- /// The masks below must always be the last enumerators.
- ALL_LOCAL_CHANGES_MASK =
- LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND
+ SUBTYPE_CHANGE_KIND = 1 << 2,
};// end enum change_kind
change_kind
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
&& l.get_alignment_in_bits() == r.get_alignment_in_bits());
if (!result)
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
return result;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
// Underlying type changes in which the structure of the
// type changed are considered local changes to the
// qualified type.
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
*k |= SUBTYPE_CHANGE_KIND;
}
// pointed-to type changes in which the structure of the
// type changed are considered local changes to the pointer
// type.
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
*k |= SUBTYPE_CHANGE_KIND;
}
if (l.is_lvalue() != r.is_lvalue())
{
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
return false;
}
if (k)
{
if (!types_have_similar_structure(&l, &r))
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
*k |= SUBTYPE_CHANGE_KIND;
}
return result;
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
return result;
}
{
if (!types_have_similar_structure(l.get_underlying_type().get(),
r.get_underlying_type().get()))
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
*k |= SUBTYPE_CHANGE_KIND;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
return false;
}
result = false;
if (k)
{
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
break;
}
else
result = true;
if (k)
{
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
break;
}
else
{
result = true;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
return true;
}
if (k)
{
if (!l.decl_base::operator==(r))
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
if (!l.type_base::operator==(r))
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
}
else
{
result = false;
if (k)
{
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
break;
}
else
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
return false;
}
if (k)
{
if (!l.decl_base::operator==(r))
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
if (!l.type_base::operator==(r))
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
}
else
return false;
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
if (!types_have_similar_structure(l.get_naked_type(),
r.get_naked_type()))
- *k |= (LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND);
+ *k |= (LOCAL_TYPE_CHANGE_KIND);
else
*k |= SUBTYPE_CHANGE_KIND;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
RETURN(result);
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
RETURN(result);
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
RETURN(result);
}
{
if (!types_have_similar_structure(lhs.get_return_type(),
rhs.get_return_type()))
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
*k |= SUBTYPE_CHANGE_KIND;
}
{
if (!types_have_similar_structure((*i)->get_type(),
(*j)->get_type()))
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
*k |= SUBTYPE_CHANGE_KIND;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
RETURN(result);
}
if (k)
{
if (!types_have_similar_structure(t0, t1))
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
*k |= SUBTYPE_CHANGE_KIND;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
return false;
}
if (k)
{
if (l.get_index() != r.get_index())
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
if (l.get_variadic_marker() != r.get_variadic_marker()
|| !!l.get_type() != !!r.get_type())
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
}
else
return false;
if (k)
{
if (!types_have_similar_structure(l_type, r_type))
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
*k |= SUBTYPE_CHANGE_KIND;
}
else
{
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
// Not using RETURN(true) here, because that causes
// performance issues. We don't need to do
// l.priv_->unmark_as_being_compared({l,r}) here because
if (!!def1 != !!def2)
{
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
return false;
}
&& l.type_base::operator==(r)))
{
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
return false;
}
bool val = *def1 == *def2;
if (!val)
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
RETURN(val);
}
if (!(l.decl_base::operator==(r) && l.type_base::operator==(r)))
{
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
RETURN(false);
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
RETURN(result);
}
// Report any representation change as being local.
if (!types_have_similar_structure((*d0)->get_type(),
(*d1)->get_type()))
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
*k |= SUBTYPE_CHANGE_KIND;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
RETURN(result);
}
result = false;
if (k)
{
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
break;
}
else
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
RETURN(result);
}
result = false;
if (k)
{
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
break;
}
else
if (!l.member_base::operator==(r))
{
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
return false;
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
RETURN(result);
}
{
if (!types_have_similar_structure((*b0)->get_base_class().get(),
(*b1)->get_base_class().get()))
- *k |= LOCAL_CHANGE_KIND | LOCAL_TYPE_CHANGE_KIND;
+ *k |= LOCAL_TYPE_CHANGE_KIND;
else
*k |= SUBTYPE_CHANGE_KIND;
break;
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
else
RETURN(result);
}
{
result = false;
if (k)
- *k |= LOCAL_CHANGE_KIND | LOCAL_NON_TYPE_CHANGE_KIND;
+ *k |= LOCAL_NON_TYPE_CHANGE_KIND;
RETURN(result);
}