Home | History | Annotate | Download | only in diagnostics
      1 // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist -o %t %s
      2 // RUN: FileCheck --input-file %t %s
      3 
      4 #include "undef-value-callee.h"
      5 
      6 // This code used to cause a crash since we were not adding fileID of the header to the plist diagnostic.
      7 
      8 int test_calling_unimportant_callee(int argc, char *argv[]) {
      9   int x;
     10   callee();
     11   return x; // expected-warning {{Undefined or garbage value returned to caller}}
     12 }
     13 
     14 //CHECK: <dict>
     15 //CHECK:  <key>files</key>
     16 //CHECK:  <array>
     17 //CHECK:  </array>
     18 //CHECK:  <key>diagnostics</key>
     19 //CHECK:  <array>
     20 //CHECK:   <dict>
     21 //CHECK:    <key>path</key>
     22 //CHECK:    <array>
     23 //CHECK:     <dict>
     24 //CHECK:      <key>kind</key><string>event</string>
     25 //CHECK:      <key>location</key>
     26 //CHECK:      <dict>
     27 //CHECK:       <key>line</key><integer>9</integer>
     28 //CHECK:       <key>col</key><integer>3</integer>
     29 //CHECK:       <key>file</key><integer>0</integer>
     30 //CHECK:      </dict>
     31 //CHECK:      <key>ranges</key>
     32 //CHECK:      <array>
     33 //CHECK:        <array>
     34 //CHECK:         <dict>
     35 //CHECK:          <key>line</key><integer>9</integer>
     36 //CHECK:          <key>col</key><integer>3</integer>
     37 //CHECK:          <key>file</key><integer>0</integer>
     38 //CHECK:         </dict>
     39 //CHECK:         <dict>
     40 //CHECK:          <key>line</key><integer>9</integer>
     41 //CHECK:          <key>col</key><integer>7</integer>
     42 //CHECK:          <key>file</key><integer>0</integer>
     43 //CHECK:         </dict>
     44 //CHECK:        </array>
     45 //CHECK:      </array>
     46 //CHECK:      <key>depth</key><integer>0</integer>
     47 //CHECK:      <key>extended_message</key>
     48 //CHECK:      <string>Variable &apos;x&apos; declared without an initial value</string>
     49 //CHECK:      <key>message</key>
     50 //CHECK: <string>Variable &apos;x&apos; declared without an initial value</string>
     51 //CHECK:     </dict>
     52 //CHECK:     <dict>
     53 //CHECK:      <key>kind</key><string>control</string>
     54 //CHECK:      <key>edges</key>
     55 //CHECK:       <array>
     56 //CHECK:        <dict>
     57 //CHECK:         <key>start</key>
     58 //CHECK:          <array>
     59 //CHECK:           <dict>
     60 //CHECK:            <key>line</key><integer>9</integer>
     61 //CHECK:            <key>col</key><integer>3</integer>
     62 //CHECK:            <key>file</key><integer>0</integer>
     63 //CHECK:           </dict>
     64 //CHECK:           <dict>
     65 //CHECK:            <key>line</key><integer>9</integer>
     66 //CHECK:            <key>col</key><integer>5</integer>
     67 //CHECK:            <key>file</key><integer>0</integer>
     68 //CHECK:           </dict>
     69 //CHECK:          </array>
     70 //CHECK:         <key>end</key>
     71 //CHECK:          <array>
     72 //CHECK:           <dict>
     73 //CHECK:            <key>line</key><integer>10</integer>
     74 //CHECK:            <key>col</key><integer>3</integer>
     75 //CHECK:            <key>file</key><integer>0</integer>
     76 //CHECK:           </dict>
     77 //CHECK:           <dict>
     78 //CHECK:            <key>line</key><integer>10</integer>
     79 //CHECK:            <key>col</key><integer>8</integer>
     80 //CHECK:            <key>file</key><integer>0</integer>
     81 //CHECK:           </dict>
     82 //CHECK:          </array>
     83 //CHECK:        </dict>
     84 //CHECK:       </array>
     85 //CHECK:     </dict>
     86 //CHECK:     <dict>
     87 //CHECK:      <key>kind</key><string>control</string>
     88 //CHECK:      <key>edges</key>
     89 //CHECK:       <array>
     90 //CHECK:        <dict>
     91 //CHECK:         <key>start</key>
     92 //CHECK:          <array>
     93 //CHECK:           <dict>
     94 //CHECK:            <key>line</key><integer>10</integer>
     95 //CHECK:            <key>col</key><integer>3</integer>
     96 //CHECK:            <key>file</key><integer>0</integer>
     97 //CHECK:           </dict>
     98 //CHECK:           <dict>
     99 //CHECK:            <key>line</key><integer>10</integer>
    100 //CHECK:            <key>col</key><integer>8</integer>
    101 //CHECK:            <key>file</key><integer>0</integer>
    102 //CHECK:           </dict>
    103 //CHECK:          </array>
    104 //CHECK:         <key>end</key>
    105 //CHECK:          <array>
    106 //CHECK:           <dict>
    107 //CHECK:            <key>line</key><integer>11</integer>
    108 //CHECK:            <key>col</key><integer>3</integer>
    109 //CHECK:            <key>file</key><integer>0</integer>
    110 //CHECK:           </dict>
    111 //CHECK:           <dict>
    112 //CHECK:            <key>line</key><integer>11</integer>
    113 //CHECK:            <key>col</key><integer>8</integer>
    114 //CHECK:            <key>file</key><integer>0</integer>
    115 //CHECK:           </dict>
    116 //CHECK:          </array>
    117 //CHECK:        </dict>
    118 //CHECK:       </array>
    119 //CHECK:     </dict>
    120 //CHECK:     <dict>
    121 //CHECK:      <key>kind</key><string>event</string>
    122 //CHECK:      <key>location</key>
    123 //CHECK:      <dict>
    124 //CHECK:       <key>line</key><integer>11</integer>
    125 //CHECK:       <key>col</key><integer>3</integer>
    126 //CHECK:       <key>file</key><integer>0</integer>
    127 //CHECK:      </dict>
    128 //CHECK:      <key>ranges</key>
    129 //CHECK:      <array>
    130 //CHECK:        <array>
    131 //CHECK:         <dict>
    132 //CHECK:          <key>line</key><integer>11</integer>
    133 //CHECK:          <key>col</key><integer>10</integer>
    134 //CHECK:          <key>file</key><integer>0</integer>
    135 //CHECK:         </dict>
    136 //CHECK:         <dict>
    137 //CHECK:          <key>line</key><integer>11</integer>
    138 //CHECK:          <key>col</key><integer>10</integer>
    139 //CHECK:          <key>file</key><integer>0</integer>
    140 //CHECK:         </dict>
    141 //CHECK:        </array>
    142 //CHECK:      </array>
    143 //CHECK:      <key>depth</key><integer>0</integer>
    144 //CHECK:      <key>extended_message</key>
    145 //CHECK:      <string>Undefined or garbage value returned to caller</string>
    146 //CHECK:      <key>message</key>
    147 //CHECK: <string>Undefined or garbage value returned to caller</string>
    148 //CHECK:     </dict>
    149 //CHECK:    </array>
    150 //CHECK:    <key>description</key><string>Undefined or garbage value returned to caller</string>
    151 //CHECK:    <key>category</key><string>Logic error</string>
    152 //CHECK:    <key>type</key><string>Garbage return value</string>
    153 //CHECK:   <key>issue_context_kind</key><string>function</string>
    154 //CHECK:   <key>issue_context</key><string>test_calling_unimportant_callee</string>
    155 //CHECK:   <key>issue_hash</key><integer>3</integer>
    156 //CHECK:   <key>location</key>
    157 //CHECK:   <dict>
    158 //CHECK:    <key>line</key><integer>11</integer>
    159 //CHECK:    <key>col</key><integer>3</integer>
    160 //CHECK:    <key>file</key><integer>0</integer>
    161 //CHECK:   </dict>
    162 //CHECK:   </dict>
    163 //CHECK:  </array>
    164 //CHECK: </dict>
    165 //CHECK: </plist>
    166