[clang] 37c19f9 - [analyzer] UnixAPIMisuseChecker Get O_CREAT from preprocessor (#81855)

via cfe-commits cfe-commits at lists.llvm.org
Tue Feb 20 01:25:05 PST 2024


Author: Alejandro Álvarez Ayllón
Date: 2024-02-20T10:25:01+01:00
New Revision: 37c19f9a35c5adad009ad82c608b9ca11155ec06

URL: https://github.com/llvm/llvm-project/commit/37c19f9a35c5adad009ad82c608b9ca11155ec06
DIFF: https://github.com/llvm/llvm-project/commit/37c19f9a35c5adad009ad82c608b9ca11155ec06.diff

LOG: [analyzer] UnixAPIMisuseChecker Get O_CREAT from preprocessor (#81855)

Now calling `open` with the `O_CREAT` flag and no mode parameter will
raise an issue in any system that defines `O_CREAT`.

The value for this flag is obtained after the full source code has been
parsed, leveraging `checkASTDecl`.
Hence, any `#define` or `#undefine` of `O_CREAT` following an `open` may
alter the results. Nevertheless, since redefining reserved identifiers
is UB, this is probably ok.

Added: 
    clang/test/Analysis/unix-fns-o_creat.c

Modified: 
    clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp
    clang/test/Analysis/Inputs/expected-plists/unix-fns.c.plist
    clang/test/Analysis/unix-fns.c

Removed: 
    


################################################################################
diff  --git a/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp
index b05ce610067cfa..19f1ca2dc824c9 100644
--- a/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp
@@ -18,6 +18,7 @@
 #include "clang/StaticAnalyzer/Core/Checker.h"
 #include "clang/StaticAnalyzer/Core/CheckerManager.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerHelpers.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/StringExtras.h"
@@ -39,13 +40,18 @@ enum class OpenVariant {
 
 namespace {
 
-class UnixAPIMisuseChecker : public Checker< check::PreStmt<CallExpr> > {
+class UnixAPIMisuseChecker
+    : public Checker<check::PreStmt<CallExpr>,
+                     check::ASTDecl<TranslationUnitDecl>> {
   const BugType BT_open{this, "Improper use of 'open'", categories::UnixAPI};
   const BugType BT_pthreadOnce{this, "Improper use of 'pthread_once'",
                                categories::UnixAPI};
   mutable std::optional<uint64_t> Val_O_CREAT;
 
 public:
+  void checkASTDecl(const TranslationUnitDecl *TU, AnalysisManager &Mgr,
+                    BugReporter &BR) const;
+
   void checkPreStmt(const CallExpr *CE, CheckerContext &C) const;
 
   void CheckOpen(CheckerContext &C, const CallExpr *CE) const;
@@ -55,11 +61,8 @@ class UnixAPIMisuseChecker : public Checker< check::PreStmt<CallExpr> > {
   void CheckOpenVariant(CheckerContext &C,
                         const CallExpr *CE, OpenVariant Variant) const;
 
-  void ReportOpenBug(CheckerContext &C,
-                     ProgramStateRef State,
-                     const char *Msg,
+  void ReportOpenBug(CheckerContext &C, ProgramStateRef State, const char *Msg,
                      SourceRange SR) const;
-
 };
 
 class UnixAPIPortabilityChecker : public Checker< check::PreStmt<CallExpr> > {
@@ -90,7 +93,21 @@ class UnixAPIPortabilityChecker : public Checker< check::PreStmt<CallExpr> > {
                             const char *fn) const;
 };
 
-} //end anonymous namespace
+} // end anonymous namespace
+
+void UnixAPIMisuseChecker::checkASTDecl(const TranslationUnitDecl *TU,
+                                        AnalysisManager &Mgr,
+                                        BugReporter &) const {
+  // The definition of O_CREAT is platform specific.
+  // Try to get the macro value from the preprocessor.
+  Val_O_CREAT = tryExpandAsInteger("O_CREAT", Mgr.getPreprocessor());
+  // If we failed, fall-back to known values.
+  if (!Val_O_CREAT) {
+    if (TU->getASTContext().getTargetInfo().getTriple().getVendor() ==
+        llvm::Triple::Apple)
+      Val_O_CREAT = 0x0200;
+  }
+}
 
 //===----------------------------------------------------------------------===//
 // "open" (man 2 open)
@@ -204,19 +221,8 @@ void UnixAPIMisuseChecker::CheckOpenVariant(CheckerContext &C,
     return;
   }
 
-  // The definition of O_CREAT is platform specific.  We need a better way
-  // of querying this information from the checking environment.
   if (!Val_O_CREAT) {
-    if (C.getASTContext().getTargetInfo().getTriple().getVendor()
-                                                      == llvm::Triple::Apple)
-      Val_O_CREAT = 0x0200;
-    else {
-      // FIXME: We need a more general way of getting the O_CREAT value.
-      // We could possibly grovel through the preprocessor state, but
-      // that would require passing the Preprocessor object to the ExprEngine.
-      // See also: MallocChecker.cpp / M_ZERO.
-      return;
-    }
+    return;
   }
 
   // Now check if oflags has O_CREAT set.

diff  --git a/clang/test/Analysis/Inputs/expected-plists/unix-fns.c.plist b/clang/test/Analysis/Inputs/expected-plists/unix-fns.c.plist
index 2594f3b6d097d5..d7913cbc338fd0 100644
--- a/clang/test/Analysis/Inputs/expected-plists/unix-fns.c.plist
+++ b/clang/test/Analysis/Inputs/expected-plists/unix-fns.c.plist
@@ -16,12 +16,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>82</integer>
+           <key>line</key><integer>84</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>82</integer>
+           <key>line</key><integer>84</integer>
            <key>col</key><integer>5</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -29,12 +29,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>84</integer>
+           <key>line</key><integer>86</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>84</integer>
+           <key>line</key><integer>86</integer>
            <key>col</key><integer>4</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -50,12 +50,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>84</integer>
+           <key>line</key><integer>86</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>84</integer>
+           <key>line</key><integer>86</integer>
            <key>col</key><integer>4</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -63,12 +63,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>84</integer>
+           <key>line</key><integer>86</integer>
            <key>col</key><integer>7</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>84</integer>
+           <key>line</key><integer>86</integer>
            <key>col</key><integer>7</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -80,7 +80,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>84</integer>
+      <key>line</key><integer>86</integer>
       <key>col</key><integer>7</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -88,12 +88,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>84</integer>
+         <key>line</key><integer>86</integer>
          <key>col</key><integer>7</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>84</integer>
+         <key>line</key><integer>86</integer>
          <key>col</key><integer>9</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -113,12 +113,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>84</integer>
+           <key>line</key><integer>86</integer>
            <key>col</key><integer>7</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>84</integer>
+           <key>line</key><integer>86</integer>
            <key>col</key><integer>7</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -126,12 +126,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>87</integer>
+           <key>line</key><integer>89</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>87</integer>
+           <key>line</key><integer>89</integer>
            <key>col</key><integer>4</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -147,12 +147,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>87</integer>
+           <key>line</key><integer>89</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>87</integer>
+           <key>line</key><integer>89</integer>
            <key>col</key><integer>4</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -160,12 +160,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>87</integer>
+           <key>line</key><integer>89</integer>
            <key>col</key><integer>8</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>87</integer>
+           <key>line</key><integer>89</integer>
            <key>col</key><integer>11</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -177,7 +177,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>87</integer>
+      <key>line</key><integer>89</integer>
       <key>col</key><integer>8</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -185,12 +185,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>87</integer>
+         <key>line</key><integer>89</integer>
          <key>col</key><integer>19</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>87</integer>
+         <key>line</key><integer>89</integer>
          <key>col</key><integer>25</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -214,7 +214,7 @@
   <key>issue_hash_function_offset</key><string>6</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>87</integer>
+   <key>line</key><integer>89</integer>
    <key>col</key><integer>8</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -222,11 +222,11 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>81</integer>
-    <integer>82</integer>
     <integer>83</integer>
     <integer>84</integer>
-    <integer>87</integer>
+    <integer>85</integer>
+    <integer>86</integer>
+    <integer>89</integer>
    </array>
   </dict>
   </dict>
@@ -241,12 +241,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>93</integer>
+           <key>line</key><integer>95</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>93</integer>
+           <key>line</key><integer>95</integer>
            <key>col</key><integer>5</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -254,12 +254,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>95</integer>
+           <key>line</key><integer>97</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>95</integer>
+           <key>line</key><integer>97</integer>
            <key>col</key><integer>4</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -275,12 +275,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>95</integer>
+           <key>line</key><integer>97</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>95</integer>
+           <key>line</key><integer>97</integer>
            <key>col</key><integer>4</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -288,12 +288,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>95</integer>
+           <key>line</key><integer>97</integer>
            <key>col</key><integer>7</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>95</integer>
+           <key>line</key><integer>97</integer>
            <key>col</key><integer>7</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -305,7 +305,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>95</integer>
+      <key>line</key><integer>97</integer>
       <key>col</key><integer>7</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -313,12 +313,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>95</integer>
+         <key>line</key><integer>97</integer>
          <key>col</key><integer>7</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>95</integer>
+         <key>line</key><integer>97</integer>
          <key>col</key><integer>9</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -338,12 +338,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>95</integer>
+           <key>line</key><integer>97</integer>
            <key>col</key><integer>7</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>95</integer>
+           <key>line</key><integer>97</integer>
            <key>col</key><integer>7</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -351,12 +351,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>98</integer>
+           <key>line</key><integer>100</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>98</integer>
+           <key>line</key><integer>100</integer>
            <key>col</key><integer>4</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -372,12 +372,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>98</integer>
+           <key>line</key><integer>100</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>98</integer>
+           <key>line</key><integer>100</integer>
            <key>col</key><integer>4</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -385,12 +385,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>98</integer>
+           <key>line</key><integer>100</integer>
            <key>col</key><integer>8</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>98</integer>
+           <key>line</key><integer>100</integer>
            <key>col</key><integer>13</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -402,7 +402,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>98</integer>
+      <key>line</key><integer>100</integer>
       <key>col</key><integer>8</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -410,12 +410,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>98</integer>
+         <key>line</key><integer>100</integer>
          <key>col</key><integer>44</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>98</integer>
+         <key>line</key><integer>100</integer>
          <key>col</key><integer>50</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -439,7 +439,7 @@
   <key>issue_hash_function_offset</key><string>6</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>98</integer>
+   <key>line</key><integer>100</integer>
    <key>col</key><integer>8</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -447,11 +447,11 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>92</integer>
-    <integer>93</integer>
     <integer>94</integer>
     <integer>95</integer>
-    <integer>98</integer>
+    <integer>96</integer>
+    <integer>97</integer>
+    <integer>100</integer>
    </array>
   </dict>
   </dict>
@@ -466,12 +466,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>104</integer>
+           <key>line</key><integer>106</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>104</integer>
+           <key>line</key><integer>106</integer>
            <key>col</key><integer>17</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -479,12 +479,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>105</integer>
+           <key>line</key><integer>107</integer>
            <key>col</key><integer>8</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>105</integer>
+           <key>line</key><integer>107</integer>
            <key>col</key><integer>9</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -500,12 +500,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>105</integer>
+           <key>line</key><integer>107</integer>
            <key>col</key><integer>8</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>105</integer>
+           <key>line</key><integer>107</integer>
            <key>col</key><integer>9</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -513,12 +513,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>105</integer>
+           <key>line</key><integer>107</integer>
            <key>col</key><integer>52</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>105</integer>
+           <key>line</key><integer>107</integer>
            <key>col</key><integer>64</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -530,7 +530,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>105</integer>
+      <key>line</key><integer>107</integer>
       <key>col</key><integer>52</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -538,12 +538,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>105</integer>
+         <key>line</key><integer>107</integer>
          <key>col</key><integer>66</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>105</integer>
+         <key>line</key><integer>107</integer>
          <key>col</key><integer>72</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -567,7 +567,7 @@
   <key>issue_hash_function_offset</key><string>2</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>105</integer>
+   <key>line</key><integer>107</integer>
    <key>col</key><integer>52</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -575,9 +575,9 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>103</integer>
-    <integer>104</integer>
     <integer>105</integer>
+    <integer>106</integer>
+    <integer>107</integer>
    </array>
   </dict>
   </dict>
@@ -592,12 +592,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>115</integer>
+           <key>line</key><integer>117</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>115</integer>
+           <key>line</key><integer>117</integer>
            <key>col</key><integer>16</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -605,12 +605,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>116</integer>
+           <key>line</key><integer>118</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>116</integer>
+           <key>line</key><integer>118</integer>
            <key>col</key><integer>14</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -622,7 +622,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>116</integer>
+      <key>line</key><integer>118</integer>
       <key>col</key><integer>3</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -630,12 +630,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>116</integer>
+         <key>line</key><integer>118</integer>
          <key>col</key><integer>16</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>116</integer>
+         <key>line</key><integer>118</integer>
          <key>col</key><integer>20</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -659,7 +659,7 @@
   <key>issue_hash_function_offset</key><string>2</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>116</integer>
+   <key>line</key><integer>118</integer>
    <key>col</key><integer>3</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -667,9 +667,9 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>114</integer>
-    <integer>115</integer>
     <integer>116</integer>
+    <integer>117</integer>
+    <integer>118</integer>
    </array>
   </dict>
   </dict>
@@ -684,12 +684,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>125</integer>
+           <key>line</key><integer>127</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>125</integer>
+           <key>line</key><integer>127</integer>
            <key>col</key><integer>6</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -697,12 +697,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>125</integer>
+           <key>line</key><integer>127</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>125</integer>
+           <key>line</key><integer>127</integer>
            <key>col</key><integer>20</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -714,7 +714,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>125</integer>
+      <key>line</key><integer>127</integer>
       <key>col</key><integer>15</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -722,12 +722,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>125</integer>
+         <key>line</key><integer>127</integer>
          <key>col</key><integer>22</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>125</integer>
+         <key>line</key><integer>127</integer>
          <key>col</key><integer>22</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -751,7 +751,7 @@
   <key>issue_hash_function_offset</key><string>1</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>125</integer>
+   <key>line</key><integer>127</integer>
    <key>col</key><integer>15</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -759,8 +759,8 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>124</integer>
-    <integer>125</integer>
+    <integer>126</integer>
+    <integer>127</integer>
    </array>
   </dict>
   </dict>
@@ -775,12 +775,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>137</integer>
+           <key>line</key><integer>139</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>137</integer>
+           <key>line</key><integer>139</integer>
            <key>col</key><integer>6</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -788,12 +788,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>137</integer>
+           <key>line</key><integer>139</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>137</integer>
+           <key>line</key><integer>139</integer>
            <key>col</key><integer>20</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -805,7 +805,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>137</integer>
+      <key>line</key><integer>139</integer>
       <key>col</key><integer>15</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -813,12 +813,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>137</integer>
+         <key>line</key><integer>139</integer>
          <key>col</key><integer>22</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>137</integer>
+         <key>line</key><integer>139</integer>
          <key>col</key><integer>22</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -842,7 +842,7 @@
   <key>issue_hash_function_offset</key><string>1</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>137</integer>
+   <key>line</key><integer>139</integer>
    <key>col</key><integer>15</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -850,8 +850,8 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>136</integer>
-    <integer>137</integer>
+    <integer>138</integer>
+    <integer>139</integer>
    </array>
   </dict>
   </dict>
@@ -866,12 +866,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>143</integer>
+           <key>line</key><integer>145</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>143</integer>
+           <key>line</key><integer>145</integer>
            <key>col</key><integer>6</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -879,12 +879,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>143</integer>
+           <key>line</key><integer>145</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>143</integer>
+           <key>line</key><integer>145</integer>
            <key>col</key><integer>20</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -896,7 +896,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>143</integer>
+      <key>line</key><integer>145</integer>
       <key>col</key><integer>15</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -904,12 +904,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>143</integer>
+         <key>line</key><integer>145</integer>
          <key>col</key><integer>26</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>143</integer>
+         <key>line</key><integer>145</integer>
          <key>col</key><integer>26</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -933,7 +933,7 @@
   <key>issue_hash_function_offset</key><string>1</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>143</integer>
+   <key>line</key><integer>145</integer>
    <key>col</key><integer>15</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -941,8 +941,8 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>142</integer>
-    <integer>143</integer>
+    <integer>144</integer>
+    <integer>145</integer>
    </array>
   </dict>
   </dict>
@@ -957,12 +957,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>155</integer>
+           <key>line</key><integer>157</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>155</integer>
+           <key>line</key><integer>157</integer>
            <key>col</key><integer>6</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -970,12 +970,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>155</integer>
+           <key>line</key><integer>157</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>155</integer>
+           <key>line</key><integer>157</integer>
            <key>col</key><integer>21</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -987,7 +987,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>155</integer>
+      <key>line</key><integer>157</integer>
       <key>col</key><integer>15</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -995,12 +995,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>155</integer>
+         <key>line</key><integer>157</integer>
          <key>col</key><integer>28</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>155</integer>
+         <key>line</key><integer>157</integer>
          <key>col</key><integer>28</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -1024,7 +1024,7 @@
   <key>issue_hash_function_offset</key><string>1</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>155</integer>
+   <key>line</key><integer>157</integer>
    <key>col</key><integer>15</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -1032,8 +1032,8 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>154</integer>
-    <integer>155</integer>
+    <integer>156</integer>
+    <integer>157</integer>
    </array>
   </dict>
   </dict>
@@ -1048,12 +1048,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>161</integer>
+           <key>line</key><integer>163</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>161</integer>
+           <key>line</key><integer>163</integer>
            <key>col</key><integer>6</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1061,12 +1061,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>161</integer>
+           <key>line</key><integer>163</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>161</integer>
+           <key>line</key><integer>163</integer>
            <key>col</key><integer>22</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1078,7 +1078,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>161</integer>
+      <key>line</key><integer>163</integer>
       <key>col</key><integer>15</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -1086,12 +1086,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>161</integer>
+         <key>line</key><integer>163</integer>
          <key>col</key><integer>29</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>161</integer>
+         <key>line</key><integer>163</integer>
          <key>col</key><integer>29</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -1115,7 +1115,7 @@
   <key>issue_hash_function_offset</key><string>1</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>161</integer>
+   <key>line</key><integer>163</integer>
    <key>col</key><integer>15</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -1123,8 +1123,8 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>160</integer>
-    <integer>161</integer>
+    <integer>162</integer>
+    <integer>163</integer>
    </array>
   </dict>
   </dict>
@@ -1139,12 +1139,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>179</integer>
+           <key>line</key><integer>181</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>179</integer>
+           <key>line</key><integer>181</integer>
            <key>col</key><integer>6</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1152,12 +1152,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>179</integer>
+           <key>line</key><integer>181</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>179</integer>
+           <key>line</key><integer>181</integer>
            <key>col</key><integer>20</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1169,7 +1169,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>179</integer>
+      <key>line</key><integer>181</integer>
       <key>col</key><integer>15</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -1177,12 +1177,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>179</integer>
+         <key>line</key><integer>181</integer>
          <key>col</key><integer>22</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>179</integer>
+         <key>line</key><integer>181</integer>
          <key>col</key><integer>22</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -1206,7 +1206,7 @@
   <key>issue_hash_function_offset</key><string>1</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>179</integer>
+   <key>line</key><integer>181</integer>
    <key>col</key><integer>15</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -1214,8 +1214,8 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>178</integer>
-    <integer>179</integer>
+    <integer>180</integer>
+    <integer>181</integer>
    </array>
   </dict>
   </dict>
@@ -1230,12 +1230,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>191</integer>
+           <key>line</key><integer>193</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>191</integer>
+           <key>line</key><integer>193</integer>
            <key>col</key><integer>6</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1243,12 +1243,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>191</integer>
+           <key>line</key><integer>193</integer>
            <key>col</key><integer>16</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>191</integer>
+           <key>line</key><integer>193</integer>
            <key>col</key><integer>31</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1260,7 +1260,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>191</integer>
+      <key>line</key><integer>193</integer>
       <key>col</key><integer>16</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -1268,12 +1268,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>191</integer>
+         <key>line</key><integer>193</integer>
          <key>col</key><integer>33</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>191</integer>
+         <key>line</key><integer>193</integer>
          <key>col</key><integer>33</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -1297,7 +1297,7 @@
   <key>issue_hash_function_offset</key><string>1</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>191</integer>
+   <key>line</key><integer>193</integer>
    <key>col</key><integer>16</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -1305,8 +1305,8 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>190</integer>
-    <integer>191</integer>
+    <integer>192</integer>
+    <integer>193</integer>
    </array>
   </dict>
   </dict>
@@ -1321,12 +1321,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>203</integer>
+           <key>line</key><integer>205</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>203</integer>
+           <key>line</key><integer>205</integer>
            <key>col</key><integer>6</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1334,12 +1334,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>203</integer>
+           <key>line</key><integer>205</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>203</integer>
+           <key>line</key><integer>205</integer>
            <key>col</key><integer>20</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1351,7 +1351,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>203</integer>
+      <key>line</key><integer>205</integer>
       <key>col</key><integer>15</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -1359,12 +1359,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>203</integer>
+         <key>line</key><integer>205</integer>
          <key>col</key><integer>22</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>203</integer>
+         <key>line</key><integer>205</integer>
          <key>col</key><integer>22</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -1388,7 +1388,7 @@
   <key>issue_hash_function_offset</key><string>1</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>203</integer>
+   <key>line</key><integer>205</integer>
    <key>col</key><integer>15</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -1396,8 +1396,8 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>202</integer>
-    <integer>203</integer>
+    <integer>204</integer>
+    <integer>205</integer>
    </array>
   </dict>
   </dict>
@@ -1412,12 +1412,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>216</integer>
+           <key>line</key><integer>218</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>216</integer>
+           <key>line</key><integer>218</integer>
            <key>col</key><integer>17</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1425,12 +1425,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>217</integer>
+           <key>line</key><integer>219</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>217</integer>
+           <key>line</key><integer>219</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1442,7 +1442,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>217</integer>
+      <key>line</key><integer>219</integer>
       <key>col</key><integer>3</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -1450,12 +1450,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>217</integer>
+         <key>line</key><integer>219</integer>
          <key>col</key><integer>17</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>217</integer>
+         <key>line</key><integer>219</integer>
          <key>col</key><integer>21</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -1479,7 +1479,7 @@
   <key>issue_hash_function_offset</key><string>2</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>217</integer>
+   <key>line</key><integer>219</integer>
    <key>col</key><integer>3</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -1487,9 +1487,9 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>215</integer>
-    <integer>216</integer>
     <integer>217</integer>
+    <integer>218</integer>
+    <integer>219</integer>
    </array>
   </dict>
   </dict>
@@ -1500,7 +1500,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>222</integer>
+      <key>line</key><integer>224</integer>
       <key>col</key><integer>3</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -1508,12 +1508,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>222</integer>
+         <key>line</key><integer>224</integer>
          <key>col</key><integer>3</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>222</integer>
+         <key>line</key><integer>224</integer>
          <key>col</key><integer>8</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -1533,12 +1533,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>222</integer>
+           <key>line</key><integer>224</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>222</integer>
+           <key>line</key><integer>224</integer>
            <key>col</key><integer>5</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1546,12 +1546,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>223</integer>
+           <key>line</key><integer>225</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>223</integer>
+           <key>line</key><integer>225</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1567,12 +1567,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>223</integer>
+           <key>line</key><integer>225</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>223</integer>
+           <key>line</key><integer>225</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1580,12 +1580,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>223</integer>
+           <key>line</key><integer>225</integer>
            <key>col</key><integer>24</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>223</integer>
+           <key>line</key><integer>225</integer>
            <key>col</key><integer>24</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1597,7 +1597,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>223</integer>
+      <key>line</key><integer>225</integer>
       <key>col</key><integer>24</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -1605,12 +1605,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>223</integer>
+         <key>line</key><integer>225</integer>
          <key>col</key><integer>24</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>227</integer>
+         <key>line</key><integer>229</integer>
          <key>col</key><integer>3</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -1630,12 +1630,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>223</integer>
+           <key>line</key><integer>225</integer>
            <key>col</key><integer>24</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>223</integer>
+           <key>line</key><integer>225</integer>
            <key>col</key><integer>24</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1643,12 +1643,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>223</integer>
+           <key>line</key><integer>225</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>223</integer>
+           <key>line</key><integer>225</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1660,7 +1660,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>223</integer>
+      <key>line</key><integer>225</integer>
       <key>col</key><integer>3</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -1668,12 +1668,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>223</integer>
+         <key>line</key><integer>225</integer>
          <key>col</key><integer>3</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>227</integer>
+         <key>line</key><integer>229</integer>
          <key>col</key><integer>4</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -1689,7 +1689,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>223</integer>
+      <key>line</key><integer>225</integer>
       <key>col</key><integer>3</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -1697,12 +1697,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>223</integer>
+         <key>line</key><integer>225</integer>
          <key>col</key><integer>3</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>227</integer>
+         <key>line</key><integer>229</integer>
          <key>col</key><integer>4</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -1718,7 +1718,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>223</integer>
+      <key>line</key><integer>225</integer>
       <key>col</key><integer>24</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -1736,12 +1736,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>223</integer>
+           <key>line</key><integer>225</integer>
            <key>col</key><integer>24</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>223</integer>
+           <key>line</key><integer>225</integer>
            <key>col</key><integer>24</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1749,12 +1749,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>224</integer>
+           <key>line</key><integer>226</integer>
            <key>col</key><integer>4</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>224</integer>
+           <key>line</key><integer>226</integer>
            <key>col</key><integer>5</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1770,12 +1770,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>224</integer>
+           <key>line</key><integer>226</integer>
            <key>col</key><integer>4</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>224</integer>
+           <key>line</key><integer>226</integer>
            <key>col</key><integer>5</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1783,12 +1783,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>224</integer>
+           <key>line</key><integer>226</integer>
            <key>col</key><integer>8</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>224</integer>
+           <key>line</key><integer>226</integer>
            <key>col</key><integer>8</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1800,7 +1800,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>224</integer>
+      <key>line</key><integer>226</integer>
       <key>col</key><integer>8</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -1808,12 +1808,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>224</integer>
+         <key>line</key><integer>226</integer>
          <key>col</key><integer>8</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>224</integer>
+         <key>line</key><integer>226</integer>
          <key>col</key><integer>8</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -1833,12 +1833,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>224</integer>
+           <key>line</key><integer>226</integer>
            <key>col</key><integer>8</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>224</integer>
+           <key>line</key><integer>226</integer>
            <key>col</key><integer>8</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1846,12 +1846,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>225</integer>
+           <key>line</key><integer>227</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>225</integer>
+           <key>line</key><integer>227</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1867,12 +1867,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>225</integer>
+           <key>line</key><integer>227</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>225</integer>
+           <key>line</key><integer>227</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1880,12 +1880,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>225</integer>
+           <key>line</key><integer>227</integer>
            <key>col</key><integer>6</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>225</integer>
+           <key>line</key><integer>227</integer>
            <key>col</key><integer>6</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1897,7 +1897,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>225</integer>
+      <key>line</key><integer>227</integer>
       <key>col</key><integer>6</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -1905,12 +1905,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>225</integer>
+         <key>line</key><integer>227</integer>
          <key>col</key><integer>4</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>225</integer>
+         <key>line</key><integer>227</integer>
          <key>col</key><integer>4</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -1931,7 +1931,7 @@
    <key>issue_hash_content_of_line_in_context</key><string>5d3f4c433004c7a6d4a06aa30cc3ea85</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>225</integer>
+   <key>line</key><integer>227</integer>
    <key>col</key><integer>6</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -1939,12 +1939,12 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>40</integer>
-    <integer>221</integer>
-    <integer>222</integer>
+    <integer>42</integer>
     <integer>223</integer>
     <integer>224</integer>
     <integer>225</integer>
+    <integer>226</integer>
+    <integer>227</integer>
    </array>
   </dict>
   </dict>
@@ -1959,12 +1959,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>232</integer>
+           <key>line</key><integer>234</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>232</integer>
+           <key>line</key><integer>234</integer>
            <key>col</key><integer>8</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1972,12 +1972,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>233</integer>
+           <key>line</key><integer>235</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>233</integer>
+           <key>line</key><integer>235</integer>
            <key>col</key><integer>5</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -1989,7 +1989,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>233</integer>
+      <key>line</key><integer>235</integer>
       <key>col</key><integer>3</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -1997,12 +1997,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>233</integer>
+         <key>line</key><integer>235</integer>
          <key>col</key><integer>3</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>233</integer>
+         <key>line</key><integer>235</integer>
          <key>col</key><integer>8</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -2022,12 +2022,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>233</integer>
+           <key>line</key><integer>235</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>233</integer>
+           <key>line</key><integer>235</integer>
            <key>col</key><integer>5</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2035,12 +2035,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>234</integer>
+           <key>line</key><integer>236</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>234</integer>
+           <key>line</key><integer>236</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2056,12 +2056,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>234</integer>
+           <key>line</key><integer>236</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>234</integer>
+           <key>line</key><integer>236</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2069,12 +2069,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>234</integer>
+           <key>line</key><integer>236</integer>
            <key>col</key><integer>24</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>234</integer>
+           <key>line</key><integer>236</integer>
            <key>col</key><integer>24</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2086,7 +2086,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>234</integer>
+      <key>line</key><integer>236</integer>
       <key>col</key><integer>24</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2094,12 +2094,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>234</integer>
+         <key>line</key><integer>236</integer>
          <key>col</key><integer>24</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>236</integer>
+         <key>line</key><integer>238</integer>
          <key>col</key><integer>3</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -2119,12 +2119,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>234</integer>
+           <key>line</key><integer>236</integer>
            <key>col</key><integer>24</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>234</integer>
+           <key>line</key><integer>236</integer>
            <key>col</key><integer>24</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2132,12 +2132,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>234</integer>
+           <key>line</key><integer>236</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>234</integer>
+           <key>line</key><integer>236</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2149,7 +2149,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>234</integer>
+      <key>line</key><integer>236</integer>
       <key>col</key><integer>3</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2157,12 +2157,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>234</integer>
+         <key>line</key><integer>236</integer>
          <key>col</key><integer>3</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>236</integer>
+         <key>line</key><integer>238</integer>
          <key>col</key><integer>4</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -2178,7 +2178,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>52</integer>
+      <key>line</key><integer>54</integer>
       <key>col</key><integer>1</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2196,12 +2196,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>52</integer>
+           <key>line</key><integer>54</integer>
            <key>col</key><integer>1</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>52</integer>
+           <key>line</key><integer>54</integer>
            <key>col</key><integer>6</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2209,12 +2209,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>60</integer>
+           <key>line</key><integer>62</integer>
            <key>col</key><integer>2</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>60</integer>
+           <key>line</key><integer>62</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2230,12 +2230,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>60</integer>
+           <key>line</key><integer>62</integer>
            <key>col</key><integer>2</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>60</integer>
+           <key>line</key><integer>62</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2243,12 +2243,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>61</integer>
+           <key>line</key><integer>63</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>61</integer>
+           <key>line</key><integer>63</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2260,7 +2260,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>61</integer>
+      <key>line</key><integer>63</integer>
       <key>col</key><integer>3</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2268,12 +2268,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>61</integer>
+         <key>line</key><integer>63</integer>
          <key>col</key><integer>3</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>61</integer>
+         <key>line</key><integer>63</integer>
          <key>col</key><integer>33</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -2289,7 +2289,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>61</integer>
+      <key>line</key><integer>63</integer>
       <key>col</key><integer>3</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2297,12 +2297,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>61</integer>
+         <key>line</key><integer>63</integer>
          <key>col</key><integer>3</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>61</integer>
+         <key>line</key><integer>63</integer>
          <key>col</key><integer>33</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -2318,7 +2318,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>234</integer>
+      <key>line</key><integer>236</integer>
       <key>col</key><integer>24</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2336,12 +2336,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>234</integer>
+           <key>line</key><integer>236</integer>
            <key>col</key><integer>24</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>234</integer>
+           <key>line</key><integer>236</integer>
            <key>col</key><integer>24</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2349,12 +2349,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>235</integer>
+           <key>line</key><integer>237</integer>
            <key>col</key><integer>4</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>235</integer>
+           <key>line</key><integer>237</integer>
            <key>col</key><integer>4</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2370,12 +2370,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>235</integer>
+           <key>line</key><integer>237</integer>
            <key>col</key><integer>4</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>235</integer>
+           <key>line</key><integer>237</integer>
            <key>col</key><integer>4</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2383,12 +2383,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>235</integer>
+           <key>line</key><integer>237</integer>
            <key>col</key><integer>7</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>235</integer>
+           <key>line</key><integer>237</integer>
            <key>col</key><integer>7</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2400,7 +2400,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>235</integer>
+      <key>line</key><integer>237</integer>
       <key>col</key><integer>7</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2408,12 +2408,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>235</integer>
+         <key>line</key><integer>237</integer>
          <key>col</key><integer>5</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>235</integer>
+         <key>line</key><integer>237</integer>
          <key>col</key><integer>5</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -2434,7 +2434,7 @@
    <key>issue_hash_content_of_line_in_context</key><string>265c4fd608dafee211bfa93d21c28866</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>235</integer>
+   <key>line</key><integer>237</integer>
    <key>col</key><integer>7</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -2442,13 +2442,11 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>44</integer>
-    <integer>45</integer>
     <integer>46</integer>
     <integer>47</integer>
     <integer>48</integer>
-    <integer>52</integer>
-    <integer>53</integer>
+    <integer>49</integer>
+    <integer>50</integer>
     <integer>54</integer>
     <integer>55</integer>
     <integer>56</integer>
@@ -2457,11 +2455,13 @@
     <integer>59</integer>
     <integer>60</integer>
     <integer>61</integer>
-    <integer>231</integer>
-    <integer>232</integer>
+    <integer>62</integer>
+    <integer>63</integer>
     <integer>233</integer>
     <integer>234</integer>
     <integer>235</integer>
+    <integer>236</integer>
+    <integer>237</integer>
    </array>
   </dict>
   </dict>
@@ -2476,12 +2476,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>241</integer>
+           <key>line</key><integer>243</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>241</integer>
+           <key>line</key><integer>243</integer>
            <key>col</key><integer>8</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2489,12 +2489,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>243</integer>
+           <key>line</key><integer>245</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>243</integer>
+           <key>line</key><integer>245</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2506,7 +2506,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>243</integer>
+      <key>line</key><integer>245</integer>
       <key>col</key><integer>3</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2514,12 +2514,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>243</integer>
+         <key>line</key><integer>245</integer>
          <key>col</key><integer>3</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>245</integer>
+         <key>line</key><integer>247</integer>
          <key>col</key><integer>4</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -2535,7 +2535,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>52</integer>
+      <key>line</key><integer>54</integer>
       <key>col</key><integer>1</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2553,12 +2553,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>52</integer>
+           <key>line</key><integer>54</integer>
            <key>col</key><integer>1</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>52</integer>
+           <key>line</key><integer>54</integer>
            <key>col</key><integer>6</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2566,12 +2566,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>60</integer>
+           <key>line</key><integer>62</integer>
            <key>col</key><integer>2</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>60</integer>
+           <key>line</key><integer>62</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2587,12 +2587,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>60</integer>
+           <key>line</key><integer>62</integer>
            <key>col</key><integer>2</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>60</integer>
+           <key>line</key><integer>62</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2600,12 +2600,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>61</integer>
+           <key>line</key><integer>63</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>61</integer>
+           <key>line</key><integer>63</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2617,7 +2617,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>61</integer>
+      <key>line</key><integer>63</integer>
       <key>col</key><integer>3</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2625,12 +2625,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>61</integer>
+         <key>line</key><integer>63</integer>
          <key>col</key><integer>3</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>61</integer>
+         <key>line</key><integer>63</integer>
          <key>col</key><integer>33</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -2646,7 +2646,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>61</integer>
+      <key>line</key><integer>63</integer>
       <key>col</key><integer>3</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2654,12 +2654,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>61</integer>
+         <key>line</key><integer>63</integer>
          <key>col</key><integer>3</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>61</integer>
+         <key>line</key><integer>63</integer>
          <key>col</key><integer>33</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -2675,7 +2675,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>243</integer>
+      <key>line</key><integer>245</integer>
       <key>col</key><integer>24</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2693,12 +2693,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>243</integer>
+           <key>line</key><integer>245</integer>
            <key>col</key><integer>24</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>243</integer>
+           <key>line</key><integer>245</integer>
            <key>col</key><integer>24</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2706,12 +2706,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>244</integer>
+           <key>line</key><integer>246</integer>
            <key>col</key><integer>7</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>244</integer>
+           <key>line</key><integer>246</integer>
            <key>col</key><integer>7</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2723,7 +2723,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>244</integer>
+      <key>line</key><integer>246</integer>
       <key>col</key><integer>7</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2731,12 +2731,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>244</integer>
+         <key>line</key><integer>246</integer>
          <key>col</key><integer>7</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>244</integer>
+         <key>line</key><integer>246</integer>
          <key>col</key><integer>11</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -2752,7 +2752,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>61</integer>
+      <key>line</key><integer>63</integer>
       <key>col</key><integer>3</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2760,12 +2760,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>61</integer>
+         <key>line</key><integer>63</integer>
          <key>col</key><integer>3</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>61</integer>
+         <key>line</key><integer>63</integer>
          <key>col</key><integer>33</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -2781,7 +2781,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>61</integer>
+      <key>line</key><integer>63</integer>
       <key>col</key><integer>3</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2789,12 +2789,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>61</integer>
+         <key>line</key><integer>63</integer>
          <key>col</key><integer>3</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>61</integer>
+         <key>line</key><integer>63</integer>
          <key>col</key><integer>33</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -2814,12 +2814,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>61</integer>
+           <key>line</key><integer>63</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>61</integer>
+           <key>line</key><integer>63</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2827,12 +2827,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>65</integer>
+           <key>line</key><integer>67</integer>
            <key>col</key><integer>2</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>65</integer>
+           <key>line</key><integer>67</integer>
            <key>col</key><integer>17</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2844,7 +2844,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>243</integer>
+      <key>line</key><integer>245</integer>
       <key>col</key><integer>3</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2852,12 +2852,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>243</integer>
+         <key>line</key><integer>245</integer>
          <key>col</key><integer>3</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>245</integer>
+         <key>line</key><integer>247</integer>
          <key>col</key><integer>4</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -2877,12 +2877,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>243</integer>
+           <key>line</key><integer>245</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>243</integer>
+           <key>line</key><integer>245</integer>
            <key>col</key><integer>15</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2890,12 +2890,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>247</integer>
+           <key>line</key><integer>249</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>247</integer>
+           <key>line</key><integer>249</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2911,12 +2911,12 @@
         <key>start</key>
          <array>
           <dict>
-           <key>line</key><integer>247</integer>
+           <key>line</key><integer>249</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>247</integer>
+           <key>line</key><integer>249</integer>
            <key>col</key><integer>3</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2924,12 +2924,12 @@
         <key>end</key>
          <array>
           <dict>
-           <key>line</key><integer>247</integer>
+           <key>line</key><integer>249</integer>
            <key>col</key><integer>6</integer>
            <key>file</key><integer>0</integer>
           </dict>
           <dict>
-           <key>line</key><integer>247</integer>
+           <key>line</key><integer>249</integer>
            <key>col</key><integer>6</integer>
            <key>file</key><integer>0</integer>
           </dict>
@@ -2941,7 +2941,7 @@
      <key>kind</key><string>event</string>
      <key>location</key>
      <dict>
-      <key>line</key><integer>247</integer>
+      <key>line</key><integer>249</integer>
       <key>col</key><integer>6</integer>
       <key>file</key><integer>0</integer>
      </dict>
@@ -2949,12 +2949,12 @@
      <array>
        <array>
         <dict>
-         <key>line</key><integer>247</integer>
+         <key>line</key><integer>249</integer>
          <key>col</key><integer>4</integer>
          <key>file</key><integer>0</integer>
         </dict>
         <dict>
-         <key>line</key><integer>247</integer>
+         <key>line</key><integer>249</integer>
          <key>col</key><integer>4</integer>
          <key>file</key><integer>0</integer>
         </dict>
@@ -2978,7 +2978,7 @@
   <key>issue_hash_function_offset</key><string>7</string>
   <key>location</key>
   <dict>
-   <key>line</key><integer>247</integer>
+   <key>line</key><integer>249</integer>
    <key>col</key><integer>6</integer>
    <key>file</key><integer>0</integer>
   </dict>
@@ -2986,13 +2986,11 @@
   <dict>
    <key>0</key>
    <array>
-    <integer>44</integer>
-    <integer>45</integer>
     <integer>46</integer>
     <integer>47</integer>
     <integer>48</integer>
-    <integer>52</integer>
-    <integer>53</integer>
+    <integer>49</integer>
+    <integer>50</integer>
     <integer>54</integer>
     <integer>55</integer>
     <integer>56</integer>
@@ -3001,13 +2999,15 @@
     <integer>59</integer>
     <integer>60</integer>
     <integer>61</integer>
-    <integer>65</integer>
-    <integer>240</integer>
-    <integer>241</integer>
+    <integer>62</integer>
+    <integer>63</integer>
+    <integer>67</integer>
     <integer>242</integer>
     <integer>243</integer>
     <integer>244</integer>
-    <integer>247</integer>
+    <integer>245</integer>
+    <integer>246</integer>
+    <integer>249</integer>
    </array>
   </dict>
   </dict>

diff  --git a/clang/test/Analysis/unix-fns-o_creat.c b/clang/test/Analysis/unix-fns-o_creat.c
new file mode 100644
index 00000000000000..76df3851cfc9cb
--- /dev/null
+++ b/clang/test/Analysis/unix-fns-o_creat.c
@@ -0,0 +1,39 @@
+// RUN: %clang_analyze_cc1 -verify -analyzer-checker=core,unix.API -analyzer-output=text %s
+
+// Verify that the UnixAPIChecker finds the missing mode value regardless
+// of the particular values of these macros, particularly O_CREAT.
+#define O_RDONLY  0x2000
+#define O_WRONLY  0x8000
+#define O_CREAT   0x0002
+
+extern int open(const char *path, int flags, ...);
+
+void missing_mode_1(const char *path) {
+  (void)open(path, O_CREAT); // expected-warning{{Call to 'open' requires a 3rd argument when the 'O_CREAT' flag is set}} \
+                                expected-note{{Call to 'open' requires a 3rd argument when the 'O_CREAT' flag is set}}
+}
+
+extern int some_flag;
+
+void missing_mode_2(const char *path) {
+  int mode = O_WRONLY;
+  if (some_flag) { // expected-note {{Assuming 'some_flag' is not equal to 0}} \
+                     expected-note {{Taking true branch}}
+    mode |= O_CREAT;
+  }
+  (void)open(path, mode); // expected-warning{{Call to 'open' requires a 3rd argument when the 'O_CREAT' flag is set}} \
+                             expected-note{{Call to 'open' requires a 3rd argument when the 'O_CREAT' flag is set}}
+}
+
+void no_creat(const char* path) {
+  int mode = O_RDONLY;
+  (void)open(path, mode); // ok
+}
+
+void mode_is_there(const char *path) {
+  int mode = O_WRONLY;
+  if (some_flag) {
+    mode |= O_CREAT;
+  }
+  (void)open(path, mode, 0770); // ok
+}

diff  --git a/clang/test/Analysis/unix-fns.c b/clang/test/Analysis/unix-fns.c
index f23bc6e17740c9..77894285bcb69c 100644
--- a/clang/test/Analysis/unix-fns.c
+++ b/clang/test/Analysis/unix-fns.c
@@ -1,5 +1,7 @@
 // RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin10 -analyzer-checker=core,unix.API,osx.API,optin.portability %s -analyzer-output=plist -analyzer-config faux-bodies=true  -fblocks -verify -o %t.plist
 // RUN: %normalize_plist <%t.plist | 
diff  -ub %S/Inputs/expected-plists/unix-fns.c.plist -
+// RUN: %clang_analyze_cc1 -triple x86_64-unknown-linux -analyzer-checker=core,unix.API,osx.API,optin.portability %s -analyzer-output=plist -analyzer-config faux-bodies=true  -fblocks -verify -o %t.plist
+// RUN: %normalize_plist <%t.plist | 
diff  -ub %S/Inputs/expected-plists/unix-fns.c.plist -
 // RUN: mkdir -p %t.dir
 // RUN: %clang_analyze_cc1 -analyzer-checker=core,unix.API,osx.API,optin.portability -analyzer-output=html -analyzer-config faux-bodies=true -fblocks -o %t.dir %s
 // RUN: rm -fR %t.dir


        


More information about the cfe-commits mailing list