Home | History | Annotate | Download | only in testsuite
      1 // overflow_unittest.cc -- test functions that check for overflow.
      2 
      3 // Copyright (C) 2016 Free Software Foundation, Inc.
      4 // Written by Cary Coutant <ccoutant (at) google.com>.
      5 
      6 // This file is part of gold.
      7 
      8 // This program is free software; you can redistribute it and/or modify
      9 // it under the terms of the GNU General Public License as published by
     10 // the Free Software Foundation; either version 3 of the License, or
     11 // (at your option) any later version.
     12 
     13 // This program is distributed in the hope that it will be useful,
     14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
     15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16 // GNU General Public License for more details.
     17 
     18 // You should have received a copy of the GNU General Public License
     19 // along with this program; if not, write to the Free Software
     20 // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     21 // MA 02110-1301, USA.
     22 
     23 #include "gold.h"
     24 #include "reloc.h"
     25 
     26 #include <sys/types.h>
     27 
     28 #include "test.h"
     29 
     30 namespace gold_testsuite
     31 {
     32 
     33 using namespace gold;
     34 
     35 bool
     36 Overflow_test(Test_report*)
     37 {
     38   CHECK(! Bits<16>::has_unsigned_overflow(0ULL));
     39   CHECK(! Bits<16>::has_unsigned_overflow(1ULL));
     40   CHECK(! Bits<16>::has_unsigned_overflow(0x7fffULL));
     41   CHECK(! Bits<16>::has_unsigned_overflow(0x8000ULL));
     42   CHECK(! Bits<16>::has_unsigned_overflow(0x8001ULL));
     43   CHECK(! Bits<16>::has_unsigned_overflow(0xffffULL));
     44   CHECK(Bits<16>::has_unsigned_overflow(0x10000ULL));
     45   CHECK(Bits<16>::has_unsigned_overflow(0x10001ULL));
     46   CHECK(Bits<16>::has_unsigned_overflow(~0ULL));
     47   CHECK(Bits<16>::has_unsigned_overflow(~0x7fffULL + 1));
     48   CHECK(Bits<16>::has_unsigned_overflow(~0x8000ULL + 1));
     49   CHECK(Bits<16>::has_unsigned_overflow(~0x8001ULL + 1));
     50   CHECK(Bits<16>::has_unsigned_overflow(~0xffffULL + 1));
     51   CHECK(Bits<16>::has_unsigned_overflow(~0x10000ULL + 1));
     52   CHECK(Bits<16>::has_unsigned_overflow(~0x10001ULL + 1));
     53 
     54   CHECK(! Bits<16>::has_overflow(0ULL));
     55   CHECK(! Bits<16>::has_overflow(1ULL));
     56   CHECK(! Bits<16>::has_overflow(0x7fffULL));
     57   CHECK(Bits<16>::has_overflow(0x8000ULL));
     58   CHECK(Bits<16>::has_overflow(0x8001ULL));
     59   CHECK(Bits<16>::has_overflow(0xffffULL));
     60   CHECK(Bits<16>::has_overflow(0x10000ULL));
     61   CHECK(Bits<16>::has_overflow(0x10001ULL));
     62   CHECK(! Bits<16>::has_overflow(~0ULL));
     63   CHECK(! Bits<16>::has_overflow(~0x7fffULL + 1));
     64   CHECK(! Bits<16>::has_overflow(~0x8000ULL + 1));
     65   CHECK(Bits<16>::has_overflow(~0x8001ULL + 1));
     66   CHECK(Bits<16>::has_overflow(~0xffffULL + 1));
     67   CHECK(Bits<16>::has_overflow(~0x10000ULL + 1));
     68   CHECK(Bits<16>::has_overflow(~0x10001ULL + 1));
     69 
     70   CHECK(! Bits<16>::has_signed_unsigned_overflow64(0ULL));
     71   CHECK(! Bits<16>::has_signed_unsigned_overflow64(1ULL));
     72   CHECK(! Bits<16>::has_signed_unsigned_overflow64(0x7fffULL));
     73   CHECK(! Bits<16>::has_signed_unsigned_overflow64(0x8000ULL));
     74   CHECK(! Bits<16>::has_signed_unsigned_overflow64(0x8001ULL));
     75   CHECK(! Bits<16>::has_signed_unsigned_overflow64(0xffffULL));
     76   CHECK(Bits<16>::has_signed_unsigned_overflow64(0x10000ULL));
     77   CHECK(Bits<16>::has_signed_unsigned_overflow64(0x10001ULL));
     78   CHECK(! Bits<16>::has_signed_unsigned_overflow64(~0ULL));
     79   CHECK(! Bits<16>::has_signed_unsigned_overflow64(~0x7fffULL + 1));
     80   CHECK(! Bits<16>::has_signed_unsigned_overflow64(~0x8000ULL + 1));
     81   CHECK(Bits<16>::has_signed_unsigned_overflow64(~0x8001ULL + 1));
     82   CHECK(Bits<16>::has_signed_unsigned_overflow64(~0xffffULL + 1));
     83   CHECK(Bits<16>::has_signed_unsigned_overflow64(~0x10000ULL + 1));
     84   CHECK(Bits<16>::has_signed_unsigned_overflow64(~0x10001ULL + 1));
     85 
     86   CHECK(! Bits<16>::has_unsigned_overflow32(0U));
     87   CHECK(! Bits<16>::has_unsigned_overflow32(1U));
     88   CHECK(! Bits<16>::has_unsigned_overflow32(0x7fffU));
     89   CHECK(! Bits<16>::has_unsigned_overflow32(0x8000U));
     90   CHECK(! Bits<16>::has_unsigned_overflow32(0x8001U));
     91   CHECK(! Bits<16>::has_unsigned_overflow32(0xffffU));
     92   CHECK(Bits<16>::has_unsigned_overflow32(0x10000U));
     93   CHECK(Bits<16>::has_unsigned_overflow32(0x10001U));
     94   CHECK(Bits<16>::has_unsigned_overflow32(~0U));
     95   CHECK(Bits<16>::has_unsigned_overflow32(~0x7fffU + 1));
     96   CHECK(Bits<16>::has_unsigned_overflow32(~0x8000U + 1));
     97   CHECK(Bits<16>::has_unsigned_overflow32(~0x8001U + 1));
     98   CHECK(Bits<16>::has_unsigned_overflow32(~0xffffU + 1));
     99   CHECK(Bits<16>::has_unsigned_overflow32(~0x10000U + 1));
    100   CHECK(Bits<16>::has_unsigned_overflow32(~0x10001U + 1));
    101 
    102   CHECK(! Bits<16>::has_overflow32(0U));
    103   CHECK(! Bits<16>::has_overflow32(1U));
    104   CHECK(! Bits<16>::has_overflow32(0x7fffU));
    105   CHECK(Bits<16>::has_overflow32(0x8000U));
    106   CHECK(Bits<16>::has_overflow32(0x8001U));
    107   CHECK(Bits<16>::has_overflow32(0xffffU));
    108   CHECK(Bits<16>::has_overflow32(0x10000U));
    109   CHECK(Bits<16>::has_overflow32(0x10001U));
    110   CHECK(! Bits<16>::has_overflow32(~0U));
    111   CHECK(! Bits<16>::has_overflow32(~0x7fffU + 1));
    112   CHECK(! Bits<16>::has_overflow32(~0x8000U + 1));
    113   CHECK(Bits<16>::has_overflow32(~0x8001U + 1));
    114   CHECK(Bits<16>::has_overflow32(~0xffffU + 1));
    115   CHECK(Bits<16>::has_overflow32(~0x10000U + 1));
    116   CHECK(Bits<16>::has_overflow32(~0x10001U + 1));
    117 
    118   CHECK(! Bits<16>::has_signed_unsigned_overflow32(0U));
    119   CHECK(! Bits<16>::has_signed_unsigned_overflow32(1U));
    120   CHECK(! Bits<16>::has_signed_unsigned_overflow32(0x7fffU));
    121   CHECK(! Bits<16>::has_signed_unsigned_overflow32(0x8000U));
    122   CHECK(! Bits<16>::has_signed_unsigned_overflow32(0x8001U));
    123   CHECK(! Bits<16>::has_signed_unsigned_overflow32(0xffffU));
    124   CHECK(Bits<16>::has_signed_unsigned_overflow32(0x10000U));
    125   CHECK(Bits<16>::has_signed_unsigned_overflow32(0x10001U));
    126   CHECK(! Bits<16>::has_signed_unsigned_overflow32(~0U));
    127   CHECK(! Bits<16>::has_signed_unsigned_overflow32(~0x7fffU + 1));
    128   CHECK(! Bits<16>::has_signed_unsigned_overflow32(~0x8000U + 1));
    129   CHECK(Bits<16>::has_signed_unsigned_overflow32(~0x8001U + 1));
    130   CHECK(Bits<16>::has_signed_unsigned_overflow32(~0xffffU + 1));
    131   CHECK(Bits<16>::has_signed_unsigned_overflow32(~0x10000U + 1));
    132   CHECK(Bits<16>::has_signed_unsigned_overflow32(~0x10001U + 1));
    133 
    134   return true;
    135 }
    136 
    137 Register_test overflow_register("Overflow", Overflow_test);
    138 
    139 } // End namespace gold_testsuite.
    140