diff options
Diffstat (limited to 'test/Analysis/MismatchedDeallocator-path-notes.cpp')
| -rw-r--r-- | test/Analysis/MismatchedDeallocator-path-notes.cpp | 180 | 
1 files changed, 162 insertions, 18 deletions
| diff --git a/test/Analysis/MismatchedDeallocator-path-notes.cpp b/test/Analysis/MismatchedDeallocator-path-notes.cpp index 61ab4f1eeb5a..af24197f13e8 100644 --- a/test/Analysis/MismatchedDeallocator-path-notes.cpp +++ b/test/Analysis/MismatchedDeallocator-path-notes.cpp @@ -3,9 +3,12 @@  // RUN: FileCheck --input-file=%t.plist %s  void changePointee(int *p); +int *allocIntArray(unsigned c) { +  return new int[c]; // expected-note {{Memory is allocated}} +}  void test() { -  int *p = new int[1]; -  // expected-note@-1 {{Memory is allocated}} +  int *p = allocIntArray(1); // expected-note {{Calling 'allocIntArray'}} +  // expected-note@-1 {{Returned allocated memory}}    changePointee(p);    delete p; // expected-warning {{Memory allocated by 'new[]' should be deallocated by 'delete[]', not 'delete'}}    // expected-note@-1 {{Memory allocated by 'new[]' should be deallocated by 'delete[]', not 'delete'}} @@ -24,13 +27,124 @@ void test() {  // CHECK-NEXT:        <key>start</key>  // CHECK-NEXT:         <array>  // CHECK-NEXT:          <dict> +// CHECK-NEXT:           <key>line</key><integer>10</integer> +// CHECK-NEXT:           <key>col</key><integer>3</integer> +// CHECK-NEXT:           <key>file</key><integer>0</integer> +// CHECK-NEXT:          </dict> +// CHECK-NEXT:          <dict> +// CHECK-NEXT:           <key>line</key><integer>10</integer> +// CHECK-NEXT:           <key>col</key><integer>5</integer> +// CHECK-NEXT:           <key>file</key><integer>0</integer> +// CHECK-NEXT:          </dict> +// CHECK-NEXT:         </array> +// CHECK-NEXT:        <key>end</key> +// CHECK-NEXT:         <array> +// CHECK-NEXT:          <dict> +// CHECK-NEXT:           <key>line</key><integer>10</integer> +// CHECK-NEXT:           <key>col</key><integer>12</integer> +// CHECK-NEXT:           <key>file</key><integer>0</integer> +// CHECK-NEXT:          </dict> +// CHECK-NEXT:          <dict> +// CHECK-NEXT:           <key>line</key><integer>10</integer> +// CHECK-NEXT:           <key>col</key><integer>24</integer> +// CHECK-NEXT:           <key>file</key><integer>0</integer> +// CHECK-NEXT:          </dict> +// CHECK-NEXT:         </array> +// CHECK-NEXT:       </dict> +// CHECK-NEXT:      </array> +// CHECK-NEXT:    </dict> +// CHECK-NEXT:    <dict> +// CHECK-NEXT:     <key>kind</key><string>event</string> +// CHECK-NEXT:     <key>location</key> +// CHECK-NEXT:     <dict> +// CHECK-NEXT:      <key>line</key><integer>10</integer> +// CHECK-NEXT:      <key>col</key><integer>12</integer> +// CHECK-NEXT:      <key>file</key><integer>0</integer> +// CHECK-NEXT:     </dict> +// CHECK-NEXT:     <key>ranges</key> +// CHECK-NEXT:     <array> +// CHECK-NEXT:       <array> +// CHECK-NEXT:        <dict> +// CHECK-NEXT:         <key>line</key><integer>10</integer> +// CHECK-NEXT:         <key>col</key><integer>12</integer> +// CHECK-NEXT:         <key>file</key><integer>0</integer> +// CHECK-NEXT:        </dict> +// CHECK-NEXT:        <dict> +// CHECK-NEXT:         <key>line</key><integer>10</integer> +// CHECK-NEXT:         <key>col</key><integer>27</integer> +// CHECK-NEXT:         <key>file</key><integer>0</integer> +// CHECK-NEXT:        </dict> +// CHECK-NEXT:       </array> +// CHECK-NEXT:     </array> +// CHECK-NEXT:     <key>depth</key><integer>0</integer> +// CHECK-NEXT:     <key>extended_message</key> +// CHECK-NEXT:     <string>Calling 'allocIntArray'</string> +// CHECK-NEXT:     <key>message</key> +// CHECK-NEXT:     <string>Calling 'allocIntArray'</string> +// CHECK-NEXT:    </dict> +// CHECK-NEXT:    <dict> +// CHECK-NEXT:     <key>kind</key><string>event</string> +// CHECK-NEXT:     <key>location</key> +// CHECK-NEXT:     <dict> +// CHECK-NEXT:      <key>line</key><integer>6</integer> +// CHECK-NEXT:      <key>col</key><integer>1</integer> +// CHECK-NEXT:      <key>file</key><integer>0</integer> +// CHECK-NEXT:     </dict> +// CHECK-NEXT:     <key>depth</key><integer>1</integer> +// CHECK-NEXT:     <key>extended_message</key> +// CHECK-NEXT:     <string>Entered call from 'test'</string> +// CHECK-NEXT:     <key>message</key> +// CHECK-NEXT:     <string>Entered call from 'test'</string> +// CHECK-NEXT:    </dict> +// CHECK-NEXT:    <dict> +// CHECK-NEXT:     <key>kind</key><string>control</string> +// CHECK-NEXT:     <key>edges</key> +// CHECK-NEXT:      <array> +// CHECK-NEXT:       <dict> +// CHECK-NEXT:        <key>start</key> +// CHECK-NEXT:         <array> +// CHECK-NEXT:          <dict> +// CHECK-NEXT:           <key>line</key><integer>6</integer> +// CHECK-NEXT:           <key>col</key><integer>1</integer> +// CHECK-NEXT:           <key>file</key><integer>0</integer> +// CHECK-NEXT:          </dict> +// CHECK-NEXT:          <dict> +// CHECK-NEXT:           <key>line</key><integer>6</integer> +// CHECK-NEXT:           <key>col</key><integer>3</integer> +// CHECK-NEXT:           <key>file</key><integer>0</integer> +// CHECK-NEXT:          </dict> +// CHECK-NEXT:         </array> +// CHECK-NEXT:        <key>end</key> +// CHECK-NEXT:         <array> +// CHECK-NEXT:          <dict>  // CHECK-NEXT:           <key>line</key><integer>7</integer>  // CHECK-NEXT:           <key>col</key><integer>3</integer>  // CHECK-NEXT:           <key>file</key><integer>0</integer>  // CHECK-NEXT:          </dict>  // CHECK-NEXT:          <dict>  // CHECK-NEXT:           <key>line</key><integer>7</integer> -// CHECK-NEXT:           <key>col</key><integer>5</integer> +// CHECK-NEXT:           <key>col</key><integer>8</integer> +// CHECK-NEXT:           <key>file</key><integer>0</integer> +// CHECK-NEXT:          </dict> +// CHECK-NEXT:         </array> +// CHECK-NEXT:       </dict> +// CHECK-NEXT:      </array> +// CHECK-NEXT:    </dict> +// CHECK-NEXT:    <dict> +// CHECK-NEXT:     <key>kind</key><string>control</string> +// CHECK-NEXT:     <key>edges</key> +// CHECK-NEXT:      <array> +// CHECK-NEXT:       <dict> +// CHECK-NEXT:        <key>start</key> +// CHECK-NEXT:         <array> +// CHECK-NEXT:          <dict> +// CHECK-NEXT:           <key>line</key><integer>7</integer> +// CHECK-NEXT:           <key>col</key><integer>3</integer> +// CHECK-NEXT:           <key>file</key><integer>0</integer> +// CHECK-NEXT:          </dict> +// CHECK-NEXT:          <dict> +// CHECK-NEXT:           <key>line</key><integer>7</integer> +// CHECK-NEXT:           <key>col</key><integer>8</integer>  // CHECK-NEXT:           <key>file</key><integer>0</integer>  // CHECK-NEXT:          </dict>  // CHECK-NEXT:         </array> @@ -38,12 +152,12 @@ void test() {  // CHECK-NEXT:         <array>  // CHECK-NEXT:          <dict>  // CHECK-NEXT:           <key>line</key><integer>7</integer> -// CHECK-NEXT:           <key>col</key><integer>12</integer> +// CHECK-NEXT:           <key>col</key><integer>10</integer>  // CHECK-NEXT:           <key>file</key><integer>0</integer>  // CHECK-NEXT:          </dict>  // CHECK-NEXT:          <dict>  // CHECK-NEXT:           <key>line</key><integer>7</integer> -// CHECK-NEXT:           <key>col</key><integer>14</integer> +// CHECK-NEXT:           <key>col</key><integer>12</integer>  // CHECK-NEXT:           <key>file</key><integer>0</integer>  // CHECK-NEXT:          </dict>  // CHECK-NEXT:         </array> @@ -55,7 +169,7 @@ void test() {  // CHECK-NEXT:     <key>location</key>  // CHECK-NEXT:     <dict>  // CHECK-NEXT:      <key>line</key><integer>7</integer> -// CHECK-NEXT:      <key>col</key><integer>12</integer> +// CHECK-NEXT:      <key>col</key><integer>10</integer>  // CHECK-NEXT:      <key>file</key><integer>0</integer>  // CHECK-NEXT:     </dict>  // CHECK-NEXT:     <key>ranges</key> @@ -63,23 +177,52 @@ void test() {  // CHECK-NEXT:       <array>  // CHECK-NEXT:        <dict>  // CHECK-NEXT:         <key>line</key><integer>7</integer> -// CHECK-NEXT:         <key>col</key><integer>12</integer> +// CHECK-NEXT:         <key>col</key><integer>10</integer>  // CHECK-NEXT:         <key>file</key><integer>0</integer>  // CHECK-NEXT:        </dict>  // CHECK-NEXT:        <dict>  // CHECK-NEXT:         <key>line</key><integer>7</integer> -// CHECK-NEXT:         <key>col</key><integer>21</integer> +// CHECK-NEXT:         <key>col</key><integer>19</integer>  // CHECK-NEXT:         <key>file</key><integer>0</integer>  // CHECK-NEXT:        </dict>  // CHECK-NEXT:       </array>  // CHECK-NEXT:     </array> -// CHECK-NEXT:     <key>depth</key><integer>0</integer> +// CHECK-NEXT:     <key>depth</key><integer>1</integer>  // CHECK-NEXT:     <key>extended_message</key>  // CHECK-NEXT:     <string>Memory is allocated</string>  // CHECK-NEXT:     <key>message</key>  // CHECK-NEXT:     <string>Memory is allocated</string>  // CHECK-NEXT:    </dict>  // CHECK-NEXT:    <dict> +// CHECK-NEXT:     <key>kind</key><string>event</string> +// CHECK-NEXT:     <key>location</key> +// CHECK-NEXT:     <dict> +// CHECK-NEXT:      <key>line</key><integer>10</integer> +// CHECK-NEXT:      <key>col</key><integer>12</integer> +// CHECK-NEXT:      <key>file</key><integer>0</integer> +// CHECK-NEXT:     </dict> +// CHECK-NEXT:     <key>ranges</key> +// CHECK-NEXT:     <array> +// CHECK-NEXT:       <array> +// CHECK-NEXT:        <dict> +// CHECK-NEXT:         <key>line</key><integer>10</integer> +// CHECK-NEXT:         <key>col</key><integer>12</integer> +// CHECK-NEXT:         <key>file</key><integer>0</integer> +// CHECK-NEXT:        </dict> +// CHECK-NEXT:        <dict> +// CHECK-NEXT:         <key>line</key><integer>10</integer> +// CHECK-NEXT:         <key>col</key><integer>27</integer> +// CHECK-NEXT:         <key>file</key><integer>0</integer> +// CHECK-NEXT:        </dict> +// CHECK-NEXT:       </array> +// CHECK-NEXT:     </array> +// CHECK-NEXT:     <key>depth</key><integer>0</integer> +// CHECK-NEXT:     <key>extended_message</key> +// CHECK-NEXT:     <string>Returned allocated memory</string> +// CHECK-NEXT:     <key>message</key> +// CHECK-NEXT:     <string>Returned allocated memory</string> +// CHECK-NEXT:    </dict> +// CHECK-NEXT:    <dict>  // CHECK-NEXT:     <key>kind</key><string>control</string>  // CHECK-NEXT:     <key>edges</key>  // CHECK-NEXT:      <array> @@ -87,25 +230,25 @@ void test() {  // CHECK-NEXT:        <key>start</key>  // CHECK-NEXT:         <array>  // CHECK-NEXT:          <dict> -// CHECK-NEXT:           <key>line</key><integer>7</integer> +// CHECK-NEXT:           <key>line</key><integer>10</integer>  // CHECK-NEXT:           <key>col</key><integer>12</integer>  // CHECK-NEXT:           <key>file</key><integer>0</integer>  // CHECK-NEXT:          </dict>  // CHECK-NEXT:          <dict> -// CHECK-NEXT:           <key>line</key><integer>7</integer> -// CHECK-NEXT:           <key>col</key><integer>14</integer> +// CHECK-NEXT:           <key>line</key><integer>10</integer> +// CHECK-NEXT:           <key>col</key><integer>24</integer>  // CHECK-NEXT:           <key>file</key><integer>0</integer>  // CHECK-NEXT:          </dict>  // CHECK-NEXT:         </array>  // CHECK-NEXT:        <key>end</key>  // CHECK-NEXT:         <array>  // CHECK-NEXT:          <dict> -// CHECK-NEXT:           <key>line</key><integer>10</integer> +// CHECK-NEXT:           <key>line</key><integer>13</integer>  // CHECK-NEXT:           <key>col</key><integer>3</integer>  // CHECK-NEXT:           <key>file</key><integer>0</integer>  // CHECK-NEXT:          </dict>  // CHECK-NEXT:          <dict> -// CHECK-NEXT:           <key>line</key><integer>10</integer> +// CHECK-NEXT:           <key>line</key><integer>13</integer>  // CHECK-NEXT:           <key>col</key><integer>8</integer>  // CHECK-NEXT:           <key>file</key><integer>0</integer>  // CHECK-NEXT:          </dict> @@ -117,7 +260,7 @@ void test() {  // CHECK-NEXT:     <key>kind</key><string>event</string>  // CHECK-NEXT:     <key>location</key>  // CHECK-NEXT:     <dict> -// CHECK-NEXT:      <key>line</key><integer>10</integer> +// CHECK-NEXT:      <key>line</key><integer>13</integer>  // CHECK-NEXT:      <key>col</key><integer>3</integer>  // CHECK-NEXT:      <key>file</key><integer>0</integer>  // CHECK-NEXT:     </dict> @@ -125,12 +268,12 @@ void test() {  // CHECK-NEXT:     <array>  // CHECK-NEXT:       <array>  // CHECK-NEXT:        <dict> -// CHECK-NEXT:         <key>line</key><integer>10</integer> +// CHECK-NEXT:         <key>line</key><integer>13</integer>  // CHECK-NEXT:         <key>col</key><integer>10</integer>  // CHECK-NEXT:         <key>file</key><integer>0</integer>  // CHECK-NEXT:        </dict>  // CHECK-NEXT:        <dict> -// CHECK-NEXT:         <key>line</key><integer>10</integer> +// CHECK-NEXT:         <key>line</key><integer>13</integer>  // CHECK-NEXT:         <key>col</key><integer>10</integer>  // CHECK-NEXT:         <key>file</key><integer>0</integer>  // CHECK-NEXT:        </dict> @@ -146,12 +289,13 @@ void test() {  // CHECK-NEXT:   <key>description</key><string>Memory allocated by 'new[]' should be deallocated by 'delete[]', not 'delete'</string>  // CHECK-NEXT:   <key>category</key><string>Memory Error</string>  // CHECK-NEXT:   <key>type</key><string>Bad deallocator</string> +// CHECK-NEXT:   <key>check_name</key><string>unix.MismatchedDeallocator</string>   // CHECK-NEXT:  <key>issue_context_kind</key><string>function</string>  // CHECK-NEXT:  <key>issue_context</key><string>test</string>  // CHECK-NEXT:  <key>issue_hash</key><string>4</string>  // CHECK-NEXT:  <key>location</key>  // CHECK-NEXT:  <dict> -// CHECK-NEXT:   <key>line</key><integer>10</integer> +// CHECK-NEXT:   <key>line</key><integer>13</integer>  // CHECK-NEXT:   <key>col</key><integer>3</integer>  // CHECK-NEXT:   <key>file</key><integer>0</integer>  // CHECK-NEXT:  </dict> | 
