Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/examples/alloc.c

    rbd85400 rd3b7937  
    1 //                               -*- Mode: C -*-
    2 //
    3 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
    4 //
    5 // The contents of this file are covered under the licence agreement in the
    6 // file "LICENCE" distributed with Cforall.
    7 //
    8 // alloc.c --
    9 //
    10 // Author           : Peter A. Buhr
    11 // Created On       : Wed Feb  3 07:56:22 2016
    12 // Last Modified By : Peter A. Buhr
    13 // Last Modified On : Wed Feb  3 16:32:04 2016
    14 // Update Count     : 38
    15 //
     1#if 0
     2extern "C" {
     3    typedef long unsigned int size_t;
     4    void *malloc( size_t size );
     5    void *calloc( size_t nmemb, size_t size );
     6    void *realloc( void *ptr, size_t size );
     7    void *memset( void *s, int c, size_t n );
     8    void free( void * ptr );
     9    int printf( const char *, ... );
     10}
    1611
    17 #include <fstream>
    18 #include <stdlib>
    19 extern "C" {
    20 #include <stdlib.h>                                                                             // access C malloc, realloc
    21 #include <stdio.h>
    22 } // exten "C"
     12forall( type T ) T * malloc( void ) {
     13    return (T *)malloc( sizeof(T) );
     14}
     15forall( type T ) T * calloc( size_t size ) {
     16    return (T *)calloc( size, sizeof(T) );
     17}
     18#endif
     19typedef int size_t;
     20forall( type T ) T * realloc( T *ptr, size_t n ) {
     21//    return (T *)(void *)realloc( ptr, sizeof(T) );
     22}
     23//forall( type T ) T * realloc( T *ptr, size_t n, T c ) {
     24//    return (T *)realloc( ptr, n );
     25//}
    2326
    24 int * foo( int * p, int c ) { return p; }
    25 int * bar( int * p, int c ) { return p; }
    26 int * baz( int * p, int c ) { return p; }
     27//int *foo( int *p, int c );
     28//int *bar( int *p, int c );
     29//int *baz( int *p, int c );
    2730
    2831int main( void ) {
    29     ofstream * sout = ofstream_stdout();
     32    // size_t size = 10;
     33    //int * x = malloc();
     34    int * x;
     35    // x = malloc();
     36    // x = calloc( 10 );                                        // calloc: array set to 0
     37    // x = realloc( x, 10 );
     38    // x = realloc( x, 10, '\0' );
     39    // x = malloc( 5 );
     40    // float *fp = malloc() + 1;
    3041
    31     size_t size = 10;
    32     int * p;
    33     struct S { int x; double y; } * s;
    34 
    35     p = malloc( sizeof(*p) );                                                   // C malloc, type unsafe
    36         printf( "here1\n" );
    37     free( p );
    38     p = malloc();                                                                               // CFA malloc, type safe
    39         printf( "here2\n" );
    40     free( p );
    41     p = malloc( (char)'\0' );                                                                   // CFA malloc, type safe
    42         printf( "here3\n" );
    43     p = malloc( p, 1000 );                                                              // CFA remalloc, type safe
    44         printf( "here4\n" );
    45     free( p );
    46     p = calloc( size, sizeof(*p) );                                             // C calloc, type unsafe
    47         printf( "here5\n" );
    48     free( p );
    49     p = calloc( size );                                                                 // CFA calloc, type safe
    50         printf( "here6\n" );
    51     free( p );
    52     p = calloc( size );                                                                 // CFA calloc, type safe
    53     p = realloc( p, 1000 );                                                             // C realloc, type unsafe
    54     p = realloc( p, 1000, '\0' );                                               // CFA realloc, type unsafe
    55     p = memset( p );                                                                    // CFA memset, type unsafe
    56         printf( "here7\n" );
    57     free( p );
    58     p = memalign( 16 );
    59         printf( "here8\n" );
    60     free( p );
    61     posix_memalign( &p, 16 );
    62         printf( "here9\n" );
    63     free( p );
     42    struct St1 { int x; double y; };
     43    struct St1 * st1;
     44//    double *y;
     45    x = realloc( st1, 10 );                             // SHOULD FAIL!!
    6446#if 0
    65     float * fp = malloc() + 1;
    66     fprintf( stderr, "%p %p\n", fp, fp - 1 );
    67     free( fp - 1 );
    68     p = realloc( st1, size, '\0' );                                             // C realloc, type unsafe
    69 
    70     double *y;
    71     x = memset( st1, '\0' );                                                    // SHOULD FAIL!!
    72 
    7347    int *p;
    7448    p = foo( bar( baz( malloc(), 0 ), 0 ), 0 );
     
    10074    free( x );
    10175#endif
    102     free( sout );
    10376}
    104 
    105 // Local Variables: //
    106 // tab-width: 4 //
    107 // compile-command: "cfa alloc.c" //
    108 // End: //
Note: See TracChangeset for help on using the changeset viewer.