Warning, /include/clang/AST/StmtDataCollectors.inc is written in an unsupported language. File is not indexed.
0001 DEF_ADD_DATA(AddrLabelExpr, {
0002
0003 addData(S->getLabel()->getName());
0004 }
0005 )
0006 DEF_ADD_DATA(ArrayTypeTraitExpr, {
0007
0008 addData(S->getTrait());
0009 }
0010 )
0011 DEF_ADD_DATA(AsmStmt, {
0012
0013 addData(S->isSimple());
0014 addData(S->isVolatile());
0015 addData(S->generateAsmString(Context));
0016 for (unsigned i = 0; i < S->getNumInputs(); ++i) {
0017 addData(S->getInputConstraint(i));
0018 }
0019 for (unsigned i = 0; i < S->getNumOutputs(); ++i) {
0020 addData(S->getOutputConstraint(i));
0021 }
0022 for (unsigned i = 0; i < S->getNumClobbers(); ++i) {
0023 addData(S->getClobber(i));
0024 }
0025 }
0026 )
0027 DEF_ADD_DATA(AttributedStmt, {
0028
0029 for (const Attr *A : S->getAttrs()) {
0030 addData(std::string(A->getSpelling()));
0031 }
0032 }
0033 )
0034 DEF_ADD_DATA(BinaryOperator, {
0035
0036 addData(S->getOpcode());
0037 }
0038 )
0039 DEF_ADD_DATA(CXXBoolLiteralExpr, {
0040
0041 addData(S->getValue());
0042 }
0043 )
0044 DEF_ADD_DATA(CXXCatchStmt, {
0045
0046 addData(S->getCaughtType());
0047 }
0048 )
0049 DEF_ADD_DATA(CXXDeleteExpr, {
0050
0051 addData(S->isArrayFormAsWritten()); addData(S->isGlobalDelete());
0052 }
0053 )
0054 DEF_ADD_DATA(CXXFoldExpr, {
0055
0056 addData(S->isRightFold()); addData(S->getOperator());
0057 }
0058 )
0059 DEF_ADD_DATA(CallExpr, {
0060
0061 // Function pointers don't have a callee and we just skip hashing it.
0062 if (const FunctionDecl *D = S->getDirectCallee()) {
0063 // If the function is a template specialization, we also need to handle
0064 // the template arguments as they are not included in the qualified name.
0065 if (auto Args = D->getTemplateSpecializationArgs()) {
0066 std::string ArgString;
0067
0068 // Print all template arguments into ArgString
0069 llvm::raw_string_ostream OS(ArgString);
0070 for (unsigned i = 0; i < Args->size(); ++i) {
0071 Args->get(i).print(Context.getLangOpts(), OS, /*IncludeType*/ true);
0072 // Add a padding character so that 'foo<X, XX>()' != 'foo<XX, X>()'.
0073 OS << '\n';
0074 }
0075
0076 addData(ArgString);
0077 }
0078 addData(D->getQualifiedNameAsString());
0079 }
0080 }
0081 )
0082 DEF_ADD_DATA(CharacterLiteral, {
0083
0084 addData(S->getValue());
0085 }
0086 )
0087 DEF_ADD_DATA(DeclRefExpr, {
0088
0089 addData(S->getDecl()->getQualifiedNameAsString());
0090 }
0091 )
0092 DEF_ADD_DATA(DeclStmt, {
0093
0094 auto numDecls = std::distance(S->decl_begin(), S->decl_end());
0095 addData(static_cast<unsigned>(numDecls));
0096 for (const Decl *D : S->decls()) {
0097 if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
0098 addData(VD->getType());
0099 }
0100 }
0101 }
0102 )
0103 DEF_ADD_DATA(Expr, {
0104
0105 addData(S->getType());
0106 }
0107 )
0108 DEF_ADD_DATA(ExpressionTraitExpr, {
0109
0110 addData(S->getTrait());
0111 }
0112 )
0113 DEF_ADD_DATA(FloatingLiteral, {
0114
0115 addData(llvm::hash_value(S->getValue()));
0116 }
0117 )
0118 DEF_ADD_DATA(GenericSelectionExpr, {
0119
0120 for (const GenericSelectionExpr::ConstAssociation Assoc : S->associations()) {
0121 addData(Assoc.getType());
0122 }
0123 }
0124 )
0125 DEF_ADD_DATA(GotoStmt, {
0126
0127 addData(S->getLabel()->getName());
0128 }
0129 )
0130 DEF_ADD_DATA(IndirectGotoStmt, {
0131
0132 if (S->getConstantTarget())
0133 addData(S->getConstantTarget()->getName());
0134 }
0135 )
0136 DEF_ADD_DATA(IntegerLiteral, {
0137
0138 addData(llvm::hash_value(S->getValue()));
0139 }
0140 )
0141 DEF_ADD_DATA(LabelStmt, {
0142
0143 addData(S->getDecl()->getName());
0144 }
0145 )
0146 DEF_ADD_DATA(LambdaExpr, {
0147
0148 for (const LambdaCapture &C : S->captures()) {
0149 addData(C.isPackExpansion());
0150 addData(C.getCaptureKind());
0151 if (C.capturesVariable())
0152 addData(C.getCapturedVar()->getType());
0153 }
0154 addData(S->isGenericLambda());
0155 addData(S->isMutable());
0156 }
0157 )
0158 DEF_ADD_DATA(MSDependentExistsStmt, {
0159
0160 addData(S->isIfExists());
0161 }
0162 )
0163 DEF_ADD_DATA(MemberExpr, {
0164
0165 addData(S->getMemberDecl()->getName());
0166 }
0167 )
0168 DEF_ADD_DATA(ObjCAtCatchStmt, {
0169
0170 addData(S->hasEllipsis());
0171 }
0172 )
0173 DEF_ADD_DATA(ObjCBridgedCastExpr, {
0174
0175 addData(S->getBridgeKind());
0176 }
0177 )
0178 DEF_ADD_DATA(ObjCIndirectCopyRestoreExpr, {
0179
0180 addData(S->shouldCopy());
0181 }
0182 )
0183 DEF_ADD_DATA(ObjCPropertyRefExpr, {
0184
0185 addData(S->isSuperReceiver()); addData(S->isImplicitProperty());
0186 }
0187 )
0188 DEF_ADD_DATA(PredefinedExpr, {
0189
0190 addData(S->getIdentKind());
0191 }
0192 )
0193 DEF_ADD_DATA(Stmt, {
0194
0195 addData(S->getStmtClass());
0196 // This ensures that non-macro-generated code isn't identical to
0197 // macro-generated code.
0198 addData(data_collection::getMacroStack(S->getBeginLoc(), Context));
0199 addData(data_collection::getMacroStack(S->getEndLoc(), Context));
0200 }
0201 )
0202 DEF_ADD_DATA(StringLiteral, {
0203
0204 addData(S->getString());
0205 }
0206 )
0207 DEF_ADD_DATA(TypeTraitExpr, {
0208
0209 addData(S->getTrait());
0210 for (unsigned i = 0; i < S->getNumArgs(); ++i)
0211 addData(S->getArg(i)->getType());
0212 }
0213 )
0214 DEF_ADD_DATA(UnaryOperator, {
0215
0216 addData(S->getOpcode());
0217 }
0218 )
0219 #undef DEF_ADD_DATA