clang: lib/AST/ASTStructuralEquivalence.cpp File Reference (original) (raw)
Go to the source code of this file.
| Macros | |
|---|---|
| #define | STMT(CLASS, PARENT) |
| #define | STMT(CLASS, PARENT) |
| #define | ABSTRACT_STMT(S) |
| #define | ABSTRACT_DECL(DECL) |
| #define | DECL(DERIVED, BASE) |
◆ ABSTRACT_DECL
| #define ABSTRACT_DECL | ( | DECL | ) |
|---|
◆ ABSTRACT_STMT
| #define ABSTRACT_STMT | ( | S | ) |
|---|
◆ DECL
| #define DECL | ( | DERIVED, |
|---|---|---|
| BASE ) |
Value:
case Decl::Kind::DERIVED: \
return ::IsStructurallyEquivalent(*this, static_cast<DERIVED##Decl *>(D1), \
static_cast<DERIVED##Decl *>(D2));
Decl - This represents one declaration (or definition), e.g.
◆ STMT [1/2]
| #define STMT | ( | CLASS, |
|---|---|---|
| PARENT ) |
Value:
bool TraverseStmt(const CLASS *S1, const CLASS *S2) { \
if (!TraverseStmt(static_cast<const PARENT *>(S1), \
static_cast<const PARENT *>(S2))) \
return false; \
return IsStmtEquivalent(S1, S2); \
}
Definition at line 415 of file ASTStructuralEquivalence.cpp.
◆ STMT [2/2]
| #define STMT | ( | CLASS, |
|---|---|---|
| PARENT ) |
Value:
case Stmt::StmtClass::CLASS##Class: \
return TraverseStmt(static_cast<const CLASS *>(S1), \
static_cast<const CLASS *>(S2));
Definition at line 415 of file ASTStructuralEquivalence.cpp.
◆ CheckStructurallyEquivalentAttributes()
◆ IsArrayStructurallyEquivalent()
◆ IsEquivalentExceptionSpec()
◆ IsRecordContextStructurallyEquivalent()
◆ IsStructurallyEquivalent() [1/38]
◆ IsStructurallyEquivalent() [2/38]
◆ IsStructurallyEquivalent() [3/38]
◆ IsStructurallyEquivalent() [4/38]
◆ IsStructurallyEquivalent() [5/38]
◆ IsStructurallyEquivalent() [6/38]
◆ IsStructurallyEquivalent() [7/38]
◆ IsStructurallyEquivalent() [8/38]
Definition at line 118 of file ASTStructuralEquivalence.cpp.
References clang::DeclarationName::CXXConstructorName, clang::DeclarationName::CXXConversionFunctionName, clang::DeclarationName::CXXDeductionGuideName, clang::DeclarationName::CXXDestructorName, clang::DeclarationName::CXXLiteralOperatorName, clang::DeclarationName::CXXOperatorName, clang::DeclarationName::CXXUsingDirective, clang::DeclarationName::getAsIdentifierInfo(), clang::DeclarationName::getCXXDeductionGuideTemplate(), clang::DeclarationName::getCXXLiteralIdentifier(), clang::DeclarationName::getCXXNameType(), clang::DeclarationName::getCXXOverloadedOperator(), clang::NamedDecl::getDeclName(), clang::DeclarationName::getNameKind(), clang::DeclarationName::Identifier, IsStructurallyEquivalent(), clang::DeclarationName::ObjCMultiArgSelector, clang::DeclarationName::ObjCOneArgSelector, and clang::DeclarationName::ObjCZeroArgSelector.
◆ IsStructurallyEquivalent() [9/38]
◆ IsStructurallyEquivalent() [10/38]
◆ IsStructurallyEquivalent() [11/38]
Determine whether two template arguments are equivalent.
Definition at line 694 of file ASTStructuralEquivalence.cpp.
References clang::TemplateArgument::Declaration, clang::TemplateArgument::Expression, clang::TemplateArgument::getAsDecl(), clang::TemplateArgument::getAsExpr(), clang::TemplateArgument::getAsIntegral(), clang::TemplateArgument::getAsTemplate(), clang::TemplateArgument::getAsTemplateOrTemplatePattern(), clang::TemplateArgument::getAsType(), clang::TemplateArgument::getIntegralType(), clang::TemplateArgument::getKind(), clang::TemplateArgument::Integral, IsStructurallyEquivalent(), clang::TemplateArgument::Null, clang::TemplateArgument::NullPtr, clang::TemplateArgument::Pack, clang::TemplateArgument::pack_elements(), clang::TemplateArgument::structurallyEquals(), clang::TemplateArgument::StructuralValue, clang::TemplateArgument::Template, clang::TemplateArgument::TemplateExpansion, and clang::TemplateArgument::Type.
◆ IsStructurallyEquivalent() [12/38]
◆ IsStructurallyEquivalent() [13/38]
Definition at line 623 of file ASTStructuralEquivalence.cpp.
References clang::TemplateName::AssumedTemplate, clang::OverloadedTemplateStorage::begin(), clang::TemplateName::DeducedTemplate, clang::TemplateName::DependentTemplate, clang::OverloadedTemplateStorage::end(), clang::SubstTemplateTemplateParmPackStorage::getArgumentPack(), clang::TemplateName::getAsAssumedTemplateName(), clang::TemplateName::getAsDependentTemplateName(), clang::TemplateName::getAsOverloadedTemplate(), clang::SubstTemplateTemplateParmPackStorage::getAssociatedDecl(), clang::TemplateName::getAsSubstTemplateTemplateParmPack(), clang::TemplateName::getAsTemplateDecl(), clang::AssumedTemplateStorage::getDeclName(), clang::SubstTemplateTemplateParmPackStorage::getIndex(), clang::TemplateName::getKind(), IsStructurallyEquivalent(), clang::TemplateName::OverloadedTemplate, clang::TemplateName::QualifiedTemplate, clang::TemplateName::SubstTemplateTemplateParm, clang::TemplateName::SubstTemplateTemplateParmPack, clang::TemplateName::Template, and clang::TemplateName::UsingTemplate.
◆ IsStructurallyEquivalent() [14/38]
◆ IsStructurallyEquivalent() [15/38]
Determine structural equivalence of two methods.
Definition at line 1616 of file ASTStructuralEquivalence.cpp.
References clang::cast(), clang::Decl::getAccess(), clang::DeclContext::getDeclKind(), clang::NamedDecl::getIdentifier(), clang::FunctionDecl::getOverloadedOperator(), clang::CXXMethodDecl::getRefQualifier(), clang::ValueDecl::getType(), clang::CXXMethodDecl::isConst(), clang::FunctionDecl::isDefaulted(), clang::FunctionDecl::isDeleted(), clang::CXXMethodDecl::isImplicitObjectMemberFunction(), clang::FunctionDecl::isPureVirtual(), clang::CXXMethodDecl::isStatic(), IsStructurallyEquivalent(), clang::CXXMethodDecl::isVirtual(), and clang::CXXMethodDecl::isVolatile().
◆ IsStructurallyEquivalent() [16/38]
◆ IsStructurallyEquivalent() [17/38]
◆ IsStructurallyEquivalent() [18/38]
◆ IsStructurallyEquivalent() [19/38]
◆ IsStructurallyEquivalent() [20/38]
Definition at line 1517 of file ASTStructuralEquivalence.cpp.
References clang::cast(), clang::Type::castAs(), CheckStructurallyEquivalentAttributes(), Diag(), clang::StructuralEquivalenceContext::Diag1(), clang::StructuralEquivalenceContext::Diag2(), clang::FieldDecl::getBitWidth(), clang::FieldDecl::getBitWidthValue(), clang::Decl::getDeclContext(), clang::NamedDecl::getDeclName(), clang::NamedDecl::getIdentifier(), clang::Decl::getLocation(), clang::ValueDecl::getType(), clang::FieldDecl::isAnonymousStructOrUnion(), clang::FieldDecl::isBitField(), and IsStructurallyEquivalent().
◆ IsStructurallyEquivalent() [21/38]
◆ IsStructurallyEquivalent() [22/38]
◆ IsStructurallyEquivalent() [23/38]
◆ IsStructurallyEquivalent() [24/38]
◆ IsStructurallyEquivalent() [25/38]
◆ IsStructurallyEquivalent() [26/38]
◆ IsStructurallyEquivalent() [27/38]
◆ IsStructurallyEquivalent() [28/38]
◆ IsStructurallyEquivalent() [29/38]
◆ IsStructurallyEquivalent() [30/38]
Definition at line 2409 of file ASTStructuralEquivalence.cpp.
References clang::Selector::getIdentifierInfoForSlot(), clang::Selector::getNumArgs(), clang::ObjCMethodDecl::getReturnType(), clang::ObjCMethodDecl::getSelector(), clang::ObjCMethodDecl::isDirectMethod(), clang::ObjCMethodDecl::isInstanceMethod(), IsStructurallyEquivalent(), clang::ObjCMethodDecl::isVariadic(), clang::ObjCMethodDecl::param_size(), clang::ObjCMethodDecl::param_type_begin(), and clang::ObjCMethodDecl::param_type_end().
◆ IsStructurallyEquivalent() [31/38]
Determine structural equivalence of two types.
Definition at line 839 of file ASTStructuralEquivalence.cpp.
References clang::cast(), clang::QualType::getCanonicalType(), clang::DependentSizedMatrixType::getColumnExpr(), clang::QualType::getDesugaredType(), clang::MatrixType::getElementType(), getKind(), clang::ConstantMatrixType::getNumColumns(), clang::ConstantMatrixType::getNumRows(), getPointeeType(), clang::QualType::getQualifiers(), clang::DependentSizedMatrixType::getRowExpr(), clang::Type::getTypeClass(), getUnderlyingType(), IsArrayStructurallyEquivalent(), clang::Type::isBuiltinType(), IsEquivalentExceptionSpec(), clang::QualType::isNull(), and IsStructurallyEquivalent().
Referenced by IsArrayStructurallyEquivalent(), clang::StructuralEquivalenceContext::IsEquivalent(), clang::StructuralEquivalenceContext::IsEquivalent(), clang::StructuralEquivalenceContext::IsEquivalent(), IsEquivalentExceptionSpec(), IsRecordContextStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalentLambdas(), IsTemplateDeclCommonStructurallyEquivalent(), and NameIsStructurallyEquivalent().
◆ IsStructurallyEquivalent() [32/38]
Determine structural equivalence of two records.
Definition at line 1742 of file ASTStructuralEquivalence.cpp.
References CheckStructurallyEquivalentAttributes(), clang::RecordDecl::field_begin(), clang::RecordDecl::field_end(), clang::StructuralEquivalenceContext::findUntaggedStructOrUnionIndex(), clang::CXXBaseSpecifier::getBeginLoc(), clang::NamedDecl::getDeclName(), clang::RecordDecl::getDefinition(), clang::Decl::getLocation(), clang::CXXBaseSpecifier::getSourceRange(), clang::TagDecl::getTagKind(), clang::CXXBaseSpecifier::getType(), clang::DeclContext::hasExternalLexicalStorage(), clang::TagDecl::isBeingDefined(), IsRecordContextStructurallyEquivalent(), IsStructurallyEquivalent(), IsStructurallyEquivalentLambdas(), clang::TagDecl::isUnion(), clang::Minimal, and NameIsStructurallyEquivalent().