1018 lines · cpp
1// RUN: %check_clang_tidy %s readability-function-cognitive-complexity %t -- -config='{CheckOptions: {readability-function-cognitive-complexity.Threshold: 0}}' -- -std=c++11 -fblocks -fexceptions -w2 3// any function should be checked.4 5extern int ext_func(int x = 0);6 7int some_func(int x = 0);8 9static int some_other_func(int x = 0) {}10 11template<typename T> void some_templ_func(T x = 0) {}12 13class SomeClass {14public:15 int *begin(int x = 0);16 int *end(int x = 0);17 static int func(int x = 0);18 template<typename T> void some_templ_func(T x = 0) {}19 SomeClass() = default;20 SomeClass(SomeClass&) = delete;21};22 23// nothing ever decreases cognitive complexity, so we can check all the things24// in one go. none of the following should increase cognitive complexity:25void unittest_false() {26 {};27 ext_func();28 some_func();29 some_other_func();30 some_templ_func<int>();31 some_templ_func<bool>();32 SomeClass::func();33 SomeClass C;34 C.some_templ_func<int>();35 C.some_templ_func<bool>();36 C.func();37 C.end();38 int i = some_func();39 i = i;40 i++;41 --i;42 i < 0;43 int j = 0 ?: 1;44 auto k = new int;45 delete k;46 throw i;47 {48 throw i;49 }50end:51 return;52}53 54#if 155#define CC10056#else57// this macro has cognitive complexity of 100.58// it is needed to be able to compare the testcases with the59// reference Sonar implementation. please place it right after the first60// CHECK-NOTES in each function61#define CC100 if(1){if(1){if(1){if(1){if(1){if(1){if(1){if(1){if(1){if(1){if(1){if(1){if(1){}}}}}if(1){}}}}}}}}}62#endif63 64//----------------------------------------------------------------------------//65//------------------------------ B1. Increments ------------------------------//66//----------------------------------------------------------------------------//67// Check that every thing listed in B1 of the specification does indeed //68// recieve the base increment, and that not-body does not increase nesting //69//----------------------------------------------------------------------------//70 71// break does not increase cognitive complexity.72// only break LABEL does, but it is unavailable in C or C++73 74// continue does not increase cognitive complexity.75// only continue LABEL does, but it is unavailable in C or C++76 77void unittest_b1_00() {78// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_00' has cognitive complexity of 33 (threshold 0) [readability-function-cognitive-complexity]79 CC100;80 81 if (1 ? 1 : 0) {82// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}83// CHECK-NOTES: :[[@LINE-2]]:9: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}84 85 if (1 ? 1 : 0) {86// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}87// CHECK-NOTES: :[[@LINE-2]]:11: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}88 } else if (1 ? 1 : 0) {89// CHECK-NOTES: :[[@LINE-1]]:12: note: +1, nesting level increased to 2{{$}}90// CHECK-NOTES: :[[@LINE-2]]:18: note: +3, including nesting penalty of 2, nesting level increased to 3{{$}}91 } else {92// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, nesting level increased to 2{{$}}93 }94 } else if (1 ? 1 : 0) {95// CHECK-NOTES: :[[@LINE-1]]:10: note: +1, nesting level increased to 1{{$}}96// CHECK-NOTES: :[[@LINE-2]]:16: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}97 98 if (1 ? 1 : 0) {99// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}100// CHECK-NOTES: :[[@LINE-2]]:11: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}101 } else if (1 ? 1 : 0) {102// CHECK-NOTES: :[[@LINE-1]]:12: note: +1, nesting level increased to 2{{$}}103// CHECK-NOTES: :[[@LINE-2]]:18: note: +3, including nesting penalty of 2, nesting level increased to 3{{$}}104 } else {105// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, nesting level increased to 2{{$}}106 }107 } else {108// CHECK-NOTES: :[[@LINE-1]]:5: note: +1, nesting level increased to 1{{$}}109 110 if (1 ? 1 : 0) {111// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}112// CHECK-NOTES: :[[@LINE-2]]:11: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}113 } else if (1 ? 1 : 0) {114// CHECK-NOTES: :[[@LINE-1]]:12: note: +1, nesting level increased to 2{{$}}115// CHECK-NOTES: :[[@LINE-2]]:18: note: +3, including nesting penalty of 2, nesting level increased to 3{{$}}116 } else {117// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, nesting level increased to 2{{$}}118 }119 }120}121 122void unittest_b1_01() {123// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_01' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]124 CC100;125 126 int i = (1 ? 1 : 0) ? 1 : 0;127// CHECK-NOTES: :[[@LINE-1]]:23: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}128// CHECK-NOTES: :[[@LINE-2]]:14: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}129}130 131void unittest_b1_02(int x) {132// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_02' has cognitive complexity of 9 (threshold 0) [readability-function-cognitive-complexity]133 CC100;134 135 switch (1 ? 1 : 0) {136// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}137// CHECK-NOTES: :[[@LINE-2]]:13: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}138 case -1:139 return;140 case 1 ? 1 : 0:141// CHECK-NOTES: :[[@LINE-1]]:10: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}142 return;143 case (1 ? 2 : 0) ... (1 ? 3 : 0):144// CHECK-NOTES: :[[@LINE-1]]:11: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}145// CHECK-NOTES: :[[@LINE-2]]:27: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}146 return;147 default:148 break;149 }150}151 152void unittest_b1_03(int x) {153// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_03' has cognitive complexity of 7 (threshold 0) [readability-function-cognitive-complexity]154 CC100;155 156 for (x = 1 ? 1 : 0; x < (1 ? 1 : 0); x += 1 ? 1 : 0) {157// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}158// CHECK-NOTES: :[[@LINE-2]]:14: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}159// CHECK-NOTES: :[[@LINE-3]]:30: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}160// CHECK-NOTES: :[[@LINE-4]]:47: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}161 break;162 continue;163 }164}165 166void unittest_b1_04() {167// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_04' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]168 CC100;169 170 SomeClass C;171 for (int i : (1 ? C : C)) {172// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}173// CHECK-NOTES: :[[@LINE-2]]:19: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}174 break;175 continue;176 }177}178 179void unittest_b1_05() {180// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_05' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]181 CC100;182 183 while (1 ? 1 : 0) {184// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}185// CHECK-NOTES: :[[@LINE-2]]:12: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}186 break;187 continue;188 }189}190 191void unittest_b1_06() {192// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_06' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]193 CC100;194 195 do {196// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}197 break;198 continue;199 } while (1 ? 1 : 0);200// CHECK-NOTES: :[[@LINE-1]]:14: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}201}202 203void unittest_b1_07() {204// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_07' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]205 CC100;206 207 try {208 } catch (...) {209// CHECK-NOTES: :[[@LINE-1]]:5: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}210 }211}212 213void unittest_b1_08_00() {214// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_08_00' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]215 CC100;216 217 goto end;218// CHECK-NOTES: :[[@LINE-1]]:3: note: +1{{$}}219end:220 return;221}222 223void unittest_b1_08_01() {224// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_08_01' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]225 CC100;226 227 void *ptr = &&end;228 goto *ptr;229// CHECK-NOTES: :[[@LINE-1]]:3: note: +1{{$}}230end:231 return;232}233 234void unittest_b1_09_00() {235// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_09_00' has cognitive complexity of 34 (threshold 0) [readability-function-cognitive-complexity]236 CC100;237 238 if(1 && 1) {239// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}240// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}241 }242 if(1 && 1 && 1) {243// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}244// CHECK-NOTES: :[[@LINE-2]]:13: note: +1{{$}}245 }246 if((1 && 1) && 1) {247// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}248// CHECK-NOTES: :[[@LINE-2]]:15: note: +1{{$}}249 }250 if(1 && (1 && 1)) {251// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}252// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}253 }254 255 if(1 && 1 || 1) {256// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}257// CHECK-NOTES: :[[@LINE-2]]:13: note: +1{{$}}258// CHECK-NOTES: :[[@LINE-3]]:8: note: +1{{$}}259 }260 if((1 && 1) || 1) {261// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}262// CHECK-NOTES: :[[@LINE-2]]:15: note: +1{{$}}263// CHECK-NOTES: :[[@LINE-3]]:9: note: +1{{$}}264 }265 if(1 && (1 || 1)) {266// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}267// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}268// CHECK-NOTES: :[[@LINE-3]]:14: note: +1{{$}}269 }270 271 if(1 || 1) {272// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}273// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}274 }275 if(1 || 1 || 1) {276// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}277// CHECK-NOTES: :[[@LINE-2]]:13: note: +1{{$}}278 }279 if((1 || 1) || 1) {280// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}281// CHECK-NOTES: :[[@LINE-2]]:15: note: +1{{$}}282 }283 if(1 || (1 || 1)) {284// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}285// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}286 }287 288 if(1 || 1 && 1) {289// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}290// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}291// CHECK-NOTES: :[[@LINE-3]]:13: note: +1{{$}}292 }293 if((1 || 1) && 1) {294// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}295// CHECK-NOTES: :[[@LINE-2]]:15: note: +1{{$}}296// CHECK-NOTES: :[[@LINE-3]]:9: note: +1{{$}}297 }298 if(1 || (1 && 1)) {299// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}300// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}301// CHECK-NOTES: :[[@LINE-3]]:14: note: +1{{$}}302 }303}304 305void unittest_b1_09_01() {306// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_09_01' has cognitive complexity of 40 (threshold 0) [readability-function-cognitive-complexity]307 CC100;308 309 if(1 && some_func(1 && 1)) {310// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}311// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}312// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}313 }314 if(1 && some_func(1 || 1)) {315// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}316// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}317// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}318 }319 if(1 || some_func(1 || 1)) {320// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}321// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}322// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}323 }324 if(1 || some_func(1 && 1)) {325// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}326// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}327// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}328 }329 330 if(1 && some_func(1 && 1) && 1) {331// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}332// CHECK-NOTES: :[[@LINE-2]]:29: note: +1{{$}}333// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}334 }335 if(1 && some_func(1 || 1) && 1) {336// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}337// CHECK-NOTES: :[[@LINE-2]]:29: note: +1{{$}}338// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}339 }340 if(1 || some_func(1 || 1) && 1) {341// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}342// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}343// CHECK-NOTES: :[[@LINE-3]]:29: note: +1{{$}}344// CHECK-NOTES: :[[@LINE-4]]:23: note: +1{{$}}345 }346 if(1 || some_func(1 && 1) && 1) {347// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}348// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}349// CHECK-NOTES: :[[@LINE-3]]:29: note: +1{{$}}350// CHECK-NOTES: :[[@LINE-4]]:23: note: +1{{$}}351 }352 353 if(1 && some_func(1 && 1) || 1) {354// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}355// CHECK-NOTES: :[[@LINE-2]]:29: note: +1{{$}}356// CHECK-NOTES: :[[@LINE-3]]:8: note: +1{{$}}357// CHECK-NOTES: :[[@LINE-4]]:23: note: +1{{$}}358 }359 if(1 && some_func(1 || 1) || 1) {360// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}361// CHECK-NOTES: :[[@LINE-2]]:29: note: +1{{$}}362// CHECK-NOTES: :[[@LINE-3]]:8: note: +1{{$}}363// CHECK-NOTES: :[[@LINE-4]]:23: note: +1{{$}}364 }365 if(1 || some_func(1 || 1) || 1) {366// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}367// CHECK-NOTES: :[[@LINE-2]]:29: note: +1{{$}}368// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}369 }370 if(1 || some_func(1 && 1) || 1) {371// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}372// CHECK-NOTES: :[[@LINE-2]]:29: note: +1{{$}}373// CHECK-NOTES: :[[@LINE-3]]:23: note: +1{{$}}374 }375}376 377void unittest_b1_09_02() {378// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b1_09_02' has cognitive complexity of 12 (threshold 0) [readability-function-cognitive-complexity]379 CC100;380 381 if(1 && SomeClass::func(1 && 1)) {382// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}383// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}384// CHECK-NOTES: :[[@LINE-3]]:29: note: +1{{$}}385 }386 if(1 && SomeClass::func(1 || 1)) {387// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}388// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}389// CHECK-NOTES: :[[@LINE-3]]:29: note: +1{{$}}390 }391 if(1 || SomeClass::func(1 || 1)) {392// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}393// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}394// CHECK-NOTES: :[[@LINE-3]]:29: note: +1{{$}}395 }396 if(1 || SomeClass::func(1 && 1)) {397// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}398// CHECK-NOTES: :[[@LINE-2]]:8: note: +1{{$}}399// CHECK-NOTES: :[[@LINE-3]]:29: note: +1{{$}}400 }401}402 403// FIXME: each method in a recursion cycle404 405//----------------------------------------------------------------------------//406//---------------------------- B2. Nesting lebel -----------------------------//407//----------------------------------------------------------------------------//408// Check that every thing listed in B2 of the specification does indeed //409// increase the nesting level //410//----------------------------------------------------------------------------//411 412void unittest_b2_00() {413// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_00' has cognitive complexity of 9 (threshold 0) [readability-function-cognitive-complexity]414 CC100;415 416 if (true) {417// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}418 if(true) {419// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}420 }421 } else if (true) {422// CHECK-NOTES: :[[@LINE-1]]:10: note: +1, nesting level increased to 1{{$}}423 if(true) {424// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}425 }426 } else {427// CHECK-NOTES: :[[@LINE-1]]:5: note: +1, nesting level increased to 1{{$}}428 if(true) {429// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}430 }431 }432}433 434void unittest_b2_01() {435// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_01' has cognitive complexity of 5 (threshold 0) [readability-function-cognitive-complexity]436 CC100;437 438 int i = 1 ? (1 ? 1 : 0) : (1 ? 1 : 0);439// CHECK-NOTES: :[[@LINE-1]]:13: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}440// CHECK-NOTES: :[[@LINE-2]]:18: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}441// CHECK-NOTES: :[[@LINE-3]]:32: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}442}443 444void unittest_b2_02(int x) {445// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_02' has cognitive complexity of 5 (threshold 0) [readability-function-cognitive-complexity]446 CC100;447 448 switch (x) {449// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}450 case -1:451 if(true) {452// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}453 }454 return;455 default:456 if(true) {457// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}458 }459 return;460 }461}462 463void unittest_b2_03() {464// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_03' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]465 CC100;466 467 for (;;) {468// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}469 if(true) {470// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}471 }472 }473}474 475void unittest_b2_04() {476// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_04' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]477 CC100;478 479 SomeClass C;480 for (int i : C) {481// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}482 if(true) {483// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}484 }485 }486}487 488void unittest_b2_05() {489// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_05' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]490 CC100;491 492 while (true) {493// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}494 if(true) {495// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}496 }497 }498}499 500void unittest_b2_06() {501// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_06' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]502 CC100;503 504 do {505// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}506 if(true) {507// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}508 }509 } while (true);510}511 512void unittest_b2_07() {513// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_07' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]514 CC100;515 516 try {517 } catch (...) {518// CHECK-NOTES: :[[@LINE-1]]:5: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}519 if(true) {520// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}521 }522 }523}524 525void unittest_b2_08_00() {526// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_08_00' has cognitive complexity of 10 (threshold 0) [readability-function-cognitive-complexity]527 CC100;528 529 class X {530 X() {531// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}532 CC100;533 534 if (true) {535// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}536 }537 }538 539 X &operator=(const X &other) {540// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}541 CC100;542 543 if (true) {544// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}545 }546 }547 548 ~X() {549// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}550 CC100;551 552 if (true) {553// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}554 }555 }556 557 void Y() {558// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}559 CC100;560 561 if (true) {562// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}563 }564 }565 566 static void Z() {567// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}568 CC100;569 570 if (true) {571// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}572 }573 }574 575// CHECK-NOTES: :[[@LINE-45]]:5: warning: function 'X' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]576// CHECK-NOTES: :[[@LINE-42]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}577 578// CHECK-NOTES: :[[@LINE-39]]:8: warning: function 'operator=' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]579// CHECK-NOTES: :[[@LINE-36]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}580 581// CHECK-NOTES: :[[@LINE-33]]:5: warning: function '~X' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]582// CHECK-NOTES: :[[@LINE-30]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}583 584// CHECK-NOTES: :[[@LINE-27]]:10: warning: function 'Y' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]585// CHECK-NOTES: :[[@LINE-24]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}586 587// CHECK-NOTES: :[[@LINE-21]]:17: warning: function 'Z' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]588// CHECK-NOTES: :[[@LINE-18]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}589 };590}591 592void unittest_b2_08_01() {593// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_08_01' has cognitive complexity of 10 (threshold 0) [readability-function-cognitive-complexity]594 CC100;595 596 struct X {597 X() {598// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}599 CC100;600 601 if (true) {602// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}603 }604 }605 606 X &operator=(const X &other) {607// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}608 CC100;609 610 if (true) {611// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}612 }613 }614 615 ~X() {616// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}617 CC100;618 619 if (true) {620// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}621 }622 }623 624 void Y() {625// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}626 CC100;627 628 if (true) {629// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}630 }631 }632 633 static void Z() {634// CHECK-NOTES: :[[@LINE-1]]:5: note: nesting level increased to 1{{$}}635 CC100;636 637 if (true) {638// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}639 }640 }641 642// CHECK-NOTES: :[[@LINE-45]]:5: warning: function 'X' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]643// CHECK-NOTES: :[[@LINE-42]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}644 645// CHECK-NOTES: :[[@LINE-39]]:8: warning: function 'operator=' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]646// CHECK-NOTES: :[[@LINE-36]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}647 648// CHECK-NOTES: :[[@LINE-33]]:5: warning: function '~X' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]649// CHECK-NOTES: :[[@LINE-30]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}650 651// CHECK-NOTES: :[[@LINE-27]]:10: warning: function 'Y' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]652// CHECK-NOTES: :[[@LINE-24]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}653 654// CHECK-NOTES: :[[@LINE-21]]:17: warning: function 'Z' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]655// CHECK-NOTES: :[[@LINE-18]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}656 };657}658 659void unittest_b2_08_02() {660// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_08_02' has cognitive complexity of 2 (threshold 0) [readability-function-cognitive-complexity]661 CC100;662 663 auto fun = []() {664// CHECK-NOTES: :[[@LINE-1]]:14: note: nesting level increased to 1{{$}}665 if (true) {666// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}667 }668 };669// CHECK-NOTES: :[[@LINE-6]]:14: warning: lambda has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]670// CHECK-NOTES: :[[@LINE-5]]:5: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}671}672 673void unittest_b2_09() {674// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_09' has cognitive complexity of 2 (threshold 0) [readability-function-cognitive-complexity]675 CC100;676 677 ({678// CHECK-NOTES: :[[@LINE-1]]:3: note: nesting level increased to 1{{$}}679 if (true) {680// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}681 }682 });683}684 685void unittest_b2_10() {686// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b2_10' has cognitive complexity of 2 (threshold 0) [readability-function-cognitive-complexity]687 CC100;688 689 void (^foo)(void) = ^(void) {690// CHECK-NOTES: :[[@LINE-1]]:23: note: nesting level increased to 1{{$}}691 if (true) {692// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}693 }694 };695}696 697//----------------------------------------------------------------------------//698//-------------------------- B3. Nesting increments --------------------------//699//----------------------------------------------------------------------------//700// Check that every thing listed in B3 of the specification does indeed //701// recieve the penalty of the current nesting level //702//----------------------------------------------------------------------------//703 704void unittest_b3_00() {705// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_00' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]706 CC100;707 708 if (true) {709// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}710 if (true) {711// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}712 }713 }714}715 716void unittest_b3_01() {717// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_01' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]718 CC100;719 720 if (true) {721// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}722 int i = 1 ? 1 : 0;723// CHECK-NOTES: :[[@LINE-1]]:15: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}724 }725}726 727void unittest_b3_02(int x) {728// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_02' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]729 CC100;730 731 if (true) {732// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}733 switch (x) {734// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}735 case -1:736 return;737 default:738 return;739 }740 }741}742 743void unittest_b3_03() {744// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_03' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]745 CC100;746 747 if (true) {748// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}749 for (;;) {750// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}751 }752 }753}754 755void unittest_b3_04() {756// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_04' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]757 CC100;758 759 if (true) {760// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}761 SomeClass C;762 for (int i : C) {763// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}764 }765 }766}767 768void unittest_b3_05() {769// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_05' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]770 CC100;771 772 if (true) {773// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}774 while (true) {775// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}776 }777 }778}779 780void unittest_b3_06() {781// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_06' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]782 CC100;783 784 if (true) {785// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}786 do {787// CHECK-NOTES: :[[@LINE-1]]:5: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}788 } while (true);789 }790}791 792void unittest_b3_07() {793// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'unittest_b3_07' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]794 CC100;795 796 if (true) {797// CHECK-NOTES: :[[@LINE-1]]:3: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}798 try {799 } catch (...) {800// CHECK-NOTES: :[[@LINE-1]]:7: note: +2, including nesting penalty of 1, nesting level increased to 2{{$}}801 }802 }803}804 805//----------------------------------------------------------------------------//806// Check that functions are being checked //807//----------------------------------------------------------------------------//808 809class CheckClass {810 CheckClass(int x) {811// CHECK-NOTES: :[[@LINE-1]]:3: warning: function 'CheckClass' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]812 CC100;813 814 try {815 } catch (...) {816// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}817 }818 }819 820 void PrivateMemberFunction() {821// CHECK-NOTES: :[[@LINE-1]]:8: warning: function 'PrivateMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]822 CC100;823 824 try {825 } catch (...) {826// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}827 }828 }829 830 void PrivateConstMemberFunction() const {831// CHECK-NOTES: :[[@LINE-1]]:8: warning: function 'PrivateConstMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]832 CC100;833 834 try {835 } catch (...) {836// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}837 }838 }839 840 static void PrivateStaticMemberFunction() {841// CHECK-NOTES: :[[@LINE-1]]:15: warning: function 'PrivateStaticMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]842 CC100;843 844 try {845 } catch (...) {846// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}847 }848 }849 850public:851 CheckClass() {852// CHECK-NOTES: :[[@LINE-1]]:3: warning: function 'CheckClass' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]853 CC100;854 855 try {856 } catch (...) {857// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}858 }859 }860 861 operator bool() const {862// CHECK-NOTES: :[[@LINE-1]]:3: warning: function 'operator bool' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]863 CC100;864 865 try {866 } catch (...) {867// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}868 }869 }870 871 ~CheckClass() {872// CHECK-NOTES: :[[@LINE-1]]:3: warning: function '~CheckClass' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]873 CC100;874 875 try {876 } catch (...) {877// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}878 }879 }880 881 void PublicMemberFunction() {882// CHECK-NOTES: :[[@LINE-1]]:8: warning: function 'PublicMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]883 CC100;884 885 try {886 } catch (...) {887// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}888 }889 }890 891 void PublicConstMemberFunction() const {892// CHECK-NOTES: :[[@LINE-1]]:8: warning: function 'PublicConstMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]893 CC100;894 895 try {896 } catch (...) {897// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}898 }899 }900 901 static void PublicStaticMemberFunction() {902// CHECK-NOTES: :[[@LINE-1]]:15: warning: function 'PublicStaticMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]903 CC100;904 905 try {906 } catch (...) {907// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}908 }909 }910 911 void PublicFunctionDefinition();912 913protected:914 CheckClass(bool b) {915// CHECK-NOTES: :[[@LINE-1]]:3: warning: function 'CheckClass' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]916 CC100;917 918 try {919 } catch (...) {920// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}921 }922 }923 924 void ProtectedMemberFunction() {925// CHECK-NOTES: :[[@LINE-1]]:8: warning: function 'ProtectedMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]926 CC100;927 928 try {929 } catch (...) {930// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}931 }932 }933 934 void ProtectedConstMemberFunction() const {935// CHECK-NOTES: :[[@LINE-1]]:8: warning: function 'ProtectedConstMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]936 CC100;937 938 try {939 } catch (...) {940// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}941 }942 }943 944 static void ProtectedStaticMemberFunction() {945// CHECK-NOTES: :[[@LINE-1]]:15: warning: function 'ProtectedStaticMemberFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]946 CC100;947 948 try {949 } catch (...) {950// CHECK-NOTES: :[[@LINE-1]]:7: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}951 }952 }953};954 955void CheckClass::PublicFunctionDefinition() {956// CHECK-NOTES: :[[@LINE-1]]:18: warning: function 'PublicFunctionDefinition' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]957 CC100;958 959 try {960 } catch (...) {961// CHECK-NOTES: :[[@LINE-1]]:5: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}962 }963}964 965#define uglyfunctionmacro(name) \966 void name() { \967 CC100; \968 \969 if (true) { \970 try { \971 } catch (...) { \972 } \973 } \974 }975 976uglyfunctionmacro(MacroFunction)977// CHECK-NOTES: :[[@LINE-1]]:19: warning: function 'MacroFunction' has cognitive complexity of 3 (threshold 0) [readability-function-cognitive-complexity]978// CHECK-NOTES: :[[@LINE-2]]:1: note: +1, including nesting penalty of 0, nesting level increased to 1979// CHECK-NOTES: :[[@LINE-10]]:5: note: expanded from macro 'uglyfunctionmacro'980// CHECK-NOTES: :[[@LINE-4]]:1: note: +2, including nesting penalty of 1, nesting level increased to 2981// CHECK-NOTES: :[[@LINE-10]]:9: note: expanded from macro 'uglyfunctionmacro'982 983template<typename T>984void templatedFunction() {985// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'templatedFunction' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]986 CC100;987 988 try {989 } catch (...) {990// CHECK-NOTES: :[[@LINE-1]]:5: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}991 }992}993 994template<>995void templatedFunction<bool>() {996// CHECK-NOTES: :[[@LINE-1]]:6: warning: function 'templatedFunction<bool>' has cognitive complexity of 1 (threshold 0) [readability-function-cognitive-complexity]997 CC100;998 999 try {1000 } catch (...) {1001// CHECK-NOTES: :[[@LINE-1]]:5: note: +1, including nesting penalty of 0, nesting level increased to 1{{$}}1002 }1003}1004 1005template void templatedFunction<int>();1006 1007void functionThatCallsTemplatedFunctions() {1008 templatedFunction<int>();1009 1010 templatedFunction<bool>();1011 1012 templatedFunction<char>();1013 1014 templatedFunction<void*>();1015}1016 1017static void pr47779_dont_crash_on_weak() __attribute__((__weakref__("__pr47779_dont_crash_on_weak")));1018