void RemoveTrivialBaseTemplate::HandleTranslationUnit(ASTContext &Ctx) { if (TransformationManager::isCLangOpt() || TransformationManager::isOpenCLLangOpt()) { ValidInstanceNum = 0; } else { CollectionVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); } if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } TransAssert(TheDerivedClass && "TheDerivedClass is NULL!"); Ctx.getDiagnostics().setSuppressAllDiagnostics(false); removeBaseSpecifier(); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void EmptyStructToInt::HandleTranslationUnit(ASTContext &Ctx) { CollectionVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); doAnalysis(); if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } Ctx.getDiagnostics().setSuppressAllDiagnostics(false); removeRecordDecls(); RewriteVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); // sanity check that we actually // have done some text modifications. // It could be false due to invalid code being transformed. if (!Rewritten) { TransError = TransNoTextModificationError; return; } if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void TemplateNonTypeArgToInt::HandleTranslationUnit(ASTContext &Ctx) { if (TransformationManager::isCLangOpt() || TransformationManager::isOpenCLLangOpt()) { ValidInstanceNum = 0; } else { ArgCollector->TraverseDecl(Ctx.getTranslationUnitDecl()); CollectionVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); } if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } Ctx.getDiagnostics().setSuppressAllDiagnostics(false); if (TheExpr) { RewriteHelper->replaceExpr(TheExpr, IntString); } else if (TheValueDecl) { RewriteHelper->replaceValueDecl(TheValueDecl, "int " + TheValueDecl->getNameAsString()); } else { TransAssert(0 && "No valid targets!"); } if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void ReducePointerLevel::HandleTranslationUnit(ASTContext &Ctx) { CollectionVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); doAnalysis(); if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } TransAssert(CollectionVisitor && "NULL CollectionVisitor!"); TransAssert(RewriteVisitor && "NULL CollectionVisitor!"); Ctx.getDiagnostics().setSuppressAllDiagnostics(false); TransAssert(TheDecl && "NULL TheDecl!"); setRecordDecl(); RewriteVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void BinOpSimplification::HandleTranslationUnit(ASTContext &Ctx) { if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } Ctx.getDiagnostics().setSuppressAllDiagnostics(false); TransAssert(TheFuncDecl && "NULL TheFuncDecl!"); TransAssert(TheStmt && "NULL TheStmt!"); TransAssert(TheBinOp && "NULL TheBinOp"); NameQueryWrap->TraverseDecl(Ctx.getTranslationUnitDecl()); addNewTmpVariable(); addNewAssignStmt(); replaceBinOp(); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void LocalToGlobal::HandleTranslationUnit(ASTContext &Ctx) { if (TransformationManager::isOpenCLLangOpt()) { ValidInstanceNum = 0; } else { FunctionVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); } if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } TransAssert(TransformationASTVisitor && "NULL TransformationASTVisitor!"); Ctx.getDiagnostics().setSuppressAllDiagnostics(false); TransAssert(TheFuncDecl && "NULL TheFuncDecl!"); TransAssert(TheVarDecl && "NULL TheVarDecl!"); TransformationASTVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void TemplateArgToInt::HandleTranslationUnit(ASTContext &Ctx) { const LangOptions &LO = Ctx.getLangOpts(); if (LO.C99 || LO.OpenCL) { ValidInstanceNum = 0; } else { CollectionVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); GlobalParamFilter->TraverseDecl(Ctx.getTranslationUnitDecl()); ArgCollector->TraverseDecl(Ctx.getTranslationUnitDecl()); } if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } Ctx.getDiagnostics().setSuppressAllDiagnostics(false); rewriteTemplateArgument(); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void ObjCMigrateASTConsumer::HandleTranslationUnit(ASTContext &Ctx) { Rewriter rewriter(Ctx.getSourceManager(), Ctx.getLangOpts()); RewritesReceiver Rec(rewriter); Editor->applyRewrites(Rec); for (Rewriter::buffer_iterator I = rewriter.buffer_begin(), E = rewriter.buffer_end(); I != E; ++I) { FileID FID = I->first; RewriteBuffer &buf = I->second; const FileEntry *file = Ctx.getSourceManager().getFileEntryForID(FID); assert(file); llvm::SmallString<512> newText; llvm::raw_svector_ostream vecOS(newText); buf.write(vecOS); vecOS.flush(); llvm::MemoryBuffer *memBuf = llvm::MemoryBuffer::getMemBufferCopy( StringRef(newText.data(), newText.size()), file->getName()); llvm::SmallString<64> filePath(file->getName()); FileMgr.FixupRelativePath(filePath); Remapper.remap(filePath.str(), memBuf); } if (IsOutputFile) { Remapper.flushToFile(MigrateDir, Ctx.getDiagnostics()); } else { Remapper.flushToDisk(MigrateDir, Ctx.getDiagnostics()); } }
void LiftAssignmentExpr::HandleTranslationUnit(ASTContext &Ctx) { if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } Ctx.getDiagnostics().setSuppressAllDiagnostics(false); TransAssert(TheFuncDecl && "NULL TheFuncDecl!"); TransAssert(TheStmt && "NULL TheStmt!"); TransAssert(TheAssignExpr && "NULL TheAssignExpr"); TransAssert(TheAssignExpr->isAssignmentOp() || TheAssignExpr->isCompoundAssignmentOp()); addNewAssignStmt(); replaceAssignExpr(); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void RemoveCtorInitializer::HandleTranslationUnit(ASTContext &Ctx) { if (TransformationManager::isCLangOpt() || TransformationManager::isOpenCLLangOpt()) { ValidInstanceNum = 0; } else { CollectionVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); } if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } TransAssert(TheCtorDecl && "TheCtorDecl is NULL!"); TransAssert(TheInitializer && "TheInitializer is NULL!"); Ctx.getDiagnostics().setSuppressAllDiagnostics(false); RewriteHelper->removeCXXCtorInitializer(TheInitializer, TheIndex, getNumCtorWrittenInitializers(*TheCtorDecl)); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void RemoveUnusedFunction::HandleTranslationUnit(ASTContext &Ctx) { VisitorWrapper->TraverseDecl(Ctx.getTranslationUnitDecl()); // visit using decls declared outsided function-scope UsingDeclVisitor Visitor(NULL, this); Visitor.TraverseDecl(Ctx.getTranslationUnitDecl()); SpecializationVisitor SpecVisitor(this); SpecVisitor.TraverseDecl(Ctx.getTranslationUnitDecl()); AnalysisVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } if (ToCounter > ValidInstanceNum) { TransError = TransToCounterTooBigError; return; } Ctx.getDiagnostics().setSuppressAllDiagnostics(false); doRewriting(); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void RemoveDecl::HandleTranslationUnit(ASTContext &Ctx) { auto CollectionVisitor = RemoveDeclVisitor(this); CollectionVisitor.TraverseDecl(Ctx.getTranslationUnitDecl()); if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } Ctx.getDiagnostics().setSuppressAllDiagnostics(false); TransAssert(Decls.size() && "NULL TheDecl!"); Decl* D = nullptr; if (ToCounter < TransformationCounter) { D = Decls[TransformationCounter-1]; RewriteHelper->removeDecl(D); //std::string s; //auto R = D->getSourceRange(); //RewriteHelper->getStringBetweenLocs(s, R.getBegin(), R.getEnd()); } else { for (int i = ToCounter; i >= TransformationCounter; --i) { D = Decls[i]; RewriteHelper->removeDecl(D); } } if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void ReplaceSimpleTypedef::HandleTranslationUnit(ASTContext &Ctx) { CollectionVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } Ctx.getDiagnostics().setSuppressAllDiagnostics(false); TransAssert(TheTypedefDecl && "NULL TheTypedefDecl!"); RewriteVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); removeTypedefs(); if (!Rewritten) { TransError = TransNoTextModificationError; return; } if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void RemoveUnusedOuterClass::HandleTranslationUnit(ASTContext &Ctx) { const LangOptions &LO = Ctx.getLangOpts(); if (LO.C99 || LO.OpenCL) { ValidInstanceNum = 0; } else { CollectionVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); analyzeCXXRDSet(); } if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } Ctx.getDiagnostics().setSuppressAllDiagnostics(false); removeOuterClass(); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void SimpleInliner::HandleTranslationUnit(ASTContext &Ctx) { doAnalysis(); if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } TransAssert(CurrentFD && "NULL CurrentFD!"); TransAssert(TheCallExpr && "NULL TheCallExpr!"); Ctx.getDiagnostics().setSuppressAllDiagnostics(false); NameQueryWrap->TraverseDecl(Ctx.getTranslationUnitDecl()); NamePostfix = NameQueryWrap->getMaxNamePostfix() + 1; FunctionVisitor->TraverseDecl(CurrentFD); StmtVisitor->TraverseDecl(TheCaller); TransAssert(TheStmt && "NULL TheStmt!"); replaceCallExpr(); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void ReplaceClassWithBaseTemplateSpec::HandleTranslationUnit(ASTContext &Ctx) { const LangOptions &LO = Ctx.getLangOpts(); if (LO.C99 || LO.OpenCL) { ValidInstanceNum = 0; } else { CollectionVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); } if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } TransAssert(TheCXXRecord && "TheCXXRecord is NULL!"); Ctx.getDiagnostics().setSuppressAllDiagnostics(false); TransAssert(RewriteVisitor && "NULL RewriteVisitor!"); RewriteVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); removeBaseSpecifier(); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void RemoveBaseClass::HandleTranslationUnit(ASTContext &Ctx) { if (TransformationManager::isCLangOpt() || TransformationManager::isOpenCLLangOpt()) { ValidInstanceNum = 0; } else { CollectionVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); } if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } TransAssert(TheBaseClass && "TheBaseClass is NULL!"); TransAssert(TheDerivedClass && "TheDerivedClass is NULL!"); Ctx.getDiagnostics().setSuppressAllDiagnostics(false); RewriteVisitor = new RemoveBaseClassRewriteVisitor(&TheRewriter, RewriteHelper, TheBaseClass->getCanonicalDecl(), TheDerivedClass->getNameAsString()); TransAssert(RewriteVisitor && "NULL RewriteVisitor!"); RewriteVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); doRewrite(); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void ReplaceDependentName::HandleTranslationUnit(ASTContext &Ctx) { if (TransformationManager::isCLangOpt() || TransformationManager::isOpenCLLangOpt()) { ValidInstanceNum = 0; } else { CollectionVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); } if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } Ctx.getDiagnostics().setSuppressAllDiagnostics(false); rewriteDependentName(); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void InstantiateTemplateParam::HandleTranslationUnit(ASTContext &Ctx) { if (TransformationManager::isCLangOpt() || TransformationManager::isOpenCLLangOpt()) { ValidInstanceNum = 0; } else { CollectionVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); } if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } Ctx.getDiagnostics().setSuppressAllDiagnostics(false); TransAssert(TheParameter && "NULL TheParameter!"); TransAssert((TheInstantiationString != "") && "Invalid InstantiationString!"); TransAssert(ParamRewriteVisitor && "NULL ParamRewriteVisitor!"); ParamRewriteVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); removeTemplateKeyword(); addForwardDecl(); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void ReduceClassTemplateParameter::HandleTranslationUnit(ASTContext &Ctx) { if (TransformationManager::isCLangOpt() || TransformationManager::isOpenCLLangOpt()) { ValidInstanceNum = 0; } else { CollectionVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); } if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } TransAssert(TheClassTemplateDecl && "NULL TheClassTemplateDecl!"); TransAssert(ArgRewriteVisitor && "NULL ArgRewriteVisitor!"); Ctx.getDiagnostics().setSuppressAllDiagnostics(false); removeParameterFromDecl(); removeParameterFromMethods(); removeParameterFromPartialSpecs(); ArgRewriteVisitor->TraverseDecl(Ctx.getTranslationUnitDecl()); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void MoveFunctionBody::HandleTranslationUnit(ASTContext &Ctx) { doAnalysis(); if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } Ctx.getDiagnostics().setSuppressAllDiagnostics(false); TransAssert(TheFunctionDecl && "NULL TheFunctionDecl!"); TransAssert(!TheFunctionDecl->isThisDeclarationADefinition() && "Invalid Function Declaration!"); TransAssert(TheFunctionDef && "NULL TheFunctionDef!"); TransAssert(TheFunctionDef->isThisDeclarationADefinition() && "Invalid Function Definition!"); doRewriting(); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
void ObjCMigrateASTConsumer::HandleTranslationUnit(ASTContext &Ctx) { TranslationUnitDecl *TU = Ctx.getTranslationUnitDecl(); if (MigrateProperty) for (DeclContext::decl_iterator D = TU->decls_begin(), DEnd = TU->decls_end(); D != DEnd; ++D) { if (ObjCInterfaceDecl *CDecl = dyn_cast<ObjCInterfaceDecl>(*D)) migrateObjCInterfaceDecl(Ctx, CDecl); else if (ObjCProtocolDecl *PDecl = dyn_cast<ObjCProtocolDecl>(*D)) ObjCProtocolDecls.insert(PDecl); else if (const ObjCImplementationDecl *ImpDecl = dyn_cast<ObjCImplementationDecl>(*D)) migrateProtocolConformance(Ctx, ImpDecl); else if (const EnumDecl *ED = dyn_cast<EnumDecl>(*D)) { DeclContext::decl_iterator N = D; ++N; if (N != DEnd) if (const TypedefDecl *TD = dyn_cast<TypedefDecl>(*N)) migrateNSEnumDecl(Ctx, ED, TD); } // migrate methods which can have instancetype as their result type. if (ObjCContainerDecl *CDecl = dyn_cast<ObjCContainerDecl>(*D)) migrateInstanceType(Ctx, CDecl); } Rewriter rewriter(Ctx.getSourceManager(), Ctx.getLangOpts()); RewritesReceiver Rec(rewriter); Editor->applyRewrites(Rec); for (Rewriter::buffer_iterator I = rewriter.buffer_begin(), E = rewriter.buffer_end(); I != E; ++I) { FileID FID = I->first; RewriteBuffer &buf = I->second; const FileEntry *file = Ctx.getSourceManager().getFileEntryForID(FID); assert(file); SmallString<512> newText; llvm::raw_svector_ostream vecOS(newText); buf.write(vecOS); vecOS.flush(); llvm::MemoryBuffer *memBuf = llvm::MemoryBuffer::getMemBufferCopy( StringRef(newText.data(), newText.size()), file->getName()); SmallString<64> filePath(file->getName()); FileMgr.FixupRelativePath(filePath); Remapper.remap(filePath.str(), memBuf); } if (IsOutputFile) { Remapper.flushToFile(MigrateDir, Ctx.getDiagnostics()); } else { Remapper.flushToDisk(MigrateDir, Ctx.getDiagnostics()); } }
void SimpleInliner::HandleTranslationUnit(ASTContext &Ctx) { #ifdef DEBUGCL std::cerr << "SimpleInliner::HandleTranslationUnit" << std::endl; #endif doAnalysis(); if (QueryInstanceOnly) { #ifdef DEBUGCL std::cerr << "QueryInstanceOnly" << std::endl; #endif return; } if (TransformationCounter > ValidInstanceNum) { #ifdef DEBUGCL std::cerr << "TransformationCounter > ValidInstanceNum" << std::endl; #endif TransError = TransMaxInstanceError; return; } #ifdef DEBUGCL if (!CurrentFD) std::cerr << "NULL CurrentFD" << std::endl; if (!TheCallExpr) std::cerr << "NULL TheCallExpr" << std::endl; #endif TransAssert(CurrentFD && "NULL CurrentFD!"); TransAssert(TheCallExpr && "NULL TheCallExpr!"); Ctx.getDiagnostics().setSuppressAllDiagnostics(false); NameQueryWrap->TraverseDecl(Ctx.getTranslationUnitDecl()); NamePostfix = NameQueryWrap->getMaxNamePostfix() + 1; FunctionVisitor->TraverseDecl(CurrentFD); StmtVisitor->TraverseDecl(TheCaller); TransAssert(TheStmt && "NULL TheStmt!"); replaceCallExpr(); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; #ifdef DEBUGCL std::cerr << "Leaving HandleTranslationUnit" << std::endl; #endif }
void SizeofPrinter::run(const MatchFinder::MatchResult &Result) { const UnaryExprOrTypeTraitExpr * szOf = Result.Nodes.getStmtAs<UnaryExprOrTypeTraitExpr>("sizeof"); ASTContext * context = Result.Context; if (!szOf->isArgumentType()) { const Expr * argEx = szOf->getArgumentExpr(); if ( !isa<DeclRefExpr>(argEx) && isa<ParenExpr>(argEx)) { const ParenExpr * pEx = dyn_cast<ParenExpr>(argEx); if (const UnaryOperator * unOp = dyn_cast<UnaryOperator>(pEx->getSubExpr())) { if (unOp->getOpcode() == UO_AddrOf || unOp->getOpcode() == UO_Deref) { //sizeof(*ptr) or sizeof(&var) return; } } else if (isa<MemberExpr>(pEx->getSubExpr())) return; else if (isa<ParenExpr>(pEx->getSubExpr())) pEx = dyn_cast<ParenExpr>(pEx->getSubExpr()); if (!isa<DeclRefExpr>(pEx->getSubExpr()) && !isa<ArraySubscriptExpr>(pEx->getSubExpr())) { DiagnosticsEngine &dEngine = context->getDiagnostics(); unsigned diagID = dEngine.getCustomDiagID(DiagnosticsEngine::Warning, "Maybe here mistake in sizeof?"); dEngine.Report(szOf->getLocStart(), diagID); } } } }
void ReportError(ASTContext& Ctx, StringRef Message, T *Subject) { DiagnosticsEngine& Diag = Ctx.getDiagnostics(); int DiagID = Diag.getCustomDiagID(DiagnosticsEngine::Error, ("TESLA: " + Message).str()); Diag.Report(Subject->getLocStart(), DiagID) << Subject->getSourceRange(); }
void EqualConditionPrinter::run(const MatchFinder::MatchResult &Result) { const IfStmt * ifSt = Result.Nodes.getNodeAs<IfStmt>("if"); ASTContext * context = Result.Context; // compare first "if" with next else ifs const Stmt * elseStmt = ifSt->getElse(); while (elseStmt) { const IfStmt * elseIf = llvm::dyn_cast<IfStmt>(elseStmt); if (!elseIf) { // if has no more else if break; } if (Utility::areSameStmt(context, ifSt->getCond(), elseIf->getCond())) { clang::DiagnosticsEngine &dEngine = context->getDiagnostics(); unsigned diagID = dEngine.getCustomDiagID(clang::DiagnosticsEngine::Warning, "Equal `if` and `else if` condition"); dEngine.Report(ifSt->getIfLoc(), diagID); } // go to next else elseStmt = elseIf->getElse(); } }
DiagnosticBuilder Report(StringRef Message, SourceLocation Loc, ASTContext& Ctx, DiagnosticsEngine::Level Level) { DiagnosticsEngine& Diag = Ctx.getDiagnostics(); int DiagID = Diag.getCustomDiagID(Level, Message); return Diag.Report(Loc, DiagID); }
void RemoveAddrTaken::HandleTranslationUnit(ASTContext &Ctx) { if (QueryInstanceOnly) return; if (TransformationCounter > ValidInstanceNum) { TransError = TransMaxInstanceError; return; } TransAssert(TheUO && "NULL UnaryOperator!"); rewriteAddrTakenOp(TheUO); if (Ctx.getDiagnostics().hasErrorOccurred() || Ctx.getDiagnostics().hasFatalErrorOccurred()) TransError = TransInternalError; }
CodeGenABITypes::CodeGenABITypes(ASTContext &C, llvm::Module &M, const llvm::DataLayout &TD, CoverageSourceInfo *CoverageInfo) : CGO(new CodeGenOptions), CGM(new CodeGen::CodeGenModule(C, *CGO, M, TD, C.getDiagnostics(), CoverageInfo)) { }
void PtrCmpPrinter::run(const MatchFinder::MatchResult &Result) { const IfStmt * s = Result.Nodes.getStmtAs<IfStmt>("if"); ASTContext * context = Result.Context; DiagnosticsEngine &dEngine = context->getDiagnostics(); unsigned diagID = dEngine.getCustomDiagID(DiagnosticsEngine::Warning, "Strange pointer and zero comparison, maybe you mean *ptr < 0?"); dEngine.Report(s->getCond()->getExprLoc(), diagID); }