Changeset ec776c4
- Timestamp:
- Apr 24, 2018, 4:07:11 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, with_gc
- Children:
- 1da22500
- Parents:
- 842c3d3
- git-author:
- Rob Schluntz <rschlunt@…> (04/24/18 16:07:04)
- git-committer:
- Rob Schluntz <rschlunt@…> (04/24/18 16:07:11)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/tests/references.c
r842c3d3 rec776c4 45 45 } 46 46 47 // --- temporary code needed to make array of references subscript work. 48 extern "C" { 49 void ** __index(__attribute__ ((unused)) size_t sizeof_T, __attribute__ ((unused)) size_t alignof_T, void **x, ptrdiff_t y) { 50 return (void **)((char *)x+y*sizeof(void *)); 51 } 52 void __ctor(void ***dst, void **src) { 53 *dst = src; 54 } 55 } 56 __attribute__((alias("__index"))) forall( dtype T | sized(T) ) T && ?[?]( T & * x, ptrdiff_t y ); 57 __attribute__((alias("__ctor"))) forall( dtype DT ) void ?{}( DT & * & dst, DT & * src); 58 forall( dtype DT ) void ^?{}( DT & * & ) {} 59 // --- end of temporary code 60 47 61 int main() { 48 62 int x = 123456, x2 = 789, *p1 = &x, **p2 = &p1, ***p3 = &p2, … … 52 66 *p3 = &p1; // change p2 53 67 int y = 0, z = 11, & ar[3] = { x, y, z }; // initialize array of references 54 //&ar[1] = &z; // change reference array element55 // typeof( ar[1] ) p;// is int, i.e., the type of referenced object56 // typeof( &ar[1] ) q; // is int &, i.e., the type of reference57 // sizeof( ar[1] ) == sizeof( int); // is true, i.e., the size of referenced object58 // sizeof( &ar[1] ) == sizeof( int *); // is true, i.e., the size of a reference68 &ar[1] = &z; // change reference array element 69 typeof( ar[1] ) p = 3; // is int, i.e., the type of referenced object 70 typeof( &ar[1] ) q = &x; // is int *, i.e., the type of pointer 71 _Static_assert( sizeof( ar[1] ) == sizeof( int ), "Array type should be int." ); // is true, i.e., the size of referenced object 72 _Static_assert( sizeof( &ar[1] ) == sizeof( int *), "Address of array should be int *." ); // is true, i.e., the size of a reference 59 73 60 74 ((int*&)&r3) = &x; // change r1, (&*)**r3
Note: See TracChangeset
for help on using the changeset viewer.