+static bool compound_types_equal(const compound_type_t *type1,
+ const compound_type_t *type2)
+{
+ return type1->declaration == type2->declaration;
+}
+
+static bool enum_types_equal(const enum_type_t *type1,
+ const enum_type_t *type2)
+{
+ return type1->declaration == type2->declaration;
+}
+
+static bool typedef_types_equal(const typedef_type_t *type1,
+ const typedef_type_t *type2)
+{
+ return type1->declaration == type2->declaration;
+}
+
+static bool typeof_types_equal(const typeof_type_t *type1,
+ const typeof_type_t *type2)
+{
+ if(type1->expression != type2->expression)
+ return false;
+ if(type1->typeof_type != type2->typeof_type)
+ return false;
+
+ return true;
+}
+
+static bool types_equal(const type_t *type1, const type_t *type2)