Home | History | Annotate | Download | only in tests
      1 
      2 #include <stdlib.h>
      3 
      4 int main ( void )
      5 {
      6    int* x3 = malloc(3);    float         f,   *f3   = malloc(3);
      7    int* x4 = malloc(4);    double        d,   *d7   = malloc(7);
      8    int* x5 = malloc(5);    long long int lli, *lli7 = malloc(7);
      9    int* x6 = malloc(6);    char          c,   *c0   = malloc(0);
     10    int* x7 = malloc(7);    short int     s,   *s1   = malloc(1);
     11    int  x;
     12    int* y4 = malloc(4);
     13    int* y5 = malloc(5);
     14    int* y6 = malloc(6);
     15    int* y7 = malloc(7);
     16 
     17    #define ADDB(ptr, n)  ((int*)(((unsigned long)(ptr)) + (n)))
     18 
     19    // All these overrun by a single byte;  the reads are happening at
     20    // different alignments.
     21    x = * ADDB(x3,0);    // ok if --partial-loads-ok=yes
     22    x = * ADDB(x4,1);
     23    x = * ADDB(x5,2);
     24    x = * ADDB(x6,3);
     25    x = * ADDB(x7,4);    // ok if --partial-loads-ok=yes
     26 
     27    // These are fine
     28    x = * ADDB(y4,0);
     29    x = * ADDB(y5,1);
     30    x = * ADDB(y6,2);
     31    x = * ADDB(y7,3);
     32 
     33    // These are all bad, at different points along
     34    x = * ADDB(x3,-1);   // before
     35    x = * ADDB(x3, 0);   // inside      // ok if --partial-loads-ok=yes ...
     36    x = * ADDB(x3, 1);   // inside      // ... but only on 32 bit platforms
     37    x = * ADDB(x3, 2);   // inside      // ... ditto
     38    x = * ADDB(x3, 3);   // after
     39 
     40    // These are all bad
     41    f   = * f3;    // ok if --partial-loads-ok=yes  // ... ditto
     42    d   = * d7;
     43    lli = * lli7;  // ok if --partial-loads-ok=yes  see XXX below
     44    c   = * c0;
     45    s   = * s1;
     46 
     47    return 0;
     48 }
     49 
     50 /* Note re XXX, this gives different behaviour on 32 and 64 bit
     51 platforms, because on 64-bit it's one load whereas as on 32 bit
     52 platforms it's necessarily 2 32-bit loads, and the first one is OK. */
     53