1*e8a3ddafSNathan James // RUN: %check_clang_tidy %s android-comparison-in-temp-failure-retry %t -- -config="{CheckOptions: {android-comparison-in-temp-failure-retry.RetryMacros: 'MY_TEMP_FAILURE_RETRY,MY_OTHER_TEMP_FAILURE_RETRY'}}"
289a1d03eSRichard 
389a1d03eSRichard #define MY_TEMP_FAILURE_RETRY(x) \
489a1d03eSRichard   ({                             \
589a1d03eSRichard     typeof(x) __z;               \
689a1d03eSRichard     do                           \
789a1d03eSRichard       __z = (x);                 \
889a1d03eSRichard     while (__z == -1);           \
989a1d03eSRichard     __z;                         \
1089a1d03eSRichard   })
1189a1d03eSRichard 
1289a1d03eSRichard #define MY_OTHER_TEMP_FAILURE_RETRY(x) \
1389a1d03eSRichard   ({                                   \
1489a1d03eSRichard     typeof(x) __z;                     \
1589a1d03eSRichard     do                                 \
1689a1d03eSRichard       __z = (x);                       \
1789a1d03eSRichard     while (__z == -1);                 \
1889a1d03eSRichard     __z;                               \
1989a1d03eSRichard   })
2089a1d03eSRichard 
2189a1d03eSRichard int foo(void);
2289a1d03eSRichard int bar(int a);
2389a1d03eSRichard 
with_custom_macro(void)2489a1d03eSRichard void with_custom_macro(void) {
2589a1d03eSRichard   MY_TEMP_FAILURE_RETRY(foo());
2689a1d03eSRichard   MY_TEMP_FAILURE_RETRY(foo() == 1);
2789a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: top-level comparison in MY_TEMP_FAILURE_RETRY
2889a1d03eSRichard   MY_TEMP_FAILURE_RETRY((foo()));
2989a1d03eSRichard   MY_TEMP_FAILURE_RETRY((int)(foo() == 1));
3089a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: top-level comparison in MY_TEMP_FAILURE_RETRY
3189a1d03eSRichard   MY_TEMP_FAILURE_RETRY((bar(foo() == 1)));
3289a1d03eSRichard   MY_TEMP_FAILURE_RETRY((int)((bar(foo() == 1)) == 1));
3389a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:49: warning: top-level comparison in MY_TEMP_FAILURE_RETRY
3489a1d03eSRichard }
3589a1d03eSRichard 
with_other_custom_macro(void)3689a1d03eSRichard void with_other_custom_macro(void) {
3789a1d03eSRichard   MY_OTHER_TEMP_FAILURE_RETRY(foo());
3889a1d03eSRichard   MY_OTHER_TEMP_FAILURE_RETRY(foo() == 1);
3989a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: top-level comparison in MY_OTHER_TEMP_FAILURE_RETRY
4089a1d03eSRichard   MY_OTHER_TEMP_FAILURE_RETRY((foo()));
4189a1d03eSRichard   MY_OTHER_TEMP_FAILURE_RETRY((int)(foo() == 1));
4289a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: top-level comparison in MY_OTHER_TEMP_FAILURE_RETRY
4389a1d03eSRichard   MY_OTHER_TEMP_FAILURE_RETRY((bar(foo() == 1)));
4489a1d03eSRichard   MY_OTHER_TEMP_FAILURE_RETRY((int)((bar(foo() == 1)) == 1));
4589a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:55: warning: top-level comparison in MY_OTHER_TEMP_FAILURE_RETRY
4689a1d03eSRichard }
47