[clang] 170c67d - [analyzer] Use the MacroExpansionContext for macro expansions in plists

Balazs Benics via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 22 02:07:13 PST 2021


Author: Balazs Benics
Date: 2021-02-22T11:12:18+01:00
New Revision: 170c67d5b8cc58dd8a4bd0ea7c5ca02290fac39c

URL: https://github.com/llvm/llvm-project/commit/170c67d5b8cc58dd8a4bd0ea7c5ca02290fac39c
DIFF: https://github.com/llvm/llvm-project/commit/170c67d5b8cc58dd8a4bd0ea7c5ca02290fac39c.diff

LOG: [analyzer] Use the MacroExpansionContext for macro expansions in plists

Removes the obsolete ad-hoc macro expansions during bugreport constructions.
It will skip the macro expansion if the expansion happened in an imported TU.

Also removes the expected plist file, while expanding matching context for
the tests.
Adds a previously crashing `plist-macros-with-expansion.c` testfile.
Temporarily marks `plist-macros-with-expansion-ctu.c ` to `XFAIL`.

Reviewed By: xazax.hun, Szelethus

Differential Revision: https://reviews.llvm.org/D93224

Added: 
    clang/test/Analysis/plist-macros-with-expansion.c

Modified: 
    clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
    clang/test/Analysis/plist-macros-with-expansion-ctu.c
    clang/test/Analysis/plist-macros-with-expansion.cpp

Removed: 
    clang/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist


################################################################################
diff  --git a/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp b/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
index 3dde5069c7d7..a90bed096486 100644
--- a/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
+++ b/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
@@ -157,17 +157,6 @@ class PlistPrinter {
 
 } // end of anonymous namespace
 
