ormris added inline comments.
================ Comment at: lib/StaticAnalyzer/Core/LoopWidening.cpp:89 + new Callback(LCtx, MRMgr, ITraits)); + Finder.matchAST(ASTCtx); + ---------------- NoQ wrote: > ormris wrote: > > ormris wrote: > > > NoQ wrote: > > > > NoQ wrote: > > > > > george.karpenkov wrote: > > > > > > ormris wrote: > > > > > > > george.karpenkov wrote: > > > > > > > > IMO using the iterator directly (e.g. like it was done in > > > > > > > > https://github.com/llvm-mirror/clang/blob/master/lib/StaticAnalyzer/Checkers/GCDAntipatternChecker.cpp#L213) > > > > > > > > leads to a much cleaner code and saves you from having to > > > > > > > > define a callback class. > > > > > > > Hmm... I think that's a better approach. Let me see if I can get > > > > > > > that working. > > > > > > @ormris Yeah I'm really not sure why all examples use the callback > > > > > > API by default. > > > > > Also, please match only the local AST, i.e. the body of the function > > > > > under analysis, which can be obtained as > > > > > `LCtx->getDecl()->getBody()`. There's no need to scan the whole > > > > > translation unit. > > > > Actually not sure, would widening screw the previous stack frames as > > > > well? We should test that, i guess. And even then, it's better to match > > > > a few stack frames in the current stack trace than to match the whole > > > > translation unit. > > > I can't seem to get the new syntax to work. The following assert(0) is > > > never triggered. > > > > > > ``` > > > auto Matches = match(varDecl(hasType(referenceType())).bind(MatchRef), > > > *LCtx->getDecl()->getBody(), ASTCtx); > > > for (BoundNodes Match : Matches) { > > > assert(0 && "anything"); > > > const VarDecl *VD = Match.getNodeAs<VarDecl>(MatchRef); > > > const VarRegion *VarMem = MRMgr.getVarRegion(VD, LCtx); > > > ITraits.setTrait(VarMem, > > > > > > RegionAndSymbolInvalidationTraits::TK_PreserveContents); > > > } > > > > > > ``` > > It appears that "decl()" produces no matches... > Mmm, i think when you're matching using `match` rather than `matchAST`, you > need to write a match for the exact statement rather than any sub-statement. > I.e., those are like "match" vs. "find". I.e., try wraping your matcher into > `stmt(hasDescendant(...))`, where `stmt()` would match the whole function > body (most likely a `CompoundStmt` for the curly braces around the function > body, but there are some other cases). Looks like that worked. Thanks! Repository: rC Clang https://reviews.llvm.org/D47044 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits