Changes in src/tests/tuplePolymorphism.c [ebb5ed9:f7e749f]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/tests/tuplePolymorphism.c
rebb5ed9 rf7e749f 14 14 // 15 15 16 // packed is needed so that structs are not passed with the same alignment as function arguments17 __attribute__((packed)) struct A {18 double x;19 char y;20 double z;21 };22 23 __attribute__((packed)) struct B {24 long long x;25 char y;26 long long z;27 };28 29 // ensure that f is a viable candidate for g, even though its parameter structure does not exactly match30 [A] f([A, B] x, B y) { printf("%g %c %g %lld %c %lld %lld %c %lld\n", x.0.[x,y,z], x.1.[x,y,z], y.[x,y,z]); return x.0; }31 forall(otype T, otype U | { T f(T, U, U); })32 void g(T x, U y) { f(x, y, y); }33 34 // add two triples35 16 forall(otype T | { T ?+?(T, T); }) 36 17 [T, T, T] ?+?([T, T, T] x, [T, T, T] y) { … … 59 40 [x1, x2, x3] = zzz+zzz; 60 41 printf("%d %g %d\n", x1, x2, x3); 61 62 // ensure non-matching assertions are specialized correctly63 g((A){ 1.21, 'x', 10.21}, (B){ 1111LL, 'v', 54385938LL });64 42 } 65 43
Note:
See TracChangeset
for help on using the changeset viewer.