Szelethus requested changes to this revision. Szelethus added a comment. This revision now requires changes to proceed.
Uhh, it's such a chore to work on these things -- You can really feel that the preprocessor must've been the first thing implemented in clang. Unfortunately, you really have to counterweight it's shortcomings with excessive amount of comments. I can see an infinite loop and a lot of string comparisons, but someone without having this particular test case as a context, it's very hard to follow what's happening. Could you please add some code examples in the comments too? ================ Comment at: clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp:1997-1999 LocStart = BRC.getSourceManager().getImmediateMacroCallerLoc(LocStart); + if (!LocStart.isMacroID()) + break; ---------------- > Gets the location of the immediate macro caller, one level up the stack > toward the initial macro typed into the source. Hmm, is there a guarantee that at the end of the stack is not a macro location? ================ Comment at: clang/test/Analysis/diagnostics/macros.cpp:53 +void testNestedNullSplitMacro(int i, int *p) { + nested_null_split(i); // expected-note {{Assuming 'i' is equal to UINT32_MAX}} + // expected-note@-1 {{Taking false branch}} ---------------- Ah, that looks pretty :D Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D59121/new/ https://reviews.llvm.org/D59121 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits