brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.3 KiB · b6264ab Raw
380 lines · c
1// RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -DUNSIGNED -verify %s2// RUN: %clang_cc1 -triple=x86_64-pc-win32 -fsyntax-only -DSIGNED -verify %s3// RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -DUNSIGNED -DSILENCE -Wno-tautological-constant-out-of-range-compare -verify %s4// RUN: %clang_cc1 -triple=x86_64-pc-win32 -fsyntax-only -DSIGNED -DSILENCE -Wno-tautological-constant-out-of-range-compare -verify %s5 6int main(void) {7  enum A { A_a = 2 };8  enum A a;9 10#ifdef SILENCE11  // expected-no-diagnostics12#endif13 14#ifdef UNSIGNED15#ifndef SILENCE16  if (a < 4294967296) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always true}}17    return 0;18  if (4294967296 >= a) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always true}}19    return 0;20  if (a > 4294967296) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always false}}21    return 0;22  if (4294967296 <= a) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always false}}23    return 0;24  if (a <= 4294967296) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always true}}25    return 0;26  if (4294967296 > a) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always true}}27    return 0;28  if (a >= 4294967296) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always false}}29    return 0;30  if (4294967296 < a) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always false}}31    return 0;32  if (a == 4294967296) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always false}}33    return 0;34  if (4294967296 != a) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always true}}35    return 0;36  if (a != 4294967296) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always true}}37    return 0;38  if (4294967296 == a) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always false}}39    return 0;40 41  if (a < 4294967296U) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always true}}42    return 0;43  if (4294967296U >= a) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always true}}44    return 0;45  if (a > 4294967296U) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always false}}46    return 0;47  if (4294967296U <= a) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always false}}48    return 0;49  if (a <= 4294967296U) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always true}}50    return 0;51  if (4294967296U > a) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always true}}52    return 0;53  if (a >= 4294967296U) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always false}}54    return 0;55  if (4294967296U < a) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always false}}56    return 0;57  if (a == 4294967296U) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always false}}58    return 0;59  if (4294967296U != a) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always true}}60    return 0;61  if (a != 4294967296U) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always true}}62    return 0;63  if (4294967296U == a) // expected-warning {{comparison of constant 4294967296 with expression of type 'enum A' is always false}}64    return 0;65#else // SILENCE66  if (a < 4294967296)67    return 0;68  if (4294967296 >= a)69    return 0;70  if (a > 4294967296)71    return 0;72  if (4294967296 <= a)73    return 0;74  if (a <= 4294967296)75    return 0;76  if (4294967296 > a)77    return 0;78  if (a >= 4294967296)79    return 0;80  if (4294967296 < a)81    return 0;82  if (a == 4294967296)83    return 0;84  if (4294967296 != a)85    return 0;86  if (a != 4294967296)87    return 0;88  if (4294967296 == a)89    return 0;90 91  if (a < 4294967296U)92    return 0;93  if (4294967296U >= a)94    return 0;95  if (a > 4294967296U)96    return 0;97  if (4294967296U <= a)98    return 0;99  if (a <= 4294967296U)100    return 0;101  if (4294967296U > a)102    return 0;103  if (a >= 4294967296U)104    return 0;105  if (4294967296U < a)106    return 0;107  if (a == 4294967296U)108    return 0;109  if (4294967296U != a)110    return 0;111  if (a != 4294967296U)112    return 0;113  if (4294967296U == a)114    return 0;115#endif116#elif defined(SIGNED)117#ifndef SILENCE118  if (a < -2147483649) // expected-warning {{comparison of constant -2147483649 with expression of type 'enum A' is always false}}119    return 0;120  if (-2147483649 >= a) // expected-warning {{comparison of constant -2147483649 with expression of type 'enum A' is always false}}121    return 0;122  if (a > -2147483649) // expected-warning {{comparison of constant -2147483649 with expression of type 'enum A' is always true}}123    return 0;124  if (-2147483649 <= a) // expected-warning {{comparison of constant -2147483649 with expression of type 'enum A' is always true}}125    return 0;126  if (a <= -2147483649) // expected-warning {{comparison of constant -2147483649 with expression of type 'enum A' is always false}}127    return 0;128  if (-2147483649 > a) // expected-warning {{comparison of constant -2147483649 with expression of type 'enum A' is always false}}129    return 0;130  if (a >= -2147483649) // expected-warning {{comparison of constant -2147483649 with expression of type 'enum A' is always true}}131    return 0;132  if (-2147483649 < a) // expected-warning {{comparison of constant -2147483649 with expression of type 'enum A' is always true}}133    return 0;134  if (a == -2147483649) // expected-warning {{comparison of constant -2147483649 with expression of type 'enum A' is always false}}135    return 0;136  if (-2147483649 != a) // expected-warning {{comparison of constant -2147483649 with expression of type 'enum A' is always true}}137    return 0;138  if (a != -2147483649) // expected-warning {{comparison of constant -2147483649 with expression of type 'enum A' is always true}}139    return 0;140  if (-2147483649 == a) // expected-warning {{comparison of constant -2147483649 with expression of type 'enum A' is always false}}141    return 0;142 143  if (a < 2147483648) // expected-warning {{comparison of constant 2147483648 with expression of type 'enum A' is always true}}144    return 0;145  if (2147483648 >= a) // expected-warning {{comparison of constant 2147483648 with expression of type 'enum A' is always true}}146    return 0;147  if (a > 2147483648) // expected-warning {{comparison of constant 2147483648 with expression of type 'enum A' is always false}}148    return 0;149  if (2147483648 <= a) // expected-warning {{comparison of constant 2147483648 with expression of type 'enum A' is always false}}150    return 0;151  if (a <= 2147483648) // expected-warning {{comparison of constant 2147483648 with expression of type 'enum A' is always true}}152    return 0;153  if (2147483648 > a) // expected-warning {{comparison of constant 2147483648 with expression of type 'enum A' is always true}}154    return 0;155  if (a >= 2147483648) // expected-warning {{comparison of constant 2147483648 with expression of type 'enum A' is always false}}156    return 0;157  if (2147483648 < a) // expected-warning {{comparison of constant 2147483648 with expression of type 'enum A' is always false}}158    return 0;159  if (a == 2147483648) // expected-warning {{comparison of constant 2147483648 with expression of type 'enum A' is always false}}160    return 0;161  if (2147483648 != a) // expected-warning {{comparison of constant 2147483648 with expression of type 'enum A' is always true}}162    return 0;163  if (a != 2147483648) // expected-warning {{comparison of constant 2147483648 with expression of type 'enum A' is always true}}164    return 0;165  if (2147483648 == a) // expected-warning {{comparison of constant 2147483648 with expression of type 'enum A' is always false}}166    return 0;167#else // SILENCE168  if (a < -2147483649)169    return 0;170  if (-2147483649 >= a)171    return 0;172  if (a > -2147483649)173    return 0;174  if (-2147483649 <= a)175    return 0;176  if (a <= -2147483649)177    return 0;178  if (-2147483649 > a)179    return 0;180  if (a >= -2147483649)181    return 0;182  if (-2147483649 < a)183    return 0;184  if (a == -2147483649)185    return 0;186  if (-2147483649 != a)187    return 0;188  if (a != -2147483649)189    return 0;190  if (-2147483649 == a)191    return 0;192 193  if (a < 2147483648)194    return 0;195  if (2147483648 >= a)196    return 0;197  if (a > 2147483648)198    return 0;199  if (2147483648 <= a)200    return 0;201  if (a <= 2147483648)202    return 0;203  if (2147483648 > a)204    return 0;205  if (a >= 2147483648)206    return 0;207  if (2147483648 < a)208    return 0;209  if (a == 2147483648)210    return 0;211  if (2147483648 != a)212    return 0;213  if (a != 2147483648)214    return 0;215  if (2147483648 == a)216    return 0;217#endif218#endif219}220 221// https://bugs.llvm.org/show_bug.cgi?id=35009222int PR35009(void) {223  enum A { A_a = 2 };224  enum A a;225 226  // in C, this should not warn.227 228  if (a < 1)229    return 0;230  if (1 >= a)231    return 0;232  if (a > 1)233    return 0;234  if (1 <= a)235    return 0;236  if (a <= 1)237    return 0;238  if (1 > a)239    return 0;240  if (a >= 1)241    return 0;242  if (1 < a)243    return 0;244  if (a == 1)245    return 0;246  if (1 != a)247    return 0;248  if (a != 1)249    return 0;250  if (1 == a)251    return 0;252 253  if (a < 1U)254    return 0;255  if (1U >= a)256    return 0;257  if (a > 1U)258    return 0;259  if (1U <= a)260    return 0;261  if (a <= 1U)262    return 0;263  if (1U > a)264    return 0;265  if (a >= 1U)266    return 0;267  if (1U < a)268    return 0;269  if (a == 1U)270    return 0;271  if (1U != a)272    return 0;273  if (a != 1U)274    return 0;275  if (1U == a)276    return 0;277 278  if (a < 2)279    return 0;280  if (2 >= a)281    return 0;282  if (a > 2)283    return 0;284  if (2 <= a)285    return 0;286  if (a <= 2)287    return 0;288  if (2 > a)289    return 0;290  if (a >= 2)291    return 0;292  if (2 < a)293    return 0;294  if (a == 2)295    return 0;296  if (2 != a)297    return 0;298  if (a != 2)299    return 0;300  if (2 == a)301    return 0;302 303  if (a < 2U)304    return 0;305  if (2U >= a)306    return 0;307  if (a > 2U)308    return 0;309  if (2U <= a)310    return 0;311  if (a <= 2U)312    return 0;313  if (2U > a)314    return 0;315  if (a >= 2U)316    return 0;317  if (2U < a)318    return 0;319  if (a == 2U)320    return 0;321  if (2U != a)322    return 0;323  if (a != 2U)324    return 0;325  if (2U == a)326    return 0;327 328  if (a < 3)329    return 0;330  if (3 >= a)331    return 0;332  if (a > 3)333    return 0;334  if (3 <= a)335    return 0;336  if (a <= 3)337    return 0;338  if (3 > a)339    return 0;340  if (a >= 3)341    return 0;342  if (3 < a)343    return 0;344  if (a == 3)345    return 0;346  if (3 != a)347    return 0;348  if (a != 3)349    return 0;350  if (3 == a)351    return 0;352 353  if (a < 3U)354    return 0;355  if (3U >= a)356    return 0;357  if (a > 3U)358    return 0;359  if (3U <= a)360    return 0;361  if (a <= 3U)362    return 0;363  if (3U > a)364    return 0;365  if (a >= 3U)366    return 0;367  if (3U < a)368    return 0;369  if (a == 3U)370    return 0;371  if (3U != a)372    return 0;373  if (a != 3U)374    return 0;375  if (3U == a)376    return 0;377 378  return 1;379}380