-namespace {
-
-struct ExpansionInfo {
-  std::string MacroName;
-  std::string Expansion;
-  ExpansionInfo(std::string N, std::string E)
-    : MacroName(std::move(N)), Expansion(std::move(E)) {}
-};
-
-} // end of anonymous namespace
-
 /// Print coverage information to output stream {@code o}.
 /// May modify the used list of files {@code Fids} by inserting new ones.
 static void printCoverage(const PathDiagnostic *D,
@@ -176,9 +165,9 @@ static void printCoverage(const PathDiagnostic *D,
                           FIDMap &FM,
                           llvm::raw_fd_ostream &o);
 
-static ExpansionInfo
-getExpandedMacro(SourceLocation MacroLoc, const Preprocessor &PP,
-                 const cross_tu::CrossTranslationUnitContext &CTU);
+static Optional<StringRef> getExpandedMacro(
+    SourceLocation MacroLoc, const cross_tu::CrossTranslationUnitContext &CTU,
+    const MacroExpansionContext &MacroExpansions, const SourceManager &SM);
 
 //===----------------------------------------------------------------------===//
 // Methods of PlistPrinter.
@@ -391,7 +380,17 @@ void PlistPrinter::ReportMacroExpansions(raw_ostream &o, unsigned indent) {
 
   for (const PathDiagnosticMacroPiece *P : MacroPieces) {
     const SourceManager &SM = PP.getSourceManager();
-    ExpansionInfo EI = getExpandedMacro(P->getLocation().asLocation(), PP, CTU);
+
+    SourceLocation MacroExpansionLoc =
+        P->getLocation().asLocation().getExpansionLoc();
+
+    const Optional<StringRef> MacroName =
+        MacroExpansions.getOriginalText(MacroExpansionLoc);
+    const Optional<StringRef> ExpansionText =
+        getExpandedMacro(MacroExpansionLoc, CTU, MacroExpansions, SM);
+
+    if (!MacroName.hasValue() || !ExpansionText.hasValue())
+      continue;
 
     Indent(o, indent) << "<dict>\n";
     ++indent;
@@ -408,11 +407,11 @@ void PlistPrinter::ReportMacroExpansions(raw_ostream &o, unsigned indent) {
 
     // Output the macro name.
     Indent(o, indent) << "<key>name</key>";
-    EmitString(o, EI.MacroName) << '\n';
+    EmitString(o, MacroName.getValue()) << '\n';
 
     // Output what it expands into.
     Indent(o, indent) << "<key>expansion</key>";
-    EmitString(o, EI.Expansion) << '\n';
+    EmitString(o, ExpansionText.getValue()) << '\n';
 
     // Finish up.
     --indent;
@@ -822,571 +821,18 @@ void PlistDiagnostics::FlushDiagnosticsImpl(
   o << "</dict>\n</plist>\n";
 }
 
-//===----------------------------------------------------------------------===//
-// Declarations of helper functions and data structures for expanding macros.
-//===----------------------------------------------------------------------===//
-
-namespace {
-
-using ArgTokensTy = llvm::SmallVector<Token, 2>;
-
-} // end of anonymous namespace
-
-LLVM_DUMP_METHOD static void dumpArgTokensToStream(llvm::raw_ostream &Out,
-                                                   const Preprocessor &PP,
-                                                   const ArgTokensTy &Toks);
-
-namespace {
-/// Maps unexpanded macro parameters to expanded arguments. A macro argument may
-/// need to expanded further when it is nested inside another macro.
-class MacroParamMap : public std::map<const IdentifierInfo *, ArgTokensTy> {
-public:
-  void expandFromPrevMacro(const MacroParamMap &Super);
-
-  LLVM_DUMP_METHOD void dump(const Preprocessor &PP) const {
-    dumpToStream(llvm::errs(), PP);
-  }
-
-  LLVM_DUMP_METHOD void dumpToStream(llvm::raw_ostream &Out,
-                                     const Preprocessor &PP) const;
-};
-
-struct MacroExpansionInfo {
-  std::string Name;
-  const MacroInfo *MI = nullptr;
-  MacroParamMap ParamMap;
-
-  MacroExpansionInfo(std::string N, const MacroInfo *MI, MacroParamMap M)
-      : Name(std::move(N)), MI(MI), ParamMap(std::move(M)) {}
-};
-
-class TokenPrinter {
-  llvm::raw_ostream &OS;
-  const Preprocessor &PP;
-
-  Token PrevTok, PrevPrevTok;
-  TokenConcatenation ConcatInfo;
-
-public:
-  TokenPrinter(llvm::raw_ostream &OS, const Preprocessor &PP)
-    : OS(OS), PP(PP), ConcatInfo(PP) {
-    PrevTok.setKind(tok::unknown);
-    PrevPrevTok.setKind(tok::unknown);
-  }
-
-  void printToken(const Token &Tok);
-};
-
-/// Wrapper around a Lexer object that can lex tokens one-by-one. Its possible
-/// to "inject" a range of tokens into the stream, in which case the next token
-/// is retrieved from the next element of the range, until the end of the range
-/// is reached.
-class TokenStream {
-public:
-  TokenStream(SourceLocation ExpanLoc, const SourceManager &SM,
-              const LangOptions &LangOpts)
-      : ExpanLoc(ExpanLoc) {
-    FileID File;
-    unsigned Offset;
-    std::tie(File, Offset) = SM.getDecomposedLoc(ExpanLoc);
-    llvm::MemoryBufferRef MB = SM.getBufferOrFake(File);
-    const char *MacroNameTokenPos = MB.getBufferStart() + Offset;
-
-    RawLexer = std::make_unique<Lexer>(SM.getLocForStartOfFile(File), LangOpts,
-                                       MB.getBufferStart(), MacroNameTokenPos,
-                                       MB.getBufferEnd());
-  }
-
-  void next(Token &Result) {
-    if (CurrTokenIt == TokenRange.end()) {
-      RawLexer->LexFromRawLexer(Result);
-      return;
-    }
-    Result = *CurrTokenIt;
-    CurrTokenIt++;
-  }
-
-  void injectRange(const ArgTokensTy &Range) {
-    TokenRange = Range;
-    CurrTokenIt = TokenRange.begin();
-  }
-
-  std::unique_ptr<Lexer> RawLexer;
-  ArgTokensTy TokenRange;
-  ArgTokensTy::iterator CurrTokenIt = TokenRange.begin();
-  SourceLocation ExpanLoc;
-};
-
-} // end of anonymous namespace
-
-/// The implementation method of getMacroExpansion: It prints the expansion of
-/// a macro to \p Printer, and returns with the name of the macro.
-///
-/// Since macros can be nested in one another, this function may call itself
-/// recursively.
-///
-/// Unfortunately, macro arguments have to expanded manually. To understand why,
-/// observe the following example:
-///
-///   #define PRINT(x) print(x)
-///   #define DO_SOMETHING(str) PRINT(str)
-///
-///   DO_SOMETHING("Cute panda cubs.");
-///
-/// As we expand the last line, we'll immediately replace PRINT(str) with
-/// print(x). The information that both 'str' and 'x' refers to the same string
-/// is an information we have to forward, hence the argument \p PrevParamMap.
-///
-/// To avoid infinite recursion we maintain the already processed tokens in
-/// a set. This is carried as a parameter through the recursive calls. The set
-/// is extended with the currently processed token and after processing it, the
-/// token is removed. If the token is already in the set, then recursion stops:
-///
-/// #define f(y) x
-/// #define x f(x)
-static std::string getMacroNameAndPrintExpansion(
-    TokenPrinter &Printer, SourceLocation MacroLoc, const Preprocessor &PP,
-    const MacroParamMap &PrevParamMap,
-    llvm::SmallPtrSet<IdentifierInfo *, 8> &AlreadyProcessedTokens);
-
-/// Retrieves the name of the macro and what it's parameters expand into
-/// at \p ExpanLoc.
-///
-/// For example, for the following macro expansion:
-///
-///   #define SET_TO_NULL(x) x = 0
-///   #define NOT_SUSPICIOUS(a) \
-///     {                       \
-///       int b = 0;            \
-///     }                       \
-///     SET_TO_NULL(a)
-///
-///   int *ptr = new int(4);
-///   NOT_SUSPICIOUS(&ptr);
-///   *ptr = 5;
-///
-/// When \p ExpanLoc references the last line, the macro name "NOT_SUSPICIOUS"
-/// and the MacroArgMap map { (a, &ptr) } will be returned.
-///
-/// When \p ExpanLoc references "SET_TO_NULL(a)" within the definition of
-/// "NOT_SUSPICOUS", the macro name "SET_TO_NULL" and the MacroArgMap map
-/// { (x, a) } will be returned.
-static MacroExpansionInfo
-getMacroExpansionInfo(const MacroParamMap &PrevParamMap,
-                      SourceLocation ExpanLoc, const Preprocessor &PP);
-
-/// Retrieves the ')' token that matches '(' \p It points to.
-static MacroInfo::tokens_iterator getMatchingRParen(
-    MacroInfo::tokens_iterator It,
-    MacroInfo::tokens_iterator End);
-
-/// Retrieves the macro info for \p II refers to at \p Loc. This is important
-/// because macros can be redefined or undefined.
-static const MacroInfo *getMacroInfoForLocation(const Preprocessor &PP,
-                                                const SourceManager &SM,
-                                                const IdentifierInfo *II,
-                                                SourceLocation Loc);
-
 //===----------------------------------------------------------------------===//
 // Definitions of helper functions and methods for expanding macros.
 //===----------------------------------------------------------------------===//
 
-static ExpansionInfo
-getExpandedMacro(SourceLocation MacroLoc, const Preprocessor &PP,
-                 const cross_tu::CrossTranslationUnitContext &CTU) {
-
-  const Preprocessor *PPToUse = &PP;
-  if (auto LocAndUnit = CTU.getImportedFromSourceLocation(MacroLoc)) {
-    MacroLoc = LocAndUnit->first;
-    PPToUse = &LocAndUnit->second->getPreprocessor();
+static Optional<StringRef>
+getExpandedMacro(SourceLocation MacroExpansionLoc,
+                 const cross_tu::CrossTranslationUnitContext &CTU,
+                 const MacroExpansionContext &MacroExpansions,
+                 const SourceManager &SM) {
+  if (auto LocAndUnit = CTU.getImportedFromSourceLocation(MacroExpansionLoc)) {
+    // TODO: Implement macro expansions for CTU.
+    return llvm::None;
   }
-
-  llvm::SmallString<200> ExpansionBuf;
-  llvm::raw_svector_ostream OS(ExpansionBuf);
-  TokenPrinter Printer(OS, *PPToUse);
-  llvm::SmallPtrSet<IdentifierInfo*, 8> AlreadyProcessedTokens;
-
-  std::string MacroName = getMacroNameAndPrintExpansion(
-      Printer, MacroLoc, *PPToUse, MacroParamMap{}, AlreadyProcessedTokens);
-  return {MacroName, std::string(OS.str())};
-}
-
-static std::string getMacroNameAndPrintExpansion(
-    TokenPrinter &Printer, SourceLocation MacroLoc, const Preprocessor &PP,
-    const MacroParamMap &PrevParamMap,
-    llvm::SmallPtrSet<IdentifierInfo *, 8> &AlreadyProcessedTokens) {
-
-  const SourceManager &SM = PP.getSourceManager();
-
-  MacroExpansionInfo MExpInfo =
-      getMacroExpansionInfo(PrevParamMap, SM.getExpansionLoc(MacroLoc), PP);
-  IdentifierInfo *MacroNameII = PP.getIdentifierInfo(MExpInfo.Name);
-
-  // TODO: If the macro definition contains another symbol then this function is
-  // called recursively. In case this symbol is the one being defined, it will
-  // be an infinite recursion which is stopped by this "if" statement. However,
-  // in this case we don't get the full expansion text in the Plist file. See
-  // the test file where "value" is expanded to "garbage_" instead of
-  // "garbage_value".
-  if (!AlreadyProcessedTokens.insert(MacroNameII).second)
-    return MExpInfo.Name;
-
-  if (!MExpInfo.MI)
-    return MExpInfo.Name;
-
-  // Manually expand its arguments from the previous macro.
-  MExpInfo.ParamMap.expandFromPrevMacro(PrevParamMap);
-
-  // Iterate over the macro's tokens and stringify them.
-  for (auto It = MExpInfo.MI->tokens_begin(), E = MExpInfo.MI->tokens_end();
-       It != E; ++It) {
-    Token T = *It;
-
-    // If this token is not an identifier, we only need to print it.
-    if (T.isNot(tok::identifier)) {
-      Printer.printToken(T);
-      continue;
-    }
-
-    const auto *II = T.getIdentifierInfo();
-    assert(II &&
-          "This token is an identifier but has no IdentifierInfo!");
-
-    // If this token is a macro that should be expanded inside the current
-    // macro.
-    if (getMacroInfoForLocation(PP, SM, II, T.getLocation())) {
-      getMacroNameAndPrintExpansion(Printer, T.getLocation(), PP,
-                                    MExpInfo.ParamMap, AlreadyProcessedTokens);
-
-      // If this is a function-like macro, skip its arguments, as
-      // getExpandedMacro() already printed them. If this is the case, let's
-      // first jump to the '(' token.
-      auto N = std::next(It);
-      if (N != E && N->is(tok::l_paren))
-        It = getMatchingRParen(++It, E);
-      continue;
-    }
-
-    // If this token is the current macro's argument, we should expand it.
-    auto ParamToArgIt = MExpInfo.ParamMap.find(II);
-    if (ParamToArgIt != MExpInfo.ParamMap.end()) {
-      for (MacroInfo::tokens_iterator ArgIt = ParamToArgIt->second.begin(),
-                                      ArgEnd = ParamToArgIt->second.end();
-           ArgIt != ArgEnd; ++ArgIt) {
-
-        // These tokens may still be macros, if that is the case, handle it the
-        // same way we did above.
-        const auto *ArgII = ArgIt->getIdentifierInfo();
-        if (!ArgII) {
-          Printer.printToken(*ArgIt);
-          continue;
-        }
-
-        const auto *MI = PP.getMacroInfo(ArgII);
-        if (!MI) {
-          Printer.printToken(*ArgIt);
-          continue;
-        }
-
-        getMacroNameAndPrintExpansion(Printer, ArgIt->getLocation(), PP,
-                                      MExpInfo.ParamMap,
-                                      AlreadyProcessedTokens);
-        // Peek the next token if it is a tok::l_paren. This way we can decide
-        // if this is the application or just a reference to a function maxro
-        // symbol:
-        //
-        // #define apply(f) ...
-        // #define func(x) ...
-        // apply(func)
-        // apply(func(42))
-        auto N = std::next(ArgIt);
-        if (N != ArgEnd && N->is(tok::l_paren))
-          ArgIt = getMatchingRParen(++ArgIt, ArgEnd);
-      }
-      continue;
-    }
-
-    // If control reached here, then this token isn't a macro identifier, nor an
-    // unexpanded macro argument that we need to handle, print it.
-    Printer.printToken(T);
-  }
-
-  AlreadyProcessedTokens.erase(MacroNameII);
-
-  return MExpInfo.Name;
-}
-
-static MacroExpansionInfo
-getMacroExpansionInfo(const MacroParamMap &PrevParamMap,
-                      SourceLocation ExpanLoc, const Preprocessor &PP) {
-
-  const SourceManager &SM = PP.getSourceManager();
-  const LangOptions &LangOpts = PP.getLangOpts();
-
-  // First, we create a Lexer to lex *at the expansion location* the tokens
-  // referring to the macro's name and its arguments.
-  TokenStream TStream(ExpanLoc, SM, LangOpts);
-
-  // Acquire the macro's name.
-  Token TheTok;
-  TStream.next(TheTok);
-
-  std::string MacroName = PP.getSpelling(TheTok);
-
-  const auto *II = PP.getIdentifierInfo(MacroName);
-  assert(II && "Failed to acquire the IdentifierInfo for the macro!");
-
-  const MacroInfo *MI = getMacroInfoForLocation(PP, SM, II, ExpanLoc);
-  // assert(MI && "The macro must've been defined at it's expansion location!");
-  //
-  // We should always be able to obtain the MacroInfo in a given TU, but if
-  // we're running the analyzer with CTU, the Preprocessor won't contain the
-  // directive history (or anything for that matter) from another TU.
-  // TODO: assert when we're not running with CTU.
-  if (!MI)
-    return { MacroName, MI, {} };
-
-  // Acquire the macro's arguments at the expansion point.
-  //
-  // The rough idea here is to lex from the first left parentheses to the last
-  // right parentheses, and map the macro's parameter to what they will be
-  // expanded to. A macro argument may contain several token (like '3 + 4'), so
-  // we'll lex until we find a tok::comma or tok::r_paren, at which point we
-  // start lexing the next argument or finish.
-  ArrayRef<const IdentifierInfo *> MacroParams = MI->params();
-  if (MacroParams.empty())
-    return { MacroName, MI, {} };
-
-  TStream.next(TheTok);
-  // When this is a token which expands to another macro function then its
-  // parentheses are not at its expansion locaiton. For example:
-  //
-  // #define foo(x) int bar() { return x; }
-  // #define apply_zero(f) f(0)
-  // apply_zero(foo)
-  //               ^
-  //               This is not a tok::l_paren, but foo is a function.
-  if (TheTok.isNot(tok::l_paren))
-    return { MacroName, MI, {} };
-
-  MacroParamMap ParamMap;
-
-  // When the argument is a function call, like
-  //   CALL_FN(someFunctionName(param1, param2))
-  // we will find tok::l_paren, tok::r_paren, and tok::comma that do not divide
-  // actual macro arguments, or do not represent the macro argument's closing
-  // parentheses, so we'll count how many parentheses aren't closed yet.
-  // If ParanthesesDepth
-  //   * = 0, then there are no more arguments to lex.
-  //   * = 1, then if we find a tok::comma, we can start lexing the next arg.
-  //   * > 1, then tok::comma is a part of the current arg.
-  int ParenthesesDepth = 1;
-
-  // If we encounter the variadic arg, we will lex until the closing
-  // tok::r_paren, even if we lex a tok::comma and ParanthesesDepth == 1.
-  const IdentifierInfo *VariadicParamII = PP.getIdentifierInfo("__VA_ARGS__");
-  if (MI->isGNUVarargs()) {
-    // If macro uses GNU-style variadic args, the param name is user-supplied,
-    // an not "__VA_ARGS__".  E.g.:
-    //   #define FOO(a, b, myvargs...)
-    // In this case, just use the last parameter:
-    VariadicParamII = *(MacroParams.rbegin());
-  }
-
-  for (const IdentifierInfo *CurrParamII : MacroParams) {
-    MacroParamMap::mapped_type ArgTokens;
-
-    // One could also simply not supply a single argument to __VA_ARGS__ -- this
-    // results in a preprocessor warning, but is not an error:
-    //   #define VARIADIC(ptr, ...) \
-    //     someVariadicTemplateFunction(__VA_ARGS__)
-    //
-    //   int *ptr;
-    //   VARIADIC(ptr); // Note that there are no commas, this isn't just an
-    //                  // empty parameter -- there are no parameters for '...'.
-    // In any other case, ParenthesesDepth mustn't be 0 here.
-    if (ParenthesesDepth != 0) {
-
-      // Lex the first token of the next macro parameter.
-      TStream.next(TheTok);
-
-      while (CurrParamII == VariadicParamII || ParenthesesDepth != 1 ||
-             !TheTok.is(tok::comma)) {
-        assert(TheTok.isNot(tok::eof) &&
-               "EOF encountered while looking for expanded macro args!");
-
-        if (TheTok.is(tok::l_paren))
-          ++ParenthesesDepth;
-
-        if (TheTok.is(tok::r_paren))
-          --ParenthesesDepth;
-
-        if (ParenthesesDepth == 0)
-          break;
-
-        if (TheTok.is(tok::raw_identifier)) {
-          PP.LookUpIdentifierInfo(TheTok);
-          // This token is a variadic parameter:
-          //
-          //   #define PARAMS_RESOLVE_TO_VA_ARGS(i, fmt) foo(i, fmt); \
-          //     i = 0;
-          //   #define DISPATCH(...) \
-          //     PARAMS_RESOLVE_TO_VA_ARGS(__VA_ARGS__);
-          //                            // ^~~~~~~~~~~ Variadic parameter here
-          //
-          //   void multipleParamsResolveToVA_ARGS(void) {
-          //     int x = 1;
-          //     DISPATCH(x, "LF1M healer"); // Multiple arguments are mapped to
-          //                                 // a single __VA_ARGS__ parameter.
-          //     (void)(10 / x);
-          //   }
-          //
-          // We will stumble across this while trying to expand
-          // PARAMS_RESOLVE_TO_VA_ARGS. By this point, we already noted during
-          // the processing of DISPATCH what __VA_ARGS__ maps to, so we'll
-          // retrieve the next series of tokens from that.
-          if (TheTok.getIdentifierInfo() == VariadicParamII) {
-            TStream.injectRange(PrevParamMap.at(VariadicParamII));
-            TStream.next(TheTok);
-            continue;
-          }
-        }
-
-        ArgTokens.push_back(TheTok);
-        TStream.next(TheTok);
-      }
-    } else {
-      assert(CurrParamII == VariadicParamII &&
-             "No more macro arguments are found, but the current parameter "
-             "isn't the variadic arg!");
-    }
-
-    ParamMap.emplace(CurrParamII, std::move(ArgTokens));
-  }
-
-  assert(TheTok.is(tok::r_paren) &&
-         "Expanded macro argument acquisition failed! After the end of the loop"
-         " this token should be ')'!");
-
-  return {MacroName, MI, ParamMap};
-}
-
-static MacroInfo::tokens_iterator getMatchingRParen(
-    MacroInfo::tokens_iterator It,
-    MacroInfo::tokens_iterator End) {
-
-  assert(It->is(tok::l_paren) && "This token should be '('!");
-
-  // Skip until we find the closing ')'.
-  int ParenthesesDepth = 1;
-  while (ParenthesesDepth != 0) {
-    ++It;
-
-    assert(It->isNot(tok::eof) &&
-           "Encountered EOF while attempting to skip macro arguments!");
-    assert(It != End &&
-           "End of the macro definition reached before finding ')'!");
-
-    if (It->is(tok::l_paren))
-      ++ParenthesesDepth;
-
-    if (It->is(tok::r_paren))
-      --ParenthesesDepth;
-  }
-  return It;
-}
-
-static const MacroInfo *getMacroInfoForLocation(const Preprocessor &PP,
-                                                const SourceManager &SM,
-                                                const IdentifierInfo *II,
-                                                SourceLocation Loc) {
-
-  const MacroDirective *MD = PP.getLocalMacroDirectiveHistory(II);
-  if (!MD)
-    return nullptr;
-
-  return MD->findDirectiveAtLoc(Loc, SM).getMacroInfo();
-}
-
-void MacroParamMap::expandFromPrevMacro(const MacroParamMap &Super) {
-
-  for (value_type &Pair : *this) {
-    ArgTokensTy &CurrArgTokens = Pair.second;
-
-    // For each token in the expanded macro argument.
-    auto It = CurrArgTokens.begin();
-    while (It != CurrArgTokens.end()) {
-      if (It->isNot(tok::identifier)) {
-        ++It;
-        continue;
-      }
-
-      const auto *II = It->getIdentifierInfo();
-      assert(II);
-
-      // Is this an argument that "Super" expands further?
-      if (!Super.count(II)) {
-        ++It;
-        continue;
-      }
-
-      const ArgTokensTy &SuperArgTokens = Super.at(II);
-
-      It = CurrArgTokens.insert(It, SuperArgTokens.begin(),
-                                SuperArgTokens.end());
-      std::advance(It, SuperArgTokens.size());
-      It = CurrArgTokens.erase(It);
-    }
-  }
-}
-
-void MacroParamMap::dumpToStream(llvm::raw_ostream &Out,
-                                 const Preprocessor &PP) const {
-  for (const std::pair<const IdentifierInfo *, ArgTokensTy> Pair : *this) {
-    Out << Pair.first->getName() << " -> ";
-    dumpArgTokensToStream(Out, PP, Pair.second);
-    Out << '\n';
-  }
-}
-
-static void dumpArgTokensToStream(llvm::raw_ostream &Out,
-                                  const Preprocessor &PP,
-                                  const ArgTokensTy &Toks) {
-  TokenPrinter Printer(Out, PP);
-  for (Token Tok : Toks)
-    Printer.printToken(Tok);
-}
-
-void TokenPrinter::printToken(const Token &Tok) {
-  // TODO: Handle GNU extensions where hash and hashhash occurs right before
-  // __VA_ARGS__.
-  // cppreference.com: "some compilers offer an extension that allows ## to
-  // appear after a comma and before __VA_ARGS__, in which case the ## does
-  // nothing when the variable arguments are present, but removes the comma when
-  // the variable arguments are not present: this makes it possible to define
-  // macros such as fprintf (stderr, format, ##__VA_ARGS__)"
-  // FIXME: Handle named variadic macro parameters (also a GNU extension).
-
-  // If this is the first token to be printed, don't print space.
-  if (PrevTok.isNot(tok::unknown)) {
-    // If the tokens were already space separated, or if they must be to avoid
-    // them being implicitly pasted, add a space between them.
-    if(Tok.hasLeadingSpace() || ConcatInfo.AvoidConcat(PrevPrevTok, PrevTok,
-                                                       Tok)) {
-      // AvoidConcat doesn't check for ##, don't print a space around it.
-      if (PrevTok.isNot(tok::hashhash) && Tok.isNot(tok::hashhash)) {
-        OS << ' ';
-      }
-    }
-  }
-
-  if (!Tok.isOneOf(tok::hash, tok::hashhash)) {
-    if (PrevTok.is(tok::hash))
-      OS << '\"' << PP.getSpelling(Tok) << '\"';
-    else
-      OS << PP.getSpelling(Tok);
-  }
-
-  PrevPrevTok = PrevTok;
-  PrevTok = Tok;
+  return MacroExpansions.getExpandedText(MacroExpansionLoc);
 }

diff  --git a/clang/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist b/clang/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist
deleted file mode 100644
index 61f9972672a2..000000000000
--- a/clang/test/Analysis/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist
+++ /dev/null
@@ -1,6931 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>clang_version</key>
- <key>diagnostics</key>
- <array>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>23</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>23</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>24</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>24</integer>
-           <key>col</key><integer>21</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>24</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>24</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>24</integer>
-         <key>col</key><integer>21</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>25</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>25</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>25</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>25</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>25</integer>
-      <key>col</key><integer>8</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>25</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>25</integer>
-         <key>col</key><integer>6</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>24</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>SET_PTR_VAR_TO_NULL</string>
-     <key>expansion</key><string>ptr = 0</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>f8fbc46cc5afbb056d92bd3d3d702781</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>nonFunctionLikeMacroTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>25</integer>
-   <key>col</key><integer>8</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>22</integer>
-    <integer>23</integer>
-    <integer>24</integer>
-    <integer>25</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>36</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>36</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>37</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>37</integer>
-           <key>col</key><integer>39</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>37</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>37</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>37</integer>
-         <key>col</key><integer>39</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>38</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>38</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>38</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>38</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>38</integer>
-      <key>col</key><integer>8</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>38</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>38</integer>
-         <key>col</key><integer>6</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>37</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>SET_PTR_VAR_TO_NULL_WITH_NESTED_MACRO</string>
-     <key>expansion</key><string>ptr =0</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>d5eba61193b41c27fc7b2705cbd607ba</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>nonFunctionLikeNestedMacroTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>38</integer>
-   <key>col</key><integer>8</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>35</integer>
-    <integer>36</integer>
-    <integer>37</integer>
-    <integer>38</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>56</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>56</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>57</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>57</integer>
-           <key>col</key><integer>9</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>57</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>57</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>57</integer>
-         <key>col</key><integer>15</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Calling 'setToNull'</string>
-     <key>message</key>
-     <string>Calling 'setToNull'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>48</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Entered call from 'functionLikeMacroTest'</string>
-     <key>message</key>
-     <string>Entered call from 'functionLikeMacroTest'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>48</integer>
-           <key>col</key><integer>1</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>48</integer>
-           <key>col</key><integer>4</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>49</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>49</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>49</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>49</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>49</integer>
-         <key>col</key><integer>17</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>57</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>57</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>57</integer>
-         <key>col</key><integer>15</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Returning from 'setToNull'</string>
-     <key>message</key>
-     <string>Returning from 'setToNull'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>58</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>58</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>58</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>58</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>58</integer>
-      <key>col</key><integer>8</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>58</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>58</integer>
-         <key>col</key><integer>6</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>57</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>TO_NULL</string>
-     <key>expansion</key><string>setToNull(&ptr)</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>370a457744311752aac789447b4ef16c</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>functionLikeMacroTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>58</integer>
-   <key>col</key><integer>8</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>48</integer>
-    <integer>49</integer>
-    <integer>55</integer>
-    <integer>56</integer>
-    <integer>57</integer>
-    <integer>58</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>76</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>76</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>77</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>77</integer>
-           <key>col</key><integer>9</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>77</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>77</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>77</integer>
-         <key>col</key><integer>13</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Calling 'setToNull'</string>
-     <key>message</key>
-     <string>Calling 'setToNull'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>48</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Entered call from 'functionLikeNestedMacroTest'</string>
-     <key>message</key>
-     <string>Entered call from 'functionLikeNestedMacroTest'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>48</integer>
-           <key>col</key><integer>1</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>48</integer>
-           <key>col</key><integer>4</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>49</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>49</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>49</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>49</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>49</integer>
-         <key>col</key><integer>17</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'a'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'a'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>77</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>77</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>77</integer>
-         <key>col</key><integer>13</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Returning from 'setToNull'</string>
-     <key>message</key>
-     <string>Returning from 'setToNull'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>78</integer>
-      <key>col</key><integer>12</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>78</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>78</integer>
-         <key>col</key><integer>10</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>77</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>TO_NULL</string>
-     <key>expansion</key><string>setToNull(&a)</string>
-    </dict>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>78</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>DEREF</string>
-     <key>expansion</key><string>{ int b; b = 5; } print(a); *a</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'a')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>873802674657bba4565f64c7bbf0ded9</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>functionLikeNestedMacroTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>78</integer>
-   <key>col</key><integer>12</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>48</integer>
-    <integer>49</integer>
-    <integer>75</integer>
-    <integer>76</integer>
-    <integer>77</integer>
-    <integer>78</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>95</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>95</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>96</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>96</integer>
-           <key>col</key><integer>28</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>96</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>96</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>96</integer>
-         <key>col</key><integer>33</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>97</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>97</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>97</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>97</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>97</integer>
-      <key>col</key><integer>8</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>97</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>97</integer>
-         <key>col</key><integer>6</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>96</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>WILL_UNDEF_SET_NULL_TO_PTR</string>
-     <key>expansion</key><string>ptr = nullptr;</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>79ce7ac344a15505929edba2fdf178b6</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>undefinedMacroByTheEndOfParsingTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>97</integer>
-   <key>col</key><integer>8</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>94</integer>
-    <integer>95</integer>
-    <integer>96</integer>
-    <integer>97</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>112</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>112</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>113</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>113</integer>
-           <key>col</key><integer>42</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>113</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>113</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>113</integer>
-         <key>col</key><integer>47</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>114</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>114</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>114</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>114</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>114</integer>
-      <key>col</key><integer>8</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>114</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>114</integer>
-         <key>col</key><integer>6</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>113</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>WILL_REDIFINE_MULTIPLE_TIMES_SET_TO_NULL</string>
-     <key>expansion</key><string>ptr = nullptr;</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>cbbecfb64198aebb884f3729dff84896</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>macroRedefinedMultipleTimesTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>114</integer>
-   <key>col</key><integer>8</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>111</integer>
-    <integer>112</integer>
-    <integer>113</integer>
-    <integer>114</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>132</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>132</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>133</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>133</integer>
-           <key>col</key><integer>39</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>133</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>133</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>133</integer>
-         <key>col</key><integer>44</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>134</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>134</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>134</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>134</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>134</integer>
-      <key>col</key><integer>8</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>134</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>134</integer>
-         <key>col</key><integer>6</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>133</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>PASS_PTR_TO_MACRO_THAT_WILL_BE_UNDEFD</string>
-     <key>expansion</key><string>ptr = nullptr;</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>01684c77381713fd6c7be31ebc9b647a</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>undefinedMacroInsideAnotherMacroTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>134</integer>
-   <key>col</key><integer>8</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>131</integer>
-    <integer>132</integer>
-    <integer>133</integer>
-    <integer>134</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>159</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>159</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>160</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>160</integer>
-           <key>col</key><integer>19</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>160</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>160</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>160</integer>
-         <key>col</key><integer>52</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'a'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'a'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>161</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>161</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>161</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>161</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>161</integer>
-      <key>col</key><integer>6</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>161</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>161</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>160</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>TO_NULL_AND_PRINT</string>
-     <key>expansion</key><string>a = 0; print( "Will this , cause a crash?")</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'a')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>7a7344244350405a514682fe228e304e</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>macroArgContainsCommaInStringTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>161</integer>
-   <key>col</key><integer>6</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>158</integer>
-    <integer>159</integer>
-    <integer>160</integer>
-    <integer>161</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>168</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>168</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>169</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>169</integer>
-           <key>col</key><integer>19</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>169</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>169</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>169</integer>
-         <key>col</key><integer>52</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'a'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'a'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>170</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>170</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>170</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>170</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>170</integer>
-      <key>col</key><integer>6</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>170</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>170</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>169</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>TO_NULL_AND_PRINT</string>
-     <key>expansion</key><string>a = 0; print( "Will this ( cause a crash?")</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'a')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>1d6d14e3f566cec02bd1f3542e3c8044</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>macroArgContainsLParenInStringTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>170</integer>
-   <key>col</key><integer>6</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>167</integer>
-    <integer>168</integer>
-    <integer>169</integer>
-    <integer>170</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>177</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>177</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>178</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>178</integer>
-           <key>col</key><integer>19</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>178</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>178</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>178</integer>
-         <key>col</key><integer>52</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'a'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'a'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>179</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>179</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>179</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>179</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>179</integer>
-      <key>col</key><integer>6</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>179</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>179</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>178</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>TO_NULL_AND_PRINT</string>
-     <key>expansion</key><string>a = 0; print( "Will this ) cause a crash?")</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'a')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>7354d762d71f0d0a3ffc9d6d827fe580</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>macroArgContainsRParenInStringTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>179</integer>
-   <key>col</key><integer>6</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>176</integer>
-    <integer>177</integer>
-    <integer>178</integer>
-    <integer>179</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>191</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>191</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>192</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>192</integer>
-           <key>col</key><integer>15</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>192</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>192</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>192</integer>
-         <key>col</key><integer>30</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Calling 'setToNull'</string>
-     <key>message</key>
-     <string>Calling 'setToNull'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>48</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Entered call from 'macroArgContainsLParenRParenTest'</string>
-     <key>message</key>
-     <string>Entered call from 'macroArgContainsLParenRParenTest'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>48</integer>
-           <key>col</key><integer>1</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>48</integer>
-           <key>col</key><integer>4</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>49</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>49</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>49</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>49</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>49</integer>
-         <key>col</key><integer>17</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'a'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'a'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>192</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>192</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>192</integer>
-         <key>col</key><integer>30</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Returning from 'setToNull'</string>
-     <key>message</key>
-     <string>Returning from 'setToNull'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>193</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>193</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>193</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>193</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>193</integer>
-      <key>col</key><integer>6</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>193</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>193</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>192</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>CALL_FUNCTION</string>
-     <key>expansion</key><string>setToNull(&a)</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'a')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>f00b6f77288a374e864a58609e9a42ea</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>macroArgContainsLParenRParenTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>193</integer>
-   <key>col</key><integer>6</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>48</integer>
-    <integer>49</integer>
-    <integer>190</integer>
-    <integer>191</integer>
-    <integer>192</integer>
-    <integer>193</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>205</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>205</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>206</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>206</integer>
-           <key>col</key><integer>15</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>206</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>206</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>206</integer>
-         <key>col</key><integer>48</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Calling 'setToNullAndPrint'</string>
-     <key>message</key>
-     <string>Calling 'setToNullAndPrint'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>199</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Entered call from 'macroArgContainsCommaLParenRParenTest'</string>
-     <key>message</key>
-     <string>Entered call from 'macroArgContainsCommaLParenRParenTest'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>199</integer>
-           <key>col</key><integer>1</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>199</integer>
-           <key>col</key><integer>4</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>200</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>200</integer>
-           <key>col</key><integer>11</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>200</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>200</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>200</integer>
-         <key>col</key><integer>17</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Calling 'setToNull'</string>
-     <key>message</key>
-     <string>Calling 'setToNull'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>48</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>depth</key><integer>2</integer>
-     <key>extended_message</key>
-     <string>Entered call from 'setToNullAndPrint'</string>
-     <key>message</key>
-     <string>Entered call from 'setToNullAndPrint'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>48</integer>
-           <key>col</key><integer>1</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>48</integer>
-           <key>col</key><integer>4</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>49</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>49</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>49</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>49</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>49</integer>
-         <key>col</key><integer>17</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>2</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'a'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'a'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>200</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>200</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>200</integer>
-         <key>col</key><integer>17</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Returning from 'setToNull'</string>
-     <key>message</key>
-     <string>Returning from 'setToNull'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>200</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>200</integer>
-           <key>col</key><integer>11</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>201</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>201</integer>
-           <key>col</key><integer>7</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>206</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>206</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>206</integer>
-         <key>col</key><integer>48</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Returning from 'setToNullAndPrint'</string>
-     <key>message</key>
-     <string>Returning from 'setToNullAndPrint'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>207</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>207</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>207</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>207</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>207</integer>
-      <key>col</key><integer>6</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>207</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>207</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>206</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>CALL_FUNCTION</string>
-     <key>expansion</key><string>setToNullAndPrint(&a, "Hello!")</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'a')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>c5805abeb71bb4edb41b49ab317439b9</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>macroArgContainsCommaLParenRParenTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>207</integer>
-   <key>col</key><integer>6</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>48</integer>
-    <integer>49</integer>
-    <integer>199</integer>
-    <integer>200</integer>
-    <integer>201</integer>
-    <integer>204</integer>
-    <integer>205</integer>
-    <integer>206</integer>
-    <integer>207</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>217</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>217</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>218</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>218</integer>
-           <key>col</key><integer>31</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>218</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>218</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>218</integer>
-         <key>col</key><integer>64</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Calling 'setToNullAndPrint'</string>
-     <key>message</key>
-     <string>Calling 'setToNullAndPrint'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>199</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Entered call from 'macroArgContainsCommaLParenRParenTest2'</string>
-     <key>message</key>
-     <string>Entered call from 'macroArgContainsCommaLParenRParenTest2'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>199</integer>
-           <key>col</key><integer>1</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>199</integer>
-           <key>col</key><integer>4</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>200</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>200</integer>
-           <key>col</key><integer>11</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>200</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>200</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>200</integer>
-         <key>col</key><integer>17</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Calling 'setToNull'</string>
-     <key>message</key>
-     <string>Calling 'setToNull'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>48</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>depth</key><integer>2</integer>
-     <key>extended_message</key>
-     <string>Entered call from 'setToNullAndPrint'</string>
-     <key>message</key>
-     <string>Entered call from 'setToNullAndPrint'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>48</integer>
-           <key>col</key><integer>1</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>48</integer>
-           <key>col</key><integer>4</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>49</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>49</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>49</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>49</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>49</integer>
-         <key>col</key><integer>17</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>2</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'a'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'a'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>200</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>200</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>200</integer>
-         <key>col</key><integer>17</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Returning from 'setToNull'</string>
-     <key>message</key>
-     <string>Returning from 'setToNull'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>200</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>200</integer>
-           <key>col</key><integer>11</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>201</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>201</integer>
-           <key>col</key><integer>7</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>218</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>218</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>218</integer>
-         <key>col</key><integer>64</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Returning from 'setToNullAndPrint'</string>
-     <key>message</key>
-     <string>Returning from 'setToNullAndPrint'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>219</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>219</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>219</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>219</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>219</integer>
-      <key>col</key><integer>6</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>219</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>219</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>218</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>CALL_FUNCTION_WITH_TWO_PARAMS</string>
-     <key>expansion</key><string>setToNullAndPrint( &a, "Hello!")</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'a')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>4014a22ef054933e6ce9be43623ea85e</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>macroArgContainsCommaLParenRParenTest2</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>219</integer>
-   <key>col</key><integer>6</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>48</integer>
-    <integer>49</integer>
-    <integer>199</integer>
-    <integer>200</integer>
-    <integer>201</integer>
-    <integer>216</integer>
-    <integer>217</integer>
-    <integer>218</integer>
-    <integer>219</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>229</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>229</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>233</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>233</integer>
-           <key>col</key><integer>13</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>233</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>233</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>233</integer>
-         <key>col</key><integer>58</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Calling 'operator()'</string>
-     <key>message</key>
-     <string>Calling 'operator()'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>233</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Entered call from 'commaInBracketsTest'</string>
-     <key>message</key>
-     <string>Entered call from 'commaInBracketsTest'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>233</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>233</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>233</integer>
-         <key>col</key><integer>58</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Calling 'setToNull'</string>
-     <key>message</key>
-     <string>Calling 'setToNull'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>48</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>depth</key><integer>2</integer>
-     <key>extended_message</key>
-     <string>Entered call from 'operator()'</string>
-     <key>message</key>
-     <string>Entered call from 'operator()'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>48</integer>
-           <key>col</key><integer>1</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>48</integer>
-           <key>col</key><integer>4</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>49</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>49</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>49</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>49</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>49</integer>
-         <key>col</key><integer>17</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>2</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>233</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>233</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>233</integer>
-         <key>col</key><integer>58</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Returning from 'setToNull'</string>
-     <key>message</key>
-     <string>Returning from 'setToNull'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>233</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>233</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>233</integer>
-         <key>col</key><integer>58</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Returning from 'operator()'</string>
-     <key>message</key>
-     <string>Returning from 'operator()'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>234</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>234</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>234</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>234</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>234</integer>
-      <key>col</key><integer>8</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>234</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>234</integer>
-         <key>col</key><integer>6</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>233</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>CALL_LAMBDA</string>
-     <key>expansion</key><string>([&ptr, str] () mutable { setToNull(&ptr); })()</string>
-    </dict>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>233</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>CALL_LAMBDA</string>
-     <key>expansion</key><string>([&ptr, str] () mutable { setToNull(&ptr); })()</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>a8918c38ddfa6a991701e7d19c9cd6bb</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>commaInBracketsTest</string>
-  <key>issue_hash_function_offset</key><string>6</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>234</integer>
-   <key>col</key><integer>8</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>48</integer>
-    <integer>49</integer>
-    <integer>228</integer>
-    <integer>229</integer>
-    <integer>230</integer>
-    <integer>233</integer>
-    <integer>234</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>244</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>244</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>252</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>'ptr' initialized to a null pointer value</string>
-     <key>message</key>
-     <string>'ptr' initialized to a null pointer value</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>244</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>244</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>252</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>244</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>PASTE_CODE</string>
-     <key>expansion</key><string>{ int *ptr = nullptr; *ptr = 5; }</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>63042e03ae0d2f3832b141a63b1d4d49</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>commaInBracesTest</string>
-  <key>issue_hash_function_offset</key><string>1</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>244</integer>
-   <key>col</key><integer>3</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>243</integer>
-    <integer>244</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>266</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>266</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>268</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>268</integer>
-           <key>col</key><integer>25</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>268</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>268</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>268</integer>
-         <key>col</key><integer>31</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>269</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>269</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>269</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>269</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>269</integer>
-      <key>col</key><integer>8</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>269</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>269</integer>
-         <key>col</key><integer>6</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>268</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>POTENTIALLY_EMPTY_PARAM</string>
-     <key>expansion</key><string>;ptr = nullptr</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>cd980e278fbcd8f77bbeac79285084e2</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>emptyParamTest</string>
-  <key>issue_hash_function_offset</key><string>4</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>269</integer>
-   <key>col</key><integer>8</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>265</integer>
-    <integer>266</integer>
-    <integer>268</integer>
-    <integer>269</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>280</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>280</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>282</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>282</integer>
-           <key>col</key><integer>20</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>282</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>282</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>282</integer>
-         <key>col</key><integer>27</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>283</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>283</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>283</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>283</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>283</integer>
-      <key>col</key><integer>8</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>283</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>283</integer>
-         <key>col</key><integer>6</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>282</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>NESTED_EMPTY_PARAM</string>
-     <key>expansion</key><string>; ptr = nullptr;</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>f6a5f6c93b6e3734842ddabd3d5a7341</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>nestedEmptyParamTest</string>
-  <key>issue_hash_function_offset</key><string>4</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>283</integer>
-   <key>col</key><integer>8</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>279</integer>
-    <integer>280</integer>
-    <integer>282</integer>
-    <integer>283</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>293</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>293</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>294</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>294</integer>
-           <key>col</key><integer>44</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>294</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>294</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>294</integer>
-         <key>col</key><integer>61</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Calling 'setToNull'</string>
-     <key>message</key>
-     <string>Calling 'setToNull'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>48</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Entered call from 'lParenRParenInNestedMacro'</string>
-     <key>message</key>
-     <string>Entered call from 'lParenRParenInNestedMacro'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>48</integer>
-           <key>col</key><integer>1</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>48</integer>
-           <key>col</key><integer>4</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>49</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>49</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>49</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>49</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>49</integer>
-         <key>col</key><integer>17</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>294</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>294</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>294</integer>
-         <key>col</key><integer>61</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Returning from 'setToNull'</string>
-     <key>message</key>
-     <string>Returning from 'setToNull'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>295</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>295</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>295</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>295</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>295</integer>
-      <key>col</key><integer>8</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>295</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>295</integer>
-         <key>col</key><integer>6</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>294</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>CALL_FUNCTION_WITH_ONE_PARAM_THROUGH_MACRO</string>
-     <key>expansion</key><string>setToNull( &ptr)</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>ff00c8344e685317303e814970082d5f</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>lParenRParenInNestedMacro</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>295</integer>
-   <key>col</key><integer>8</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>48</integer>
-    <integer>49</integer>
-    <integer>292</integer>
-    <integer>293</integer>
-    <integer>294</integer>
-    <integer>295</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>313</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>313</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>314</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>314</integer>
-           <key>col</key><integer>22</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>314</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>314</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>314</integer>
-         <key>col</key><integer>42</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>315</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>315</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>315</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>315</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>315</integer>
-      <key>col</key><integer>8</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>315</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>315</integer>
-         <key>col</key><integer>6</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>314</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>VARIADIC_SET_TO_NULL</string>
-     <key>expansion</key><string>ptr = nullptr; variadicFunc( 1, 5, "haha!")</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>1b0880549df23e9ce0edb60955ad5ac1</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>variadicMacroArgumentTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>315</integer>
-   <key>col</key><integer>8</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>312</integer>
-    <integer>313</integer>
-    <integer>314</integer>
-    <integer>315</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>322</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>322</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>325</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>325</integer>
-           <key>col</key><integer>22</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>325</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>325</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>325</integer>
-         <key>col</key><integer>27</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>326</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>326</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>326</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>326</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>326</integer>
-      <key>col</key><integer>8</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>326</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>326</integer>
-         <key>col</key><integer>6</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>325</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>VARIADIC_SET_TO_NULL</string>
-     <key>expansion</key><string>ptr = nullptr; variadicFunc()</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>6aa30fd6a1e997027333f16c2064d973</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>variadicMacroArgumentWithoutAnyArgumentTest</string>
-  <key>issue_hash_function_offset</key><string>5</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>326</integer>
-   <key>col</key><integer>8</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>321</integer>
-    <integer>322</integer>
-    <integer>325</integer>
-    <integer>326</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>341</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>341</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>342</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>342</integer>
-           <key>col</key><integer>30</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>342</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>342</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>342</integer>
-         <key>col</key><integer>45</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>343</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>343</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>343</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>343</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>343</integer>
-      <key>col</key><integer>8</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>343</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>343</integer>
-         <key>col</key><integer>6</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>342</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>DECLARE_FUNC_AND_SET_TO_NULL</string>
-     <key>expansion</key><string>void generated_whatever(); ptr = nullptr;</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>453ed8096f5394e74e16f965886e5623</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>hashHashOperatorTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>343</integer>
-   <key>col</key><integer>8</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>340</integer>
-    <integer>341</integer>
-    <integer>342</integer>
-    <integer>343</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>350</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>350</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>351</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>351</integer>
-           <key>col</key><integer>19</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>351</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>351</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>351</integer>
-         <key>col</key><integer>53</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'a'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'a'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>352</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>352</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>352</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>352</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>352</integer>
-      <key>col</key><integer>6</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>352</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>352</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>351</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>TO_NULL_AND_PRINT</string>
-     <key>expansion</key><string>a = 0; print( "Will this ## cause a crash?")</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'a')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>6817572ced27cb7d28fc87b2aba75fb4</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>macroArgContainsHashHashInStringTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>352</integer>
-   <key>col</key><integer>6</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>349</integer>
-    <integer>350</integer>
-    <integer>351</integer>
-    <integer>352</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>363</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>363</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>364</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>364</integer>
-           <key>col</key><integer>11</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>364</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>364</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>364</integer>
-         <key>col</key><integer>23</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>365</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>365</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>365</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>365</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>365</integer>
-      <key>col</key><integer>8</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>365</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>365</integer>
-         <key>col</key><integer>6</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>364</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>PRINT_STR</string>
-     <key>expansion</key><string>print("Hello"); ptr = nullptr</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>e6947ee72df70243a3b4c9e9eaed0888</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>hashOperatorTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>365</integer>
-   <key>col</key><integer>8</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>362</integer>
-    <integer>363</integer>
-    <integer>364</integer>
-    <integer>365</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>372</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>372</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>373</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>373</integer>
-           <key>col</key><integer>19</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>373</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>373</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>373</integer>
-         <key>col</key><integer>52</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'a'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'a'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>374</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>374</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>374</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>374</integer>
-           <key>col</key><integer>6</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>374</integer>
-      <key>col</key><integer>6</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>374</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>374</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'a')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>373</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>TO_NULL_AND_PRINT</string>
-     <key>expansion</key><string>a = 0; print( "Will this # cause a crash?")</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'a')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>b1da2db423e721067ed5cfda858890be</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>macroArgContainsHashInStringTest</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>374</integer>
-   <key>col</key><integer>6</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>371</integer>
-    <integer>372</integer>
-    <integer>373</integer>
-    <integer>374</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>420</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>420</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>420</integer>
-           <key>col</key><integer>18</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>420</integer>
-           <key>col</key><integer>43</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>420</integer>
-      <key>col</key><integer>18</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>420</integer>
-         <key>col</key><integer>18</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>420</integer>
-         <key>col</key><integer>49</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Calling 'getLowestCommonDenominator'</string>
-     <key>message</key>
-     <string>Calling 'getLowestCommonDenominator'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>415</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Entered call from 'testVeryComplexAlgorithm'</string>
-     <key>message</key>
-     <string>Entered call from 'testVeryComplexAlgorithm'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>415</integer>
-           <key>col</key><integer>1</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>415</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>416</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>416</integer>
-           <key>col</key><integer>21</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>pop-up</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>416</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>416</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>416</integer>
-         <key>col</key><integer>27</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>extended_message</key>
-     <string>'A' is >= 0</string>
-     <key>message</key>
-     <string>'A' is >= 0</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>pop-up</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>416</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>416</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>416</integer>
-         <key>col</key><integer>27</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>extended_message</key>
-     <string>'B' is >= 0</string>
-     <key>message</key>
-     <string>'B' is >= 0</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>416</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>416</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>416</integer>
-         <key>col</key><integer>27</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Division by zero</string>
-     <key>message</key>
-     <string>Division by zero</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>416</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>EUCLIDEAN_ALGORITHM</string>
-     <key>expansion</key><string>if (A<0 ){A=-A;} if ( B<0 ){ B=- B;}return B / ( B - B);</string>
-    </dict>
-   </array>
-   <key>description</key><string>Division by zero</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Division by zero</string>
-   <key>check_name</key><string>core.DivideZero</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>3484e210b755ea46d632296fffd709e0</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>getLowestCommonDenominator</string>
-  <key>issue_hash_function_offset</key><string>1</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>416</integer>
-   <key>col</key><integer>3</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>415</integer>
-    <integer>416</integer>
-    <integer>419</integer>
-    <integer>420</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>435</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>435</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>436</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>436</integer>
-           <key>col</key><integer>25</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>436</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>436</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>436</integer>
-         <key>col</key><integer>67</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-     <key>message</key>
-     <string>Null pointer value stored to 'ptr'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>437</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>437</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>437</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>437</integer>
-           <key>col</key><integer>8</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>437</integer>
-      <key>col</key><integer>8</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>437</integer>
-         <key>col</key><integer>4</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>437</integer>
-         <key>col</key><integer>6</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-     <key>message</key>
-     <string>Dereference of null pointer (loaded from variable 'ptr')</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>436</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>YET_ANOTHER_SET_TO_NULL</string>
-     <key>expansion</key><string>print((void *)5); print((void *)"Remember the Vasa"); ptr = nullptr;</string>
-    </dict>
-   </array>
-   <key>description</key><string>Dereference of null pointer (loaded from variable 'ptr')</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Dereference of null pointer</string>
-   <key>check_name</key><string>core.NullDereference</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>42143f52fc9638fb2c0af41916e09d2f</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>test</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>437</integer>
-   <key>col</key><integer>8</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>434</integer>
-    <integer>435</integer>
-    <integer>436</integer>
-    <integer>437</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>448</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>448</integer>
-           <key>col</key><integer>4</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>448</integer>
-           <key>col</key><integer>7</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>448</integer>
-           <key>col</key><integer>11</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>448</integer>
-      <key>col</key><integer>7</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>448</integer>
-         <key>col</key><integer>7</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>448</integer>
-         <key>col</key><integer>16</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Assuming 'garbage_value' is equal to 0</string>
-     <key>message</key>
-     <string>Assuming 'garbage_value' is equal to 0</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>449</integer>
-      <key>col</key><integer>7</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>449</integer>
-         <key>col</key><integer>5</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>449</integer>
-         <key>col</key><integer>13</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Division by zero</string>
-     <key>message</key>
-     <string>Division by zero</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>448</integer>
-      <key>col</key><integer>7</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>value</string>
-     <key>expansion</key><string>garbage_</string>
-    </dict>
-   </array>
-   <key>description</key><string>Division by zero</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Division by zero</string>
-   <key>check_name</key><string>core.DivideZero</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>1f3c94860e67b6b863e956bd67e49f1d</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>recursiveMacroUser</string>
-  <key>issue_hash_function_offset</key><string>2</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>449</integer>
-   <key>col</key><integer>7</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>447</integer>
-    <integer>448</integer>
-    <integer>449</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>460</integer>
-           <key>col</key><integer>33</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>460</integer>
-           <key>col</key><integer>33</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>460</integer>
-           <key>col</key><integer>37</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>460</integer>
-           <key>col</key><integer>39</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>460</integer>
-      <key>col</key><integer>37</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>460</integer>
-         <key>col</key><integer>37</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>460</integer>
-         <key>col</key><integer>41</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Calling 'foo'</string>
-     <key>message</key>
-     <string>Calling 'foo'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>459</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Entered call from 'useZeroApplier1'</string>
-     <key>message</key>
-     <string>Entered call from 'useZeroApplier1'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>459</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>459</integer>
-         <key>col</key><integer>1</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>459</integer>
-         <key>col</key><integer>16</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Returning zero</string>
-     <key>message</key>
-     <string>Returning zero</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>460</integer>
-      <key>col</key><integer>37</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>460</integer>
-         <key>col</key><integer>37</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>460</integer>
-         <key>col</key><integer>41</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Returning from 'foo'</string>
-     <key>message</key>
-     <string>Returning from 'foo'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>460</integer>
-           <key>col</key><integer>37</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>460</integer>
-           <key>col</key><integer>39</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>460</integer>
-           <key>col</key><integer>35</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>460</integer>
-           <key>col</key><integer>35</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>460</integer>
-      <key>col</key><integer>35</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>460</integer>
-         <key>col</key><integer>33</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>460</integer>
-         <key>col</key><integer>41</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Division by zero</string>
-     <key>message</key>
-     <string>Division by zero</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>459</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>APPLY_ZERO1</string>
-     <key>expansion</key><string>int foo() { return x; }(0)</string>
-    </dict>
-   </array>
-   <key>description</key><string>Division by zero</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Division by zero</string>
-   <key>check_name</key><string>core.DivideZero</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>7ff82561a6c752746649d05220deeb40</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>useZeroApplier1</string>
-  <key>issue_hash_function_offset</key><string>0</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>460</integer>
-   <key>col</key><integer>35</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>459</integer>
-    <integer>460</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>469</integer>
-           <key>col</key><integer>33</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>469</integer>
-           <key>col</key><integer>33</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>469</integer>
-           <key>col</key><integer>37</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>469</integer>
-           <key>col</key><integer>39</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>469</integer>
-      <key>col</key><integer>37</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>469</integer>
-         <key>col</key><integer>37</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>469</integer>
-         <key>col</key><integer>41</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Calling 'bar'</string>
-     <key>message</key>
-     <string>Calling 'bar'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>468</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Entered call from 'useZeroApplier2'</string>
-     <key>message</key>
-     <string>Entered call from 'useZeroApplier2'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>468</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>468</integer>
-         <key>col</key><integer>1</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>468</integer>
-         <key>col</key><integer>11</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>1</integer>
-     <key>extended_message</key>
-     <string>Returning zero</string>
-     <key>message</key>
-     <string>Returning zero</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>469</integer>
-      <key>col</key><integer>37</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>469</integer>
-         <key>col</key><integer>37</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>469</integer>
-         <key>col</key><integer>41</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Returning from 'bar'</string>
-     <key>message</key>
-     <string>Returning from 'bar'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>469</integer>
-           <key>col</key><integer>37</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>469</integer>
-           <key>col</key><integer>39</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>469</integer>
-           <key>col</key><integer>35</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>469</integer>
-           <key>col</key><integer>35</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>469</integer>
-      <key>col</key><integer>35</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>469</integer>
-         <key>col</key><integer>33</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>469</integer>
-         <key>col</key><integer>41</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Division by zero</string>
-     <key>message</key>
-     <string>Division by zero</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>468</integer>
-      <key>col</key><integer>1</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>APPLY_ZERO2</string>
-     <key>expansion</key><string>int bar() { return 0; }</string>
-    </dict>
-   </array>
-   <key>description</key><string>Division by zero</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Division by zero</string>
-   <key>check_name</key><string>core.DivideZero</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>dd82c11b436b00009e37f54b1620a728</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>useZeroApplier2</string>
-  <key>issue_hash_function_offset</key><string>0</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>469</integer>
-   <key>col</key><integer>35</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>468</integer>
-    <integer>469</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>481</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>481</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>482</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>482</integer>
-           <key>col</key><integer>10</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>482</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>482</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>482</integer>
-         <key>col</key><integer>28</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>The value 0 is assigned to 'x'</string>
-     <key>message</key>
-     <string>The value 0 is assigned to 'x'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>483</integer>
-      <key>col</key><integer>13</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>483</integer>
-         <key>col</key><integer>10</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>483</integer>
-         <key>col</key><integer>15</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Division by zero</string>
-     <key>message</key>
-     <string>Division by zero</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>482</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>DISPATCH</string>
-     <key>expansion</key><string>foo(x, "LF1M healer");x = 0;;</string>
-    </dict>
-   </array>
-   <key>description</key><string>Division by zero</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Division by zero</string>
-   <key>check_name</key><string>core.DivideZero</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>0911a97774745d4fa0ac03cd9680dfe1</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>mulitpleParamsResolveToVA_ARGS</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>483</integer>
-   <key>col</key><integer>13</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>480</integer>
-    <integer>481</integer>
-    <integer>482</integer>
-    <integer>483</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>494</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>494</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>495</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>495</integer>
-           <key>col</key><integer>16</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>495</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>495</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>495</integer>
-         <key>col</key><integer>71</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>The value 0 is assigned to 'x'</string>
-     <key>message</key>
-     <string>The value 0 is assigned to 'x'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>496</integer>
-      <key>col</key><integer>13</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>496</integer>
-         <key>col</key><integer>10</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>496</integer>
-         <key>col</key><integer>15</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Division by zero</string>
-     <key>message</key>
-     <string>Division by zero</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>495</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>CONCAT_VA_ARGS</string>
-     <key>expansion</key><string>variadicCFunction(x, "You need to construct additional pylons.",'c', 9);x = 0;</string>
-    </dict>
-   </array>
-   <key>description</key><string>Division by zero</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Division by zero</string>
-   <key>check_name</key><string>core.DivideZero</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>ed592fb952ed786e7efdc81bbc538e94</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>concatVA_ARGS</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>496</integer>
-   <key>col</key><integer>13</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>493</integer>
-    <integer>494</integer>
-    <integer>495</integer>
-    <integer>496</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>502</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>502</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>503</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>503</integer>
-           <key>col</key><integer>16</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>503</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>503</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>503</integer>
-         <key>col</key><integer>44</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>The value 0 is assigned to 'x'</string>
-     <key>message</key>
-     <string>The value 0 is assigned to 'x'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>504</integer>
-      <key>col</key><integer>13</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>504</integer>
-         <key>col</key><integer>10</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>504</integer>
-         <key>col</key><integer>15</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Division by zero</string>
-     <key>message</key>
-     <string>Division by zero</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>503</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>CONCAT_VA_ARGS</string>
-     <key>expansion</key><string>variadicCFunction(x, "You need to construct",);x = 0;</string>
-    </dict>
-   </array>
-   <key>description</key><string>Division by zero</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Division by zero</string>
-   <key>check_name</key><string>core.DivideZero</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>4b0ab46d7a972d0a388b4bb59351480a</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>concatVA_ARGSEmpty</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>504</integer>
-   <key>col</key><integer>13</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>501</integer>
-    <integer>502</integer>
-    <integer>503</integer>
-    <integer>504</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>514</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>514</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>515</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>515</integer>
-           <key>col</key><integer>21</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>515</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>515</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>515</integer>
-         <key>col</key><integer>71</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>The value 0 is assigned to 'x'</string>
-     <key>message</key>
-     <string>The value 0 is assigned to 'x'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>516</integer>
-      <key>col</key><integer>13</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>516</integer>
-         <key>col</key><integer>10</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>516</integer>
-         <key>col</key><integer>15</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Division by zero</string>
-     <key>message</key>
-     <string>Division by zero</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>515</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>STRINGIFIED_VA_ARGS</string>
-     <key>expansion</key><string>variadicCFunction(x, "Additional supply depots required.",  "'a'", 10);x = 0;</string>
-    </dict>
-   </array>
-   <key>description</key><string>Division by zero</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Division by zero</string>
-   <key>check_name</key><string>core.DivideZero</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>6622e3f0651f97e6cbf4e075e6b07707</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>stringifyVA_ARGS</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>516</integer>
-   <key>col</key><integer>13</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>513</integer>
-    <integer>514</integer>
-    <integer>515</integer>
-    <integer>516</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>524</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>524</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>525</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>525</integer>
-           <key>col</key><integer>21</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>525</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>525</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>525</integer>
-         <key>col</key><integer>62</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>The value 0 is assigned to 'x'</string>
-     <key>message</key>
-     <string>The value 0 is assigned to 'x'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>526</integer>
-      <key>col</key><integer>13</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>526</integer>
-         <key>col</key><integer>10</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>526</integer>
-         <key>col</key><integer>15</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Division by zero</string>
-     <key>message</key>
-     <string>Division by zero</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>525</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>STRINGIFIED_VA_ARGS</string>
-     <key>expansion</key><string>variadicCFunction(x, "Additional supply depots required.", ")";x = 0;</string>
-    </dict>
-   </array>
-   <key>description</key><string>Division by zero</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Division by zero</string>
-   <key>check_name</key><string>core.DivideZero</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>86c6e52c81f1129e6c9f51e6938d9ee7</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>stringifyVA_ARGSEmpty</string>
-  <key>issue_hash_function_offset</key><string>3</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>526</integer>
-   <key>col</key><integer>13</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>523</integer>
-    <integer>524</integer>
-    <integer>525</integer>
-    <integer>526</integer>
-   </array>
-  </dict>
-  </dict>
-  <dict>
-   <key>path</key>
-   <array>
-    <dict>
-     <key>kind</key><string>control</string>
-     <key>edges</key>
-      <array>
-       <dict>
-        <key>start</key>
-         <array>
-          <dict>
-           <key>line</key><integer>537</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>537</integer>
-           <key>col</key><integer>5</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-        <key>end</key>
-         <array>
-          <dict>
-           <key>line</key><integer>539</integer>
-           <key>col</key><integer>3</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-          <dict>
-           <key>line</key><integer>539</integer>
-           <key>col</key><integer>15</integer>
-           <key>file</key><integer>0</integer>
-          </dict>
-         </array>
-       </dict>
-      </array>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>539</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>539</integer>
-         <key>col</key><integer>3</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>539</integer>
-         <key>col</key><integer>26</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>The value 0 is assigned to 'a'</string>
-     <key>message</key>
-     <string>The value 0 is assigned to 'a'</string>
-    </dict>
-    <dict>
-     <key>kind</key><string>event</string>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>540</integer>
-      <key>col</key><integer>13</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>ranges</key>
-     <array>
-       <array>
-        <dict>
-         <key>line</key><integer>540</integer>
-         <key>col</key><integer>10</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-        <dict>
-         <key>line</key><integer>540</integer>
-         <key>col</key><integer>15</integer>
-         <key>file</key><integer>0</integer>
-        </dict>
-       </array>
-     </array>
-     <key>depth</key><integer>0</integer>
-     <key>extended_message</key>
-     <string>Division by zero</string>
-     <key>message</key>
-     <string>Division by zero</string>
-    </dict>
-   </array>
-   <key>macro_expansions</key>
-   <array>
-    <dict>
-     <key>location</key>
-     <dict>
-      <key>line</key><integer>539</integer>
-      <key>col</key><integer>3</integer>
-      <key>file</key><integer>0</integer>
-     </dict>
-     <key>name</key><string>BZ44493_GNUVA</string>
-     <key>expansion</key><string>--(a);</string>
-    </dict>
-   </array>
-   <key>description</key><string>Division by zero</string>
-   <key>category</key><string>Logic error</string>
-   <key>type</key><string>Division by zero</string>
-   <key>check_name</key><string>core.DivideZero</string>
-   <!-- This hash is experimental and going to change! -->
-   <key>issue_hash_content_of_line_in_context</key><string>21c6d180d8c8c30cf730b7a7136980a9</string>
-  <key>issue_context_kind</key><string>function</string>
-  <key>issue_context</key><string>bz44493</string>
-  <key>issue_hash_function_offset</key><string>4</string>
-  <key>location</key>
-  <dict>
-   <key>line</key><integer>540</integer>
-   <key>col</key><integer>13</integer>
-   <key>file</key><integer>0</integer>
-  </dict>
-  <key>ExecutedLines</key>
-  <dict>
-   <key>0</key>
-   <array>
-    <integer>536</integer>
-    <integer>537</integer>
-    <integer>538</integer>
-    <integer>539</integer>
-    <integer>540</integer>
-   </array>
-  </dict>
-  </dict>
- </array>
- <key>files</key>
- <array>
- </array>
-</dict>
-</plist>

diff  --git a/clang/test/Analysis/plist-macros-with-expansion-ctu.c b/clang/test/Analysis/plist-macros-with-expansion-ctu.c
index 193b8f37480e..0fef72801e03 100644
--- a/clang/test/Analysis/plist-macros-with-expansion-ctu.c
+++ b/clang/test/Analysis/plist-macros-with-expansion-ctu.c
@@ -8,7 +8,7 @@
 // RUN:   -analyzer-config ctu-dir=%t/ctudir \
 // RUN:   -analyzer-config expand-macros=true \
 // RUN:   -analyzer-output=plist-multi-file -o %t.plist -verify %s
-
+// XFAIL: *
 // Check the macro expansions from the plist output here, to make the test more
 // understandable.
 //   RUN: FileCheck --input-file=%t.plist %s

diff  --git a/clang/test/Analysis/plist-macros-with-expansion.c b/clang/test/Analysis/plist-macros-with-expansion.c
new file mode 100644
index 000000000000..cc7844e8f5a2
--- /dev/null
+++ b/clang/test/Analysis/plist-macros-with-expansion.c
@@ -0,0 +1,28 @@
+// RUN: %clang_analyze_cc1 -analyzer-checker=core %s  \
+// RUN:   -analyzer-output=plist -o %t.plist \
+// RUN:   -analyzer-config expand-macros=true -verify
+//
+// RUN: FileCheck --input-file=%t.plist %s
+
+#define STRANGE_FN(x) STRANGE_FN(x, 0)
+void test_strange_macro_expansion() {
+  char *path;
+  STRANGE_FN(path); // no-crash
+  // expected-warning at -1 {{implicit declaration of function}}
+  // expected-warning at -2 {{1st function call argument is an uninitialized value}}
+}
+
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>10</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>STRANGE_FN(path)</string>
+// CHECK-NEXT:   <key>expansion</key><string>STRANGE_FN (path ,0)</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
+

diff  --git a/clang/test/Analysis/plist-macros-with-expansion.cpp b/clang/test/Analysis/plist-macros-with-expansion.cpp
index a6e06b19bb2b..d57bb0f2dd26 100644
--- a/clang/test/Analysis/plist-macros-with-expansion.cpp
+++ b/clang/test/Analysis/plist-macros-with-expansion.cpp
@@ -1,14 +1,8 @@
 // RUN: %clang_analyze_cc1 -std=c++14 -analyzer-checker=core %s  \
 // RUN:   -analyzer-output=plist -o %t.plist \
-// RUN:   -analyzer-config expand-macros=true
+// RUN:   -analyzer-config expand-macros=true -verify
 //
-// Check the actual plist output.
-//   RUN: %normalize_plist <%t.plist | 
diff  -ub \
-//   RUN:   %S/Inputs/expected-plists/plist-macros-with-expansion.cpp.plist -
-//
-// Check the macro expansions from the plist output here, to make the test more
-// understandable.
-//   RUN: FileCheck --input-file=%t.plist %s
+// RUN: FileCheck --input-file=%t.plist %s
 
 void print(const void*);
 
@@ -25,8 +19,19 @@ void nonFunctionLikeMacroTest() {
   *ptr = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>SET_PTR_VAR_TO_NULL</string>
-// CHECK-NEXT: <key>expansion</key><string>ptr = 0</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>18</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>SET_PTR_VAR_TO_NULL</string>
+// CHECK-NEXT:   <key>expansion</key><string>ptr =0</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #define NULL 0
 #define SET_PTR_VAR_TO_NULL_WITH_NESTED_MACRO \
@@ -38,8 +43,19 @@ void nonFunctionLikeNestedMacroTest() {
   *ptr = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>SET_PTR_VAR_TO_NULL_WITH_NESTED_MACRO</string>
-// CHECK-NEXT: <key>expansion</key><string>ptr =0</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>42</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:  <key>name</key><string>SET_PTR_VAR_TO_NULL_WITH_NESTED_MACRO</string>
+// CHECK-NEXT:  <key>expansion</key><string>ptr =0</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 //===----------------------------------------------------------------------===//
 // Tests for function-like macro expansions.
@@ -58,8 +74,19 @@ void functionLikeMacroTest() {
   *ptr = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>TO_NULL</string>
-// CHECK-NEXT: <key>expansion</key><string>setToNull(&ptr)</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>73</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:  <key>name</key><string>TO_NULL(&ptr)</string>
+// CHECK-NEXT:  <key>expansion</key><string>setToNull (&ptr )</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #define DOES_NOTHING(x) \
   {                     \
@@ -78,11 +105,29 @@ void functionLikeNestedMacroTest() {
   DEREF(a) = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>TO_NULL</string>
-// CHECK-NEXT: <key>expansion</key><string>setToNull(&a)</string>
-
-// CHECK: <key>name</key><string>DEREF</string>
-// CHECK-NEXT: <key>expansion</key><string>{ int b; b = 5; } print(a); *a</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>104</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>TO_NULL(&a)</string>
+// CHECK-NEXT:   <key>expansion</key><string>setToNull (&a )</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>105</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>DEREF(a)</string>
+// CHECK-NEXT:   <key>expansion</key><string>{int b ;b =5;}print (a );*a </string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 //===----------------------------------------------------------------------===//
 // Tests for undefining and/or redifining macros.
@@ -99,8 +144,19 @@ void undefinedMacroByTheEndOfParsingTest() {
 
 #undef WILL_UNDEF_SET_NULL_TO_PTR
 
-// CHECK: <key>name</key><string>WILL_UNDEF_SET_NULL_TO_PTR</string>
-// CHECK-NEXT: <key>expansion</key><string>ptr = nullptr;</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>141</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>WILL_UNDEF_SET_NULL_TO_PTR(ptr)</string>
+// CHECK-NEXT:   <key>expansion</key><string>ptr =nullptr ;</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #define WILL_REDIFINE_MULTIPLE_TIMES_SET_TO_NULL(ptr) \
   /* Nothing */
@@ -119,8 +175,19 @@ void macroRedefinedMultipleTimesTest() {
   print("This string shouldn't be in the plist file at all. Or anywhere, " \
         "but here.");
 
-// CHECK: <key>name</key><string>WILL_REDIFINE_MULTIPLE_TIMES_SET_TO_NULL</string>
-// CHECK-NEXT: <key>expansion</key><string>ptr = nullptr;</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>169</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>WILL_REDIFINE_MULTIPLE_TIMES_SET_TO_NULL(ptr)</string>
+// CHECK-NEXT:   <key>expansion</key><string>ptr =nullptr ;</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #define WILL_UNDEF_SET_NULL_TO_PTR_2(ptr) \
   ptr = nullptr;
@@ -134,9 +201,19 @@ void undefinedMacroInsideAnotherMacroTest() {
   *ptr = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// TODO: Expand arguments.
-// CHECK: <key>name</key><string>PASS_PTR_TO_MACRO_THAT_WILL_BE_UNDEFD</string>
-// CHECK-NEXT: <key>expansion</key><string>ptr = nullptr;</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>200</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>PASS_PTR_TO_MACRO_THAT_WILL_BE_UNDEFD(ptr)</string>
+// CHECK-NEXT:   <key>expansion</key><string>ptr =nullptr ;</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #undef WILL_UNDEF_SET_NULL_TO_PTR_2
 
@@ -161,8 +238,19 @@ void macroArgContainsCommaInStringTest() {
   *a = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>TO_NULL_AND_PRINT</string>
-// CHECK-NEXT: <key>expansion</key><string>a = 0; print( "Will this , cause a crash?")</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>237</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>TO_NULL_AND_PRINT(a, "Will this , cause a crash?")</string>
+// CHECK-NEXT:   <key>expansion</key><string>a =0;print ("Will this , cause a crash?")</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 void macroArgContainsLParenInStringTest() {
   int *a;
@@ -170,8 +258,19 @@ void macroArgContainsLParenInStringTest() {
   *a = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>TO_NULL_AND_PRINT</string>
-// CHECK-NEXT: <key>expansion</key><string>a = 0; print( "Will this ( cause a crash?")</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>257</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>TO_NULL_AND_PRINT(a, "Will this ( cause a crash?")</string>
+// CHECK-NEXT:   <key>expansion</key><string>a =0;print ("Will this ( cause a crash?")</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 void macroArgContainsRParenInStringTest() {
   int *a;
@@ -179,8 +278,19 @@ void macroArgContainsRParenInStringTest() {
   *a = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>TO_NULL_AND_PRINT</string>
-// CHECK-NEXT: <key>expansion</key><string>a = 0; print( "Will this ) cause a crash?")</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>277</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>TO_NULL_AND_PRINT(a, "Will this ) cause a crash?")</string>
+// CHECK-NEXT:   <key>expansion</key><string>a =0;print ("Will this ) cause a crash?")</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #define CALL_FUNCTION(funcCall)   \
   funcCall
@@ -193,8 +303,19 @@ void macroArgContainsLParenRParenTest() {
   *a = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>CALL_FUNCTION</string>
-// CHECK-NEXT: <key>expansion</key><string>setToNull(&a)</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>302</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>CALL_FUNCTION(setToNull(&a))</string>
+// CHECK-NEXT:   <key>expansion</key><string>setToNull (&a )</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 void setToNullAndPrint(int **vptr, const char *str) {
   setToNull(vptr);
@@ -207,8 +328,19 @@ void macroArgContainsCommaLParenRParenTest() {
   *a = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>CALL_FUNCTION</string>
-// CHECK-NEXT: <key>expansion</key><string>setToNullAndPrint(&a, "Hello!")</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>327</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>CALL_FUNCTION(setToNullAndPrint(&a, "Hello!"))</string>
+// CHECK-NEXT:   <key>expansion</key><string>setToNullAndPrint (&a ,"Hello!")</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #define CALL_FUNCTION_WITH_TWO_PARAMS(funcCall, param1, param2) \
   funcCall(param1, param2)
@@ -219,8 +351,19 @@ void macroArgContainsCommaLParenRParenTest2() {
   *a = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>CALL_FUNCTION_WITH_TWO_PARAMS</string>
-// CHECK-NEXT: <key>expansion</key><string>setToNullAndPrint( &a, "Hello!")</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>350</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>CALL_FUNCTION_WITH_TWO_PARAMS(setToNullAndPrint, &a, "Hello!")</string>
+// CHECK-NEXT:   <key>expansion</key><string>setToNullAndPrint (&a ,"Hello!")</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #define CALL_LAMBDA(l) \
   l()
@@ -233,9 +376,30 @@ void commaInBracketsTest() {
   CALL_LAMBDA(([&ptr, str] () mutable { TO_NULL(&ptr); }));
   *ptr = 5; // expected-warning{{Dereference of null pointer}}
 }
-
-// CHECK: <key>name</key><string>CALL_LAMBDA</string>
-// CHECK-NEXT: <key>expansion</key><string>([&ptr, str] () mutable { setToNull(&ptr); })()</string>
+// FIXME: Why does the expansion appear twice?
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>376</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>CALL_LAMBDA(([&ptr, str] () mutable { TO_NULL(&ptr); }))</string>
+// CHECK-NEXT:   <key>expansion</key><string>([&ptr ,str ]()mutable {setToNull (&ptr );})()</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>376</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>CALL_LAMBDA(([&ptr, str] () mutable { TO_NULL(&ptr); }))</string>
+// CHECK-NEXT:   <key>expansion</key><string>([&ptr ,str ]()mutable {setToNull (&ptr );})()</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #define PASTE_CODE(code) \
   code
@@ -245,15 +409,34 @@ void commaInBracesTest() {
     // NOTE: If we were to add a new variable here after a comma, we'd get a
     // compilation error, so this test is mainly here to show that this was also
     // investigated.
-
+    //
     // int *ptr = nullptr, a;
     int *ptr = nullptr;
     *ptr = 5;
   })
 }
 
-// CHECK: <key>name</key><string>PASTE_CODE</string>
-// CHECK-NEXT: <key>expansion</key><string>{ int *ptr = nullptr; *ptr = 5; }</string>
+// CHECK:        <key>macro_expansions</key>
+// CHECK-NEXT:   <array>
+// CHECK-NEXT:    <dict>
+// CHECK-NEXT:     <key>location</key>
+// CHECK-NEXT:     <dict>
+// CHECK-NEXT:      <key>line</key><integer>408</integer>
+// CHECK-NEXT:      <key>col</key><integer>3</integer>
+// CHECK-NEXT:      <key>file</key><integer>0</integer>
+// CHECK-NEXT:     </dict>
+// CHECK-NEXT:     <key>name</key><string>PASTE_CODE({ // expected-
+// CHECK-NEXT:    // NOTE: If we were to add a new variable here after a comma, we'd get a
+// CHECK-NEXT:    // compilation error, so this test is mainly here to show that this was also
+// CHECK-NEXT:    // investigated.
+// CHECK-NEXT:    //
+// CHECK-NEXT:    // int *ptr = nullptr, a;
+// CHECK-NEXT:    int *ptr = nullptr;
+// CHECK-NEXT:    *ptr = 5;
+// CHECK-NEXT:  })</string>
+// CHECK-NEXT:     <key>expansion</key><string>{int *ptr =nullptr ;*ptr =5;}</string>
+// CHECK-NEXT:    </dict>
+// CHECK-NEXT:   </array>
 
 // Example taken from
 // https://gcc.gnu.org/onlinedocs/cpp/Macro-Arguments.html#Macro-Arguments.
@@ -269,8 +452,19 @@ void emptyParamTest() {
   *ptr = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>POTENTIALLY_EMPTY_PARAM</string>
-// CHECK-NEXT: <key>expansion</key><string>;ptr = nullptr</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>451</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>POTENTIALLY_EMPTY_PARAM(,ptr)</string>
+// CHECK-NEXT:   <key>expansion</key><string>;ptr =nullptr </string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #define NESTED_EMPTY_PARAM(a, b) \
   POTENTIALLY_EMPTY_PARAM(a, b);
@@ -283,8 +477,19 @@ void nestedEmptyParamTest() {
   *ptr = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>NESTED_EMPTY_PARAM</string>
-// CHECK-NEXT: <key>expansion</key><string>; ptr = nullptr;</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>476</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>NESTED_EMPTY_PARAM(, ptr)</string>
+// CHECK-NEXT:   <key>expansion</key><string>;ptr =nullptr ;</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #define CALL_FUNCTION_WITH_ONE_PARAM_THROUGH_MACRO(func, param) \
   CALL_FUNCTION(func(param))
@@ -295,8 +500,19 @@ void lParenRParenInNestedMacro() {
   *ptr = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>CALL_FUNCTION_WITH_ONE_PARAM_THROUGH_MACRO</string>
-// CHECK-NEXT: <key>expansion</key><string>setToNull( &ptr)</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>499</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>CALL_FUNCTION_WITH_ONE_PARAM_THROUGH_MACRO(setToNull, &ptr)</string>
+// CHECK-NEXT:   <key>expansion</key><string>setToNull (&ptr )</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 //===----------------------------------------------------------------------===//
 // Tests for variadic macro arguments.
@@ -315,8 +531,19 @@ void variadicMacroArgumentTest() {
   *ptr = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>VARIADIC_SET_TO_NULL</string>
-// CHECK-NEXT: <key>expansion</key><string>ptr = nullptr; variadicFunc( 1, 5, "haha!")</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>530</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>VARIADIC_SET_TO_NULL(ptr, 1, 5, "haha!")</string>
+// CHECK-NEXT:   <key>expansion</key><string>ptr =nullptr ;variadicFunc (1,5,"haha!")</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 void variadicMacroArgumentWithoutAnyArgumentTest() {
   int *ptr;
@@ -326,8 +553,19 @@ void variadicMacroArgumentWithoutAnyArgumentTest() {
   *ptr = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>VARIADIC_SET_TO_NULL</string>
-// CHECK-NEXT: <key>expansion</key><string>ptr = nullptr; variadicFunc()</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>552</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>VARIADIC_SET_TO_NULL(ptr)</string>
+// CHECK-NEXT:   <key>expansion</key><string>ptr =nullptr ;variadicFunc ()</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 //===----------------------------------------------------------------------===//
 // Tests for # and ##.
@@ -343,8 +581,19 @@ void hashHashOperatorTest() {
   *ptr = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>DECLARE_FUNC_AND_SET_TO_NULL</string>
-// CHECK-NEXT: <key>expansion</key><string>void generated_whatever(); ptr = nullptr;</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>580</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>DECLARE_FUNC_AND_SET_TO_NULL(whatever, ptr)</string>
+// CHECK-NEXT:   <key>expansion</key><string>void generated_whatever ();ptr =nullptr ;</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 void macroArgContainsHashHashInStringTest() {
   int *a;
@@ -352,8 +601,19 @@ void macroArgContainsHashHashInStringTest() {
   *a = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>TO_NULL_AND_PRINT</string>
-// CHECK-NEXT: <key>expansion</key><string>a = 0; print( "Will this ## cause a crash?")</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>600</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>TO_NULL_AND_PRINT(a, "Will this ## cause a crash?")</string>
+// CHECK-NEXT:   <key>expansion</key><string>a =0;print ("Will this ## cause a crash?")</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #define PRINT_STR(str, ptr) \
   print(#str);              \
@@ -365,8 +625,19 @@ void hashOperatorTest() {
   *ptr = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>PRINT_STR</string>
-// CHECK-NEXT: <key>expansion</key><string>print("Hello"); ptr = nullptr</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>624</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>PRINT_STR(Hello, ptr)</string>
+// CHECK-NEXT:   <key>expansion</key><string>print ("Hello");ptr =nullptr </string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 void macroArgContainsHashInStringTest() {
   int *a;
@@ -374,8 +645,19 @@ void macroArgContainsHashInStringTest() {
   *a = 5; // expected-warning{{Dereference of null pointer}}
 }
 
-// CHECK: <key>name</key><string>TO_NULL_AND_PRINT</string>
-// CHECK-NEXT: <key>expansion</key><string>a = 0; print( "Will this # cause a crash?")</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>644</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>TO_NULL_AND_PRINT(a, "Will this # cause a crash?")</string>
+// CHECK-NEXT:   <key>expansion</key><string>a =0;print ("Will this # cause a crash?")</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 //===----------------------------------------------------------------------===//
 // Tests for more complex macro expansions.
@@ -420,8 +702,20 @@ void testVeryComplexAlgorithm() {
   int tmp = 8 / (getLowestCommonDenominator(5, 7) - 1);
   print(&tmp);
 }
-// CHECK: <key>name</key><string>EUCLIDEAN_ALGORITHM</string>
-// CHECK-NEXT: <key>expansion</key><string>if (A<0 ){A=-A;} if ( B<0 ){ B=- B;}return B / ( B - B);</string>
+
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>698</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>EUCLIDEAN_ALGORITHM(A, B)</string>
+// CHECK-NEXT:   <key>expansion</key><string>if (A <0){A =-A ;}if (B <0){B =-B ;}return B /(B -B );</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #define YET_ANOTHER_SET_TO_NULL(x, y, z)   \
   print((void *) x);                       \
@@ -436,8 +730,20 @@ void test() {
   YET_ANOTHER_SET_TO_NULL(5, DO_NOTHING2("Remember the Vasa"), ptr);
   *ptr = 5; // expected-warning{{Dereference of null pointer}}
 }
-// CHECK: <key>name</key><string>YET_ANOTHER_SET_TO_NULL</string>
-// CHECK-NEXT: <key>expansion</key><string>print((void *)5); print((void *)"Remember the Vasa"); ptr = nullptr;</string>
+
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>730</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>YET_ANOTHER_SET_TO_NULL(5, DO_NOTHING2("Remember the Vasa"), ptr)</string>
+// CHECK-NEXT:   <key>expansion</key><string>print ((void *)5);print ((void *)"Remember the Vasa");ptr =nullptr ;</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 int garbage_value;
 
@@ -450,8 +756,19 @@ void recursiveMacroUser() {
                // expected-warning at -1{{expression result unused}}
 }
 
-// CHECK: <key>name</key><string>value</string>
-// CHECK-NEXT: <key>expansion</key><string>garbage_</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>754</integer>
+// CHECK-NEXT:    <key>col</key><integer>7</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>value</string>
+// CHECK-NEXT:   <key>expansion</key><string>garbage_value </string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #define FOO(x) int foo() { return x; }
 #define APPLY_ZERO1(function) function(0)
@@ -459,8 +776,19 @@ void recursiveMacroUser() {
 APPLY_ZERO1(FOO)
 void useZeroApplier1() { (void)(1 / foo()); } // expected-warning{{Division by zero}}
 
-// CHECK: <key>name</key><string>APPLY_ZERO1</string>
-// CHECK-NEXT: <key>expansion</key><string>int foo() { return x; }(0)</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>776</integer>
+// CHECK-NEXT:    <key>col</key><integer>1</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>APPLY_ZERO1(FOO)</string>
+// CHECK-NEXT:   <key>expansion</key><string>int foo (){return 0;}</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #define BAR(x) int bar() { return x; }
 #define APPLY_ZERO2 BAR(0)
@@ -468,8 +796,19 @@ void useZeroApplier1() { (void)(1 / foo()); } // expected-warning{{Division by z
 APPLY_ZERO2
 void useZeroApplier2() { (void)(1 / bar()); } // expected-warning{{Division by zero}}
 
-// CHECK: <key>name</key><string>APPLY_ZERO2</string>
-// CHECK-NEXT: <key>expansion</key><string>int bar() { return 0; }</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>796</integer>
+// CHECK-NEXT:    <key>col</key><integer>1</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>APPLY_ZERO2</string>
+// CHECK-NEXT:   <key>expansion</key><string>int bar (){return 0;}</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 void foo(int &x, const char *str);
 
@@ -482,8 +821,20 @@ void mulitpleParamsResolveToVA_ARGS(void) {
   DISPATCH(x, "LF1M healer");
   (void)(10 / x); // expected-warning{{Division by zero}}
 }
-// CHECK: <key>name</key><string>DISPATCH</string>
-// CHECK-NEXT: <key>expansion</key><string>foo(x, "LF1M healer");x = 0;;</string>
+
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>821</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>DISPATCH(x, "LF1M healer")</string>
+// CHECK-NEXT:   <key>expansion</key><string>foo (x ,"LF1M healer");x =0;;</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 void variadicCFunction(int &x, const char *str, ...);
 
@@ -495,17 +846,40 @@ void concatVA_ARGS(void) {
   CONCAT_VA_ARGS(x, "You need to construct additional pylons.", 'c', 9);
   (void)(10 / x); // expected-warning{{Division by zero}}
 }
-// CHECK: <key>name</key><string>CONCAT_VA_ARGS</string>
-// CHECK-NEXT: <key>expansion</key><string>variadicCFunction(x, "You need to construct additional pylons.",'c', 9);x = 0;</string>
+
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>846</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>CONCAT_VA_ARGS(x, "You need to construct additional pylons.", 'c', 9)</string>
+// CHECK-NEXT:   <key>expansion</key><string>variadicCFunction (x ,"You need to construct additional pylons.",'c',9);x =0;</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 void concatVA_ARGSEmpty(void) {
   int x = 1;
   CONCAT_VA_ARGS(x, "You need to construct");
   (void)(10 / x); // expected-warning{{Division by zero}}
 }
-// FIXME: The comma shouldn't be present after the last argument.
-// CHECK: <key>name</key><string>CONCAT_VA_ARGS</string>
-// CHECK-NEXT: <key>expansion</key><string>variadicCFunction(x, "You need to construct",);x = 0;</string>
+
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>866</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>CONCAT_VA_ARGS(x, "You need to construct")</string>
+// CHECK-NEXT:   <key>expansion</key><string>variadicCFunction (x ,"You need to construct");x =0;</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 #define STRINGIFIED_VA_ARGS(i, fmt, ...) variadicCFunction(i, fmt, #__VA_ARGS__); \
   i = 0;
@@ -516,9 +890,19 @@ void stringifyVA_ARGS(void) {
   (void)(10 / x); // expected-warning{{Division by zero}}
 }
 
-// FIXME: Stringify and escape __VA_ARGS__ correctly.
-// CHECK: <key>name</key><string>STRINGIFIED_VA_ARGS</string>
-// CHECK-NEXT: <key>expansion</key><string>variadicCFunction(x, "Additional supply depots required.",  "'a'", 10);x = 0;</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>889</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>STRINGIFIED_VA_ARGS(x, "Additional supply depots required.", 'a', 10)</string>
+// CHECK-NEXT:   <key>expansion</key><string>variadicCFunction (x ,"Additional supply depots required.","'a', 10");x =0;</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 void stringifyVA_ARGSEmpty(void) {
   int x = 1;
@@ -526,9 +910,19 @@ void stringifyVA_ARGSEmpty(void) {
   (void)(10 / x); // expected-warning{{Division by zero}}
 }
 
-// FIXME: Stringify and escape __VA_ARGS__ correctly.
-// CHECK: <key>name</key><string>STRINGIFIED_VA_ARGS</string>
-// CHECK-NEXT: <key>expansion</key><string>variadicCFunction(x, "Additional supply depots required.", ")";x = 0;</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>909</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>STRINGIFIED_VA_ARGS(x, "Additional supply depots required.")</string>
+// CHECK-NEXT:   <key>expansion</key><string>variadicCFunction (x ,"Additional supply depots required.","");x =0;</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>
 
 // bz44493: Support GNU-style named variadic arguments in plister
 #define BZ44493_GNUVA(i, args...)  --(i);
@@ -541,5 +935,16 @@ int bz44493(void) {
   return 0;
 }
 
-// CHECK: <key>name</key><string>BZ44493_GNUVA</string>
-// CHECK-NEXT: <key>expansion</key><string>--(a);</string>
+// CHECK:      <key>macro_expansions</key>
+// CHECK-NEXT: <array>
+// CHECK-NEXT:  <dict>
+// CHECK-NEXT:   <key>location</key>
+// CHECK-NEXT:   <dict>
+// CHECK-NEXT:    <key>line</key><integer>933</integer>
+// CHECK-NEXT:    <key>col</key><integer>3</integer>
+// CHECK-NEXT:    <key>file</key><integer>0</integer>
+// CHECK-NEXT:   </dict>
+// CHECK-NEXT:   <key>name</key><string>BZ44493_GNUVA(a, "arg2")</string>
+// CHECK-NEXT:   <key>expansion</key><string>--(a );</string>
+// CHECK-NEXT:  </dict>
+// CHECK-NEXT: </array>


        


More information about the cfe-commits mailing list