Lines Matching full:context
41 // static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
51 // IsStructurallyEquivalent(StructuralEquivalenceContext &Context, Decl *D1,
98 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
100 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
102 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
104 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
107 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
110 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
116 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
131 return IsStructurallyEquivalent(Context, Name1.getCXXNameType(),
136 Context, Name1.getCXXDeductionGuideTemplate()->getDeclName(),
139 return IsStructurallyEquivalent(Context,
167 StructuralEquivalenceContext &Context;
174 return IsStructurallyEquivalent(Context, E1->getLabel(), E2->getLabel());
199 return IsStructurallyEquivalent(Context, Callee1, Callee2);
225 return IsStructurallyEquivalent(Context, const_cast<ValueDecl *>(Decl1),
231 if (!IsStructurallyEquivalent(Context, DE1->getDeclName(),
234 return IsStructurallyEquivalent(Context, DE1->getQualifier(),
239 return IsStructurallyEquivalent(Context, E1->getType(), E2->getType());
261 if (!IsStructurallyEquivalent(Context, (*Child1)->getType(),
271 return IsStructurallyEquivalent(Context, CastE1->getType(),
280 return IsStructurallyEquivalent(Context, E1->getFoundDecl(),
317 if (!IsStructurallyEquivalent(Context, E1->getAssociatedDecl(),
329 return IsStructurallyEquivalent(Context, E1->getArgumentPack(),
344 if (!IsStructurallyEquivalent(Context, (*Child1)->getType(),
353 if (!IsStructurallyEquivalent(Context, E1->getMember(), E2->getMember())) {
356 return IsStructurallyEquivalent(Context, E1->getBaseType(),
364 return IsStructurallyEquivalent(Context, E1->getTypeOfArgument(),
378 if (!IsStructurallyEquivalent(Context, E1->getName(), E2->getName()))
385 !IsStructurallyEquivalent(Context, E1->getQualifier(),
395 if (!IsStructurallyEquivalent(Context, Args1[ArgI], Args2[ArgI]))
423 StmtComparer(StructuralEquivalenceContext &C) : Context(C) {}
452 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
457 IsStructurallyEquivalent(Context, E1->getSubExpr(), E2->getArg(0));
460 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
465 IsStructurallyEquivalent(Context, E1->getArg(0), E2->getSubExpr());
468 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
473 IsStructurallyEquivalent(Context, E1->getLHS(), E2->getArg(0)) &&
474 IsStructurallyEquivalent(Context, E1->getRHS(), E2->getArg(1));
477 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
482 IsStructurallyEquivalent(Context, E1->getArg(0), E2->getLHS()) &&
483 IsStructurallyEquivalent(Context, E1->getArg(1), E2->getRHS());
487 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
502 return IsStructurallyEquivalent(Context, E1Unary, E2CXXOperatorCall);
504 return IsStructurallyEquivalent(Context, E1Binary, E2CXXOperatorCall);
508 return IsStructurallyEquivalent(Context, E1CXXOperatorCall, E2Unary);
510 return IsStructurallyEquivalent(Context, E1CXXOperatorCall, E2Binary);
514 StmtComparer Comparer(Context);
526 if (!IsStructurallyEquivalent(Context, *Child1, *Child2))
542 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
554 if (!IsStructurallyEquivalent(Context, Prefix1, Prefix2))
562 return IsStructurallyEquivalent(Context, NNS1->getAsNamespace(),
565 return IsStructurallyEquivalent(Context, NNS1->getAsNamespaceAlias(),
569 return IsStructurallyEquivalent(Context, QualType(NNS1->getAsType(), 0),
574 return IsStructurallyEquivalent(Context, NNS1->getAsRecordDecl(),
580 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
586 if (!IsStructurallyEquivalent(Context, TemplateDeclN1, TemplateDeclN2))
605 if (!IsStructurallyEquivalent(Context, *I1, *I2))
619 if (!IsStructurallyEquivalent(Context, DN1->getQualifier(),
634 return IsStructurallyEquivalent(Context, P1->getArgumentPack(),
636 IsStructurallyEquivalent(Context, P1->getAssociatedDecl(),
656 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
661 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
672 return IsStructurallyEquivalent(Context, Arg1.getAsType(), Arg2.getAsType());
675 if (!IsStructurallyEquivalent(Context, Arg1.getIntegralType(),
683 return IsStructurallyEquivalent(Context, Arg1.getAsDecl(), Arg2.getAsDecl());
689 return IsStructurallyEquivalent(Context, Arg1.getAsTemplate(),
693 return IsStructurallyEquivalent(Context,
698 return IsStructurallyEquivalent(Context, Arg1.getAsExpr(),
705 return IsStructurallyEquivalent(Context, Arg1.pack_elements(),
713 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
719 if (!IsStructurallyEquivalent(Context, Args1[I], Args2[I]))
726 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
729 return IsStructurallyEquivalent(Context, Arg1.getArgument(),
735 static bool IsArrayStructurallyEquivalent(StructuralEquivalenceContext &Context,
738 if (!IsStructurallyEquivalent(Context, Array1->getElementType(),
752 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
776 static bool IsEquivalentExceptionSpec(StructuralEquivalenceContext &Context,
792 if (!IsStructurallyEquivalent(Context, Proto1->getExceptionType(I),
797 if (!IsStructurallyEquivalent(Context, Proto1->getNoexceptExpr(),
806 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
814 if (!Context.StrictTypeSpelling) {
817 T1 = Context.FromCtx.getCanonicalType(T1);
818 T2 = Context.ToCtx.getCanonicalType(T2);
847 if (!IsStructurallyEquivalent(Context,
856 if (!IsStructurallyEquivalent(Context,
863 if (!IsStructurallyEquivalent(Context,
870 if (!IsStructurallyEquivalent(Context,
884 if (!IsStructurallyEquivalent(Context, Ref1->getPointeeTypeAsWritten(),
893 if (!IsStructurallyEquivalent(Context, MemPtr1->getPointeeType(),
896 if (!IsStructurallyEquivalent(Context, QualType(MemPtr1->getClass(), 0),
908 if (!IsArrayStructurallyEquivalent(Context, Array1, Array2))
914 if (!IsArrayStructurallyEquivalent(Context, cast<ArrayType>(T1),
922 if (!IsStructurallyEquivalent(Context, Array1->getSizeExpr(),
926 if (!IsArrayStructurallyEquivalent(Context, Array1, Array2))
935 if (!IsStructurallyEquivalent(Context, Array1->getSizeExpr(),
939 if (!IsArrayStructurallyEquivalent(Context, Array1, Array2))
948 if (!IsStructurallyEquivalent(Context, DepAddressSpace1->getAddrSpaceExpr(),
951 if (!IsStructurallyEquivalent(Context, DepAddressSpace1->getPointeeType(),
961 if (!IsStructurallyEquivalent(Context, Vec1->getSizeExpr(),
964 if (!IsStructurallyEquivalent(Context, Vec1->getElementType(),
975 if (!IsStructurallyEquivalent(Context, Vec1->getSizeExpr(),
978 if (!IsStructurallyEquivalent(Context, Vec1->getElementType(),
988 if (!IsStructurallyEquivalent(Context, Vec1->getElementType(),
1003 if (!IsStructurallyEquivalent(Context, Mat1->getRowExpr(),
1005 !IsStructurallyEquivalent(Context, Mat1->getColumnExpr(),
1007 !IsStructurallyEquivalent(Context, Mat1->getElementType(),
1018 if (!IsStructurallyEquivalent(Context, Mat1->getElementType(),
1033 if (!IsStructurallyEquivalent(Context, Proto1->getParamType(I),
1045 cast<FunctionProtoType>(OrigT1.getDesugaredType(Context.FromCtx));
1047 cast<FunctionProtoType>(OrigT2.getDesugaredType(Context.ToCtx));
1048 if (!IsEquivalentExceptionSpec(Context, OrigProto1, OrigProto2))
1058 if (!IsStructurallyEquivalent(Context, Function1->getReturnType(),
1061 if (!IsStructurallyEquivalent(Context, Function1->getExtInfo(),
1068 if (!IsStructurallyEquivalent(Context,
1075 if (!IsStructurallyEquivalent(Context,
1080 Context, cast<AttributedType>(T1)->getEquivalentType(),
1086 if (!IsStructurallyEquivalent(Context,
1094 Context, cast<BTFTagAttributedType>(T1)->getWrappedType(),
1101 Context, cast<HLSLAttributedResourceType>(T1)->getWrappedType(),
1105 Context, cast<HLSLAttributedResourceType>(T1)->getContainedType(),
1114 if (!IsStructurallyEquivalent(Context, cast<ParenType>(T1)->getInnerType(),
1121 Context, cast<MacroQualifiedType>(T1)->getUnderlyingType(),
1127 if (!IsStructurallyEquivalent(Context, cast<UsingType>(T1)->getFoundDecl(),
1130 if (!IsStructurallyEquivalent(Context,
1137 if (!IsStructurallyEquivalent(Context, cast<TypedefType>(T1)->getDecl(),
1139 !IsStructurallyEquivalent(Context, cast<TypedefType>(T1)->desugar(),
1146 Context, cast<TypeOfExprType>(T1)->getUnderlyingExpr(),
1152 if (!IsStructurallyEquivalent(Context,
1160 Context, cast<UnaryTransformType>(T1)->getUnderlyingType(),
1166 if (!IsStructurallyEquivalent(Context,
1175 if (!IsStructurallyEquivalent(Context, Auto1->getDeducedType(),
1184 if (!IsStructurallyEquivalent(Context,
1195 if (!IsStructurallyEquivalent(Context, DT1->getTemplateName(),
1198 if (!IsStructurallyEquivalent(Context, DT1->getDeducedType(),
1206 if (!IsStructurallyEquivalent(Context, cast<TagType>(T1)->getDecl(),
1214 if (!Context.IgnoreTemplateParmDepth &&
1229 if (!IsStructurallyEquivalent(Context, Subst1->getReplacementType(),
1232 if (!IsStructurallyEquivalent(Context, Subst1->getAssociatedDecl(),
1245 if (!IsStructurallyEquivalent(Context, Subst1->getAssociatedDecl(),
1250 if (!IsStructurallyEquivalent(Context, Subst1->getArgumentPack(),
1259 if (!IsStructurallyEquivalent(Context, Spec1->getTemplateName(),
1262 if (!IsStructurallyEquivalent(Context, Spec1->template_arguments(),
1276 if (!IsStructurallyEquivalent(Context, Elab1->getQualifier(),
1279 if (!IsStructurallyEquivalent(Context, Elab1->getNamedType(),
1288 if (!IsStructurallyEquivalent(Context,
1298 if (!IsStructurallyEquivalent(Context, Typename1->getQualifier(),
1311 if (!IsStructurallyEquivalent(Context, Spec1->getQualifier(),
1317 if (!IsStructurallyEquivalent(Context, Spec1->template_arguments(),
1324 if (!IsStructurallyEquivalent(Context,
1331 if (!IsStructurallyEquivalent(Context,
1334 if (!IsStructurallyEquivalent(Context,
1343 if (!IsStructurallyEquivalent(Context, Iface1->getDecl(),
1352 if (!IsStructurallyEquivalent(Context, Obj1->getDecl(), Obj2->getDecl()))
1358 if (!IsStructurallyEquivalent(Context, Obj1->getProtocol(I),
1368 if (!IsStructurallyEquivalent(Context, Obj1->getBaseType(),
1374 if (!IsStructurallyEquivalent(Context, Obj1->getProtocol(I),
1384 if (!IsStructurallyEquivalent(Context, Ptr1->getPointeeType(),
1391 if (!IsStructurallyEquivalent(Context, cast<AtomicType>(T1)->getValueType(),
1397 if (!IsStructurallyEquivalent(Context, cast<PipeType>(T1)->getElementType(),
1415 !IsStructurallyEquivalent(Context, Int1->getNumBitsExpr(),
1425 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
1432 if (!IsStructurallyEquivalent(Context, D1->getType(), D2->getType()))
1444 return IsStructurallyEquivalent(Context, D1->getInit(), D2->getInit());
1447 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
1459 return IsStructurallyEquivalent(Context, D1, D2);
1466 if (Context.Complain) {
1467 Context.Diag2(
1469 Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent))
1471 Context.Diag2(Field2->getLocation(), diag::note_odr_field_name)
1473 Context.Diag1(Field1->getLocation(), diag::note_odr_field_name)
1479 if (!IsStructurallyEquivalent(Context, Field1->getType(),
1481 if (Context.Complain) {
1482 Context.Diag2(
1484 Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent))
1486 Context.Diag2(Field2->getLocation(), diag::note_odr_field)
1488 Context.Diag1(Field1->getLocation(), diag::note_odr_field)
1495 return IsStructurallyEquivalent(Context, Field1->getBitWidth(),
1502 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
1505 return IsStructurallyEquivalent(Context, Field1, Field2,
1506 Context.ToCtx.getTypeDeclType(Owner2));
1510 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
1543 if (!IsStructurallyEquivalent(Context, Conversion1->getConversionType(),
1556 if (!::IsStructurallyEquivalent(Context,
1565 IsStructurallyEquivalentLambdas(StructuralEquivalenceContext &Context,
1569 if (!IsStructurallyEquivalent(Context, D1->getLambdaCallOperator(),
1576 /// Determine if context of a class is equivalent.
1578 IsRecordContextStructurallyEquivalent(StructuralEquivalenceContext &Context,
1580 // The context should be completely equal, including anonymous and inline
1608 if (!IsStructurallyEquivalent(Context, D1Spec, D2Spec))
1631 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
1638 if (Context.Complain) {
1639 Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(
1641 << Context.ToCtx.getTypeDeclType(D2);
1642 Context.Diag1(D1->getLocation(), diag::note_odr_tag_kind_here)
1649 // If both anonymous structs/unions are in a record context, make sure
1650 // they occur in the same location in the context records.
1662 // If the records occur in different context (namespace), these should be
1665 if (!IsRecordContextStructurallyEquivalent(Context, D1, D2))
1674 if (!IsStructurallyEquivalent(Context, Spec1->getSpecializedTemplate(),
1683 if (!IsStructurallyEquivalent(Context, Spec1->getTemplateArgs().get(I),
1705 if (Context.EqKind == StructuralEquivalenceKind::Minimal)
1724 if (!IsStructurallyEquivalentLambdas(Context, D1CXX, D2CXX))
1729 if (Context.Complain) {
1730 Context.Diag2(D2->getLocation(),
1731 Context.getApplicableDiagnostic(
1733 << Context.ToCtx.getTypeDeclType(D2);
1734 Context.Diag2(D2->getLocation(), diag::note_odr_number_of_bases)
1736 Context.Diag1(D1->getLocation(), diag::note_odr_number_of_bases)
1747 if (!IsStructurallyEquivalent(Context, Base1->getType(),
1749 if (Context.Complain) {
1750 Context.Diag2(D2->getLocation(),
1751 Context.getApplicableDiagnostic(
1753 << Context.ToCtx.getTypeDeclType(D2);
1754 Context.Diag2(Base2->getBeginLoc(), diag::note_odr_base)
1756 Context.Diag1(Base1->getBeginLoc(), diag::note_odr_base)
1764 if (Context.Complain) {
1765 Context.Diag2(D2->getLocation(),
1766 Context.getApplicableDiagnostic(
1768 << Context.ToCtx.getTypeDeclType(D2);
1769 Context.Diag2(Base2->getBeginLoc(), diag::note_odr_virtual_base)
1771 Context.Diag1(Base1->getBeginLoc(), diag::note_odr_base)
1785 if (Context.Complain) {
1786 Context.Diag2(D2->getLocation(),
1787 Context.getApplicableDiagnostic(
1789 << Context.ToCtx.getTypeDeclType(D2CXX);
1790 Context.Diag1((*Friend1)->getFriendLoc(), diag::note_odr_friend);
1791 Context.Diag2(D2->getLocation(), diag::note_odr_missing_friend);
1796 if (!IsStructurallyEquivalent(Context, *Friend1, *Friend2)) {
1797 if (Context.Complain) {
1798 Context.Diag2(D2->getLocation(),
1799 Context.getApplicableDiagnostic(
1801 << Context.ToCtx.getTypeDeclType(D2CXX);
1802 Context.Diag1((*Friend1)->getFriendLoc(), diag::note_odr_friend);
1803 Context.Diag2((*Friend2)->getFriendLoc(), diag::note_odr_friend);
1810 if (Context.Complain) {
1811 Context.Diag2(D2->getLocation(),
1812 Context.getApplicableDiagnostic(
1814 << Context.ToCtx.getTypeDeclType(D2);
1815 Context.Diag2((*Friend2)->getFriendLoc(), diag::note_odr_friend);
1816 Context.Diag1(D1->getLocation(), diag::note_odr_missing_friend);
1821 if (Context.Complain) {
1822 Context.Diag2(D2->getLocation(),
1823 Context.getApplicableDiagnostic(
1825 << Context.ToCtx.getTypeDeclType(D2);
1827 Context.Diag1(Base1->getBeginLoc(), diag::note_odr_base)
1829 Context.Diag2(D2->getLocation(), diag::note_odr_missing_base);
1836 QualType D2Type = Context.ToCtx.getTypeDeclType(D2);
1843 if (Context.Complain) {
1844 Context.Diag2(D2->getLocation(),
1845 Context.getApplicableDiagnostic(
1847 << Context.ToCtx.getTypeDeclType(D2);
1848 Context.Diag1(Field1->getLocation(), diag::note_odr_field)
1850 Context.Diag2(D2->getLocation(), diag::note_odr_missing_field);
1855 if (!IsStructurallyEquivalent(Context, *Field1, *Field2, D2Type))
1860 if (Context.Complain) {
1861 Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(
1863 << Context.ToCtx.getTypeDeclType(D2);
1864 Context.Diag2(Field2->getLocation(), diag::note_odr_field)
1866 Context.Diag1(D1->getLocation(), diag::note_odr_missing_field);
1874 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
1890 return IsStructurallyEquivalent(Context, D1->getInitExpr(),
1895 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
1914 if (Context.Complain) {
1915 Context.Diag2(D2->getLocation(),
1916 Context.getApplicableDiagnostic(
1918 << Context.ToCtx.getTypeDeclType(D2);
1919 Context.Diag1(EC1->getLocation(), diag::note_odr_enumerator)
1921 Context.Diag2(D2->getLocation(), diag::note_odr_missing_enumerator);
1930 if (Context.Complain) {
1931 Context.Diag2(D2->getLocation(),
1932 Context.getApplicableDiagnostic(
1934 << Context.ToCtx.getTypeDeclType(D2);
1935 Context.Diag2(EC2->getLocation(), diag::note_odr_enumerator)
1937 Context.Diag1(EC1->getLocation(), diag::note_odr_enumerator)
1945 if (Context.Complain) {
1946 Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(
1948 << Context.ToCtx.getTypeDeclType(D2);
1949 Context.Diag2(EC2->getLocation(), diag::note_odr_enumerator)
1951 Context.Diag1(D1->getLocation(), diag::note_odr_missing_enumerator);
1959 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
1963 if (Context.Complain) {
1964 Context.Diag2(Params2->getTemplateLoc(),
1965 Context.getApplicableDiagnostic(
1968 Context.Diag1(Params1->getTemplateLoc(),
1976 if (Context.Complain) {
1977 Context.Diag2(Params2->getParam(I)->getLocation(),
1978 Context.getApplicableDiagnostic(
1980 Context.Diag1(Params1->getParam(I)->getLocation(),
1986 if (!IsStructurallyEquivalent(Context, Params1->getParam(I),
1994 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
1998 if (Context.Complain) {
1999 Context.Diag2(D2->getLocation(),
2000 Context.getApplicableDiagnostic(
2003 Context.Diag1(D1->getLocation(), diag::note_odr_parameter_pack_non_pack)
2012 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
2016 if (Context.Complain) {
2017 Context.Diag2(D2->getLocation(),
2018 Context.getApplicableDiagnostic(
2021 Context.Diag1(D1->getLocation(), diag::note_odr_parameter_pack_non_pack)
2026 if (!Context.IgnoreTemplateParmDepth && D1->getDepth() != D2->getDepth())
2031 if (!IsStructurallyEquivalent(Context, D1->getType(), D2->getType())) {
2032 if (Context.Complain) {
2033 Context.Diag2(D2->getLocation(),
2034 Context.getApplicableDiagnostic(
2037 Context.Diag1(D1->getLocation(), diag::note_odr_value_here)
2046 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
2050 if (Context.Complain) {
2051 Context.Diag2(D2->getLocation(),
2052 Context.getApplicableDiagnostic(
2055 Context.Diag1(D1->getLocation(), diag::note_odr_parameter_pack_non_pack)
2062 return IsStructurallyEquivalent(Context, D1->getTemplateParameters(),
2077 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
2081 if (!IsTemplateDeclCommonStructurallyEquivalent(Context, D1, D2))
2085 return IsStructurallyEquivalent(Context, D1->getTemplatedDecl(),
2089 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
2093 if (!IsTemplateDeclCommonStructurallyEquivalent(Context, D1, D2))
2097 return IsStructurallyEquivalent(Context, D1->getTemplatedDecl()->getType(),
2101 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
2105 if (!IsTemplateDeclCommonStructurallyEquivalent(Context, D1, D2))
2109 return IsStructurallyEquivalent(Context, D1->getTemplatedDecl(),
2113 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
2117 if (!IsTemplateDeclCommonStructurallyEquivalent(Context, D1, D2))
2121 return IsStructurallyEquivalent(Context, D1->getConstraintExpr(),
2125 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
2132 return IsStructurallyEquivalent(Context,
2136 return IsStructurallyEquivalent(Context, D1->getFriendDecl(),
2141 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
2146 return IsStructurallyEquivalent(Context, D1->getUnderlyingType(),
2150 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
2163 if (!IsStructurallyEquivalent(Context, D1->getType(), D2->getType()))
2169 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
2175 return IsStructurallyEquivalent(Context, cast<FieldDecl>(D1),
2179 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
2182 Context.ToCtx.getObjCInterfaceType(D2->getContainingInterface());
2183 return IsStructurallyEquivalent(Context, D1, D2, Owner2Type);
2186 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
2212 if (!IsStructurallyEquivalent(Context, Method1->getReturnType(),
2225 if (!IsStructurallyEquivalent(Context, *ParamT1, *ParamT2))
2232 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
2264 Intf2 ? Context.ToCtx.getObjCInterfaceType(Intf2) : QualType();
2272 if (!IsStructurallyEquivalent(Context, *Ivar1, *Ivar2, D2Type))
2286 if (!IsStructurallyEquivalent(Context, *Method1, *Method2))
2296 static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
2306 if (Context.NonEquivalentDecls.count(
2307 std::make_tuple(D1, D2, Context.IgnoreTemplateParmDepth)))
2313 bool Inserted = Context.VisitedDecls.insert(P).second;
2317 Context.DeclsToCheck.push(P);
2342 ASTContext &Context = Anon->getASTContext();
2343 QualType AnonTy = Context.getRecordType(Anon);
2356 if (Context.hasSameType(F->getType(), AnonTy))
2372 if (Context.hasSameType(FieldType, AnonTy))