1 // RUN: %clang_analyze_cc1 -analyzer-output=plist -o %t.plist -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -verify %s 2 // RUN: FileCheck --input-file=%t.plist %s 3 4 void log(); 5 6 int max(int a, int b) { // expected-warning{{Duplicate code detected}} 7 log(); 8 if (a > b) 9 return a; 10 return b; 11 } 12 13 int maxClone(int a, int b) { // expected-note{{Similar code here}} 14 log(); 15 if (a > b) 16 return a; 17 return b; 18 } 19 20 // FIXME: This plist output doesn't include the extra note on line 13. 21 // It should be updated once the format for extra notes in plists is defined. 22 23 // CHECK: <key>diagnostics</key> 24 // CHECK-NEXT: <array> 25 // CHECK-NEXT: <dict> 26 // CHECK-NEXT: <key>path</key> 27 // CHECK-NEXT: <array> 28 // CHECK-NEXT: <dict> 29 // CHECK-NEXT: <key>kind</key><string>event</string> 30 // CHECK-NEXT: <key>location</key> 31 // CHECK-NEXT: <dict> 32 // CHECK-NEXT: <key>line</key><integer>6</integer> 33 // CHECK-NEXT: <key>col</key><integer>23</integer> 34 // CHECK-NEXT: <key>file</key><integer>0</integer> 35 // CHECK-NEXT: </dict> 36 // CHECK-NEXT: <key>ranges</key> 37 // CHECK-NEXT: <array> 38 // CHECK-NEXT: <array> 39 // CHECK-NEXT: <dict> 40 // CHECK-NEXT: <key>line</key><integer>6</integer> 41 // CHECK-NEXT: <key>col</key><integer>23</integer> 42 // CHECK-NEXT: <key>file</key><integer>0</integer> 43 // CHECK-NEXT: </dict> 44 // CHECK-NEXT: <dict> 45 // CHECK-NEXT: <key>line</key><integer>11</integer> 46 // CHECK-NEXT: <key>col</key><integer>1</integer> 47 // CHECK-NEXT: <key>file</key><integer>0</integer> 48 // CHECK-NEXT: </dict> 49 // CHECK-NEXT: </array> 50 // CHECK-NEXT: </array> 51 // CHECK-NEXT: <key>depth</key><integer>0</integer> 52 // CHECK-NEXT: <key>extended_message</key> 53 // CHECK-NEXT: <string>Duplicate code detected</string> 54 // CHECK-NEXT: <key>message</key> 55 // CHECK-NEXT: <string>Duplicate code detected</string> 56 // CHECK-NEXT: </dict> 57 // CHECK-NEXT: </array> 58 // CHECK-NEXT: <key>description</key><string>Duplicate code detected</string> 59 // CHECK-NEXT: <key>category</key><string>Code clone</string> 60 // CHECK-NEXT: <key>type</key><string>Exact code clone</string> 61 // CHECK-NEXT: <key>check_name</key><string>alpha.clone.CloneChecker</string> 62 // CHECK-NEXT: <!-- This hash is experimental and going to change! --> 63 // CHECK-NEXT: <key>issue_hash_content_of_line_in_context</key><string>3d15184f38c5fa57e479b744fe3f5035</string> 64 // CHECK-NEXT: <key>location</key> 65 // CHECK-NEXT: <dict> 66 // CHECK-NEXT: <key>line</key><integer>6</integer> 67 // CHECK-NEXT: <key>col</key><integer>23</integer> 68 // CHECK-NEXT: <key>file</key><integer>0</integer> 69 // CHECK-NEXT: </dict> 70 // CHECK-NEXT: </dict> 71 // CHECK-NEXT: </array> 72