modernc.org/cc@v1.0.1/testdata/arith-1.c (about)

     1  /* Preprocessor arithmetic semantic tests.  */
     2  
     3  /* Copyright (C) 2002 Free Software Foundation, Inc.  */
     4  /* Source: Neil Booth, 25 May 2002.  */
     5  
     6  /* The file tests all aspects of preprocessor arithmetic that are
     7     independent of target precision.  */
     8  
     9  /* { dg-do preprocess } */
    10  /* { dg-options "" } */
    11  
    12  /* Test || operator and its short circuiting.  */
    13  #if 0 || 0
    14  # error		/* { dg-bogus "error" }  */
    15  #endif
    16  
    17  #if 5 || 0
    18  #else
    19  # error		/* { dg-bogus "error" }  */
    20  #endif
    21  
    22  #if 0 || 1
    23  #else
    24  # error		/* { dg-bogus "error" }  */
    25  #endif
    26  
    27  #if 1 || 4
    28  #else
    29  # error		/* { dg-bogus "error" }  */
    30  #endif
    31  
    32  #if 1 || (8 / 0) /* { dg-bogus "division by zero" }  */
    33  #else
    34  # error		/* { dg-bogus "error" }  */
    35  #endif
    36  
    37  #if 1 || (1 << 256) /* { dg-bogus "overflow" }  */
    38  #endif
    39  
    40  /* Test && operator and its short circuiting.  */
    41  #if (0 && 0) || (0 && 1) || (1 && 0)
    42  # error		/* { dg-bogus "error" }  */
    43  #endif
    44  
    45  #if 1 && 2
    46  #else
    47  # error		/* { dg-bogus "error" }  */
    48  #endif
    49  
    50  #if 0 && (8 / 0)/* { dg-bogus "division by zero" }  */
    51  # error		/* { dg-bogus "error" }  */
    52  #endif
    53  
    54  #if 0 && (1 << 256) /* { dg-bogus "overflow" }  */
    55  #endif
    56  
    57  /* Test == and != operators, and their signedness.  */
    58  #if 1 == 0 || 0 == 1 || 20 != 0x014 || 142 != 0216
    59  # error		/* { dg-bogus "error" }  */
    60  #endif
    61  
    62  #if (1 == 1) - 2 > 0 || (1U != 1U) - 2 > 0
    63  # error		/* { dg-bogus "error" }  */
    64  #endif
    65  
    66  /* Test ? : operator, its short circuiting, and its signedness.  */
    67  #if (1 ? 3: 5) != 3 || (0 ? 3: 5) != 5
    68  # error		/* { dg-bogus "error" }  */
    69  #endif
    70  
    71  #if 1 ? 0: 1 / 0 /* { dg-bogus "division by zero" }  */
    72  # error		/* { dg-bogus "error" }  */
    73  #endif
    74  
    75  #if 0 ? 1 / 0: 0 /* { dg-bogus "division by zero" }  */
    76  # error		/* { dg-bogus "error" }  */
    77  #endif
    78  
    79  #if 0 ? (1 << 256): 0 /* { dg-bogus "overflow" }  */
    80  #endif
    81  
    82  #if 1 ? 0: (1 << 256) /* { dg-bogus "overflow" }  */
    83  #endif
    84  
    85  /* Test unary + and its signedness.  */
    86  
    87  #if 23 != +23 || 23 != + +23
    88  # error		/* { dg-bogus "error" }  */
    89  #endif
    90  
    91  #if (+1 - 2) > 0 || (+1U - 2) < 0
    92  # error		/* { dg-bogus "error" }  */
    93  #endif
    94  
    95  /* Test unary - and its signedness.  */
    96  
    97  #if -1 + 1 != 0
    98  # error		/* { dg-bogus "error" }  */
    99  #endif
   100  
   101  #if -1 >= 0 || -1U <= 0
   102  # error		/* { dg-bogus "error" }  */
   103  #endif
   104  
   105  /* Test unary ! and its signedness.  */
   106  #if !5 != 0 || !1 != 0 || !0 != 1
   107  # error		/* { dg-bogus "error" }  */
   108  #endif
   109  
   110  #if !5 - 1 > 0 || !5U - 1 > 0
   111  # error		/* { dg-bogus "error" }  */
   112  #endif
   113  
   114  /* Test unary ~ and its signedness.  */
   115  #if ~0 != -1 || ~~5 != 5 || ~-2 != 1
   116  # error		/* { dg-bogus "error" }  */
   117  #endif
   118  
   119  #if ~5 > 0 || ~5U < 0
   120  # error		/* { dg-bogus "error" }  */
   121  #endif
   122  
   123  /* Test comparison operators and their signedness.  */
   124  #if 1 >= 1 && 2 >= 1 && -1 >= -1 && -1 >= -2 && 1 >= -1 && 1 >= -2 \
   125      && !(-2 >= -1) && !(2 >= 3) && -1U >= 2 && !(-1 >= 1)
   126  #else
   127  # error		/* { dg-bogus "error" }  */
   128  #endif
   129  
   130  #if ((1 > 0) - 2) > 0 || ((1U > 0) - 2) > 0
   131  # error		/* { dg-bogus "error" }  */
   132  #endif
   133  
   134  #if !(1 > 1) && 2 > 1 && !(-1 > -1) && -1 > -2 && 1 > -1 && 1 > -2 \
   135      && !(-2 > -1) && !(2 > 3) && -1U > 2 && !(-1 > 1)
   136  #else
   137  # error		/* { dg-bogus "error" }  */
   138  #endif
   139  
   140  #if ((1 >= 0) - 2) > 0 || ((1U >= 0) - 2) > 0
   141  # error		/* { dg-bogus "error" }  */
   142  #endif
   143  
   144  #if 1 <= 1 && !(2 <= 1) && -1 <= -1 && !(-1 <= -2) && !(1 <= -1) && !(1 <= -2) \
   145      && -2 <= -1 && 2 <= 3 && !(-1U <= 2) && -1 <= 1
   146  #else
   147  # error		/* { dg-bogus "error" }  */
   148  #endif
   149  
   150  #if ((1 <= 0) - 2) > 0 || ((1U <= 0) - 2) > 0
   151  # error		/* { dg-bogus "error" }  */
   152  #endif
   153  
   154  #if !(1 < 1) && !(2 < 1) && !(-1 < -1) && !(-1 < -2) && !(1 < -1) && !(1 < -2) \
   155      && -2 < -1 && 2 < 3 && !(-1U < 2) && -1 < 1
   156  #else
   157  # error		/* { dg-bogus "error" }  */
   158  #endif
   159  
   160  #if ((1 < 0) - 2) > 0 || ((1U < 0) - 2) > 0
   161  # error		/* { dg-bogus "error" }  */
   162  #endif
   163  
   164  /* Test bitwise operators and their signedness.  */
   165  #if (3 & 7) != 3 || (-1 & 34) != 34
   166  # error		/* { dg-bogus "error" }  */
   167  #endif
   168  
   169  #if (3 & 7) - 20 > 0 || (3 & 7U) - 20 < 0
   170  # error		/* { dg-bogus "error" }  */
   171  #endif
   172  
   173  #if (3 | 5) != 7 || (-1 | 34) != -1
   174  # error		/* { dg-bogus "error" }  */
   175  #endif
   176  
   177  #if (3 | 7) - 20 > 0 || (3 | 7U) - 20 < 0
   178  # error		/* { dg-bogus "error" }  */
   179  #endif
   180  
   181  #if (7 ^ 5) != 2 || (-1 ^ 34) != ~34
   182  # error		/* { dg-bogus "error" }  */
   183  #endif
   184  
   185  #if (3 ^ 7) - 20 > 0 || (3 ^ 7U) - 20 < 0
   186  # error		/* { dg-bogus "error" }  */
   187  #endif
   188  
   189  /* Test shifts and their signedness.  */
   190  #if 3 << 2 != 12 || 3 << -2 != 0 || -1 << 1 != -2
   191  # error		/* { dg-bogus "error" }  */
   192  #endif
   193  
   194  #if 5 >> 1 != 2 || 5 >> -2 != 20 || -5 >> 1 != -3
   195  # error		/* { dg-bogus "error" }  */
   196  #endif
   197  
   198  #if (5 >> 2) - 2 >= 0 || (5U >> 2) - 2 <= 0
   199  # error		/* { dg-bogus "error" }  */
   200  #endif
   201  
   202  #if (5 << 1) - 20 >= 0 || (5U << 1) - 20 <= 0
   203  # error		/* { dg-bogus "error" }  */
   204  #endif
   205  
   206  #if 0
   207  /* Test min / max and their signedness.  */
   208  #if (3 >? 2) != 3 || (-3 >? -2) != -2
   209  # error		/* { dg-bogus "error" }  */
   210  #endif
   211  
   212  #if (3 <? 2) != 2 || (-3 <? -2) != -3
   213  # error		/* { dg-bogus "error" }  */
   214  #endif
   215  
   216  #if (3 >? 2) - 4 >= 0 || (3 >? 2U) - 4 <= 0
   217  # error		/* { dg-bogus "error" }  */
   218  #endif
   219  
   220  #if (3 <? 2) - 4 >= 0 || (3 <? 2U) - 4 <= 0
   221  # error		/* { dg-bogus "error" }  */
   222  #endif
   223  #endif
   224  
   225  /* Test *, / and % and their signedness.  */
   226  #if 3 * 2 != 6 || 3 * -2 != -6 || -2 * 3 != -6 || -2 * -3 != 6
   227  # error		/* { dg-bogus "error" }  */
   228  #endif
   229  
   230  #if 3 * 2 - 7 >= 0 || 3 * 2U - 7 < 0
   231  # error		/* { dg-bogus "error" }  */
   232  #endif
   233  
   234  #if 5 / 2 != 2 || -325 / 50 != -6 || 53 / -4 != -13 || -55 / -12 != 4
   235  # error		/* { dg-bogus "error" }  */
   236  #endif
   237  
   238  #if 3 / 2 - 7 >= 0 || 3 / 2U - 7 < 0
   239  # error		/* { dg-bogus "error" }  */
   240  #endif
   241  
   242  #if 5 % 2 != 1 || -325 % 50 != -25 || 53 % -4 != 1 || -55 % -12 != -7
   243  # error		/* { dg-bogus "error" }  */
   244  #endif
   245  
   246  #if 3 % 2 - 7 >= 0 || 3U % 2 - 7 < 0
   247  # error		/* { dg-bogus "error" }  */
   248  #endif
   249  
   250  /* Test , and its signedness.  */
   251  #if (1, 2) != 2 || (2, 1) != 1
   252  # error		/* { dg-bogus "error" }  */
   253  #endif
   254  
   255  #if (1, 2) - 3 >= 0 || (1, 2U) - 3 <= 0 || (1U, 2) - 3 >= 0
   256  # error		/* { dg-bogus "error" }  */
   257  #endif