xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/avoid-do-while.cpp (revision 1af159e98c23a293c103e1f548866488126ed6f6)
11ae33bf4SCarlos Galvez // RUN: %check_clang_tidy -check-suffixes=DEFAULT       %s cppcoreguidelines-avoid-do-while %t
2*1af159e9SPiotr Zegar // RUN: %check_clang_tidy -check-suffixes=IGNORE-MACROS %s cppcoreguidelines-avoid-do-while %t -- -config='{CheckOptions: {cppcoreguidelines-avoid-do-while.IgnoreMacros: true}}'
31ae33bf4SCarlos Galvez 
41ae33bf4SCarlos Galvez #define FOO(x) \
51ae33bf4SCarlos Galvez   do { \
61ae33bf4SCarlos Galvez   } while (x != 0)
71ae33bf4SCarlos Galvez 
81ae33bf4SCarlos Galvez #define BAR_0(x) \
91ae33bf4SCarlos Galvez   do { \
101ae33bf4SCarlos Galvez     bar(x); \
111ae33bf4SCarlos Galvez   } while (0)
121ae33bf4SCarlos Galvez 
131ae33bf4SCarlos Galvez #define BAR_FALSE(x) \
141ae33bf4SCarlos Galvez   do { \
151ae33bf4SCarlos Galvez     bar(x); \
161ae33bf4SCarlos Galvez   } while (false)
171ae33bf4SCarlos Galvez 
181ae33bf4SCarlos Galvez void bar(int);
191ae33bf4SCarlos Galvez int baz();
201ae33bf4SCarlos Galvez 
foo()211ae33bf4SCarlos Galvez void foo()
221ae33bf4SCarlos Galvez {
231ae33bf4SCarlos Galvez     // CHECK-MESSAGES-IGNORE-MACROS: :[[@LINE+2]]:5: warning: avoid do-while loops [cppcoreguidelines-avoid-do-while]
241ae33bf4SCarlos Galvez     // CHECK-MESSAGES-DEFAULT: :[[@LINE+1]]:5: warning: avoid do-while loops [cppcoreguidelines-avoid-do-while]
251ae33bf4SCarlos Galvez     do {
261ae33bf4SCarlos Galvez 
271ae33bf4SCarlos Galvez     } while(0);
281ae33bf4SCarlos Galvez 
291ae33bf4SCarlos Galvez     // CHECK-MESSAGES-IGNORE-MACROS: :[[@LINE+2]]:5: warning: avoid do-while loops
301ae33bf4SCarlos Galvez     // CHECK-MESSAGES-DEFAULT: :[[@LINE+1]]:5: warning: avoid do-while loops
311ae33bf4SCarlos Galvez     do {
321ae33bf4SCarlos Galvez 
331ae33bf4SCarlos Galvez     } while(1);
341ae33bf4SCarlos Galvez 
351ae33bf4SCarlos Galvez     // CHECK-MESSAGES-IGNORE-MACROS: :[[@LINE+2]]:5: warning: avoid do-while loops
361ae33bf4SCarlos Galvez     // CHECK-MESSAGES-DEFAULT: :[[@LINE+1]]:5: warning: avoid do-while loops
371ae33bf4SCarlos Galvez     do {
381ae33bf4SCarlos Galvez 
391ae33bf4SCarlos Galvez     } while(-1);
401ae33bf4SCarlos Galvez 
411ae33bf4SCarlos Galvez     // CHECK-MESSAGES-IGNORE-MACROS: :[[@LINE+2]]:5: warning: avoid do-while loops
421ae33bf4SCarlos Galvez     // CHECK-MESSAGES-DEFAULT: :[[@LINE+1]]:5: warning: avoid do-while loops
431ae33bf4SCarlos Galvez     do {
441ae33bf4SCarlos Galvez 
451ae33bf4SCarlos Galvez     } while(false);
461ae33bf4SCarlos Galvez 
471ae33bf4SCarlos Galvez     // CHECK-MESSAGES-IGNORE-MACROS: :[[@LINE+2]]:5: warning: avoid do-while loops
481ae33bf4SCarlos Galvez     // CHECK-MESSAGES-DEFAULT: :[[@LINE+1]]:5: warning: avoid do-while loops
491ae33bf4SCarlos Galvez     do {
501ae33bf4SCarlos Galvez 
511ae33bf4SCarlos Galvez     } while(true);
521ae33bf4SCarlos Galvez 
531ae33bf4SCarlos Galvez     // CHECK-MESSAGES-IGNORE-MACROS: :[[@LINE+3]]:5: warning: avoid do-while loops
541ae33bf4SCarlos Galvez     // CHECK-MESSAGES-DEFAULT: :[[@LINE+2]]:5: warning: avoid do-while loops
551ae33bf4SCarlos Galvez     int x1{0};
561ae33bf4SCarlos Galvez     do {
571ae33bf4SCarlos Galvez       x1 = baz();
581ae33bf4SCarlos Galvez     } while (x1 > 0);
591ae33bf4SCarlos Galvez 
601ae33bf4SCarlos Galvez     // CHECK-MESSAGES-IGNORE-MACROS: :[[@LINE+2]]:5: warning: avoid do-while loops
611ae33bf4SCarlos Galvez     // CHECK-MESSAGES-DEFAULT: :[[@LINE+1]]:5: warning: avoid do-while loops
621ae33bf4SCarlos Galvez     do {
631ae33bf4SCarlos Galvez 
641ae33bf4SCarlos Galvez     } while (x1 != 0);
651ae33bf4SCarlos Galvez 
661ae33bf4SCarlos Galvez     // CHECK-MESSAGES-IGNORE-MACROS: :[[@LINE+3]]:5: warning: avoid do-while loops
671ae33bf4SCarlos Galvez     // CHECK-MESSAGES-DEFAULT: :[[@LINE+2]]:5: warning: avoid do-while loops
681ae33bf4SCarlos Galvez     constexpr int x2{0};
691ae33bf4SCarlos Galvez     do {
701ae33bf4SCarlos Galvez 
711ae33bf4SCarlos Galvez     } while (x2);
721ae33bf4SCarlos Galvez 
731ae33bf4SCarlos Galvez     // CHECK-MESSAGES-IGNORE-MACROS: :[[@LINE+3]]:5: warning: avoid do-while loops
741ae33bf4SCarlos Galvez     // CHECK-MESSAGES-DEFAULT: :[[@LINE+2]]:5: warning: avoid do-while loops
751ae33bf4SCarlos Galvez     constexpr bool x3{false};
761ae33bf4SCarlos Galvez     do {
771ae33bf4SCarlos Galvez 
781ae33bf4SCarlos Galvez     } while (x3);
791ae33bf4SCarlos Galvez 
801ae33bf4SCarlos Galvez     // CHECK-MESSAGES-DEFAULT: :[[@LINE+1]]:5: warning: avoid do-while loops
811ae33bf4SCarlos Galvez     FOO(x1);
821ae33bf4SCarlos Galvez 
831ae33bf4SCarlos Galvez     // CHECK-MESSAGES-DEFAULT: :[[@LINE+1]]:5: warning: avoid do-while loops
841ae33bf4SCarlos Galvez     BAR_0(x1);
851ae33bf4SCarlos Galvez 
861ae33bf4SCarlos Galvez     // CHECK-MESSAGES-DEFAULT: :[[@LINE+1]]:5: warning: avoid do-while loops
871ae33bf4SCarlos Galvez     BAR_FALSE(x1);
881ae33bf4SCarlos Galvez }
89