Invalid code generation
Hi,
The code below should print :
a5 is 0
However it prints in my case:
a5 is 4196880
This is failing on Solaris 10 x86-64 with the following C command line:
cc -xarch=generic64 main.c
I think I have the latest patched version of cc:
cc: Sun C 5.8 Patch 121016-01 2006/01/26
Is this a known issue? Is there a workaround?
Thanks,
Manu
main.c:
[code]#include <stdio.h>
typedef union {
double darg;
inti32arg;
char *rarg;
} my_union;
/* Typed element */
typedef struct {
my_union element;
char type;
} my_typed_item;
void f (char * a1, char * a2, int a3, int a4, int a5, double a6, double a7, double a8, int a9, int a10) {
printf("a3 is %d\n", a3);
printf("a4 is %d\n", a4);
printf("a5 is %d\n", a5);
printf("a6 is %f\n", a6);
printf("a7 is %f\n", a7);
printf("a8 is %f\n", a8);
printf("a9 is %d\n", a9);
printf("a10 is %d\n", a10);
}
void * compute_pointer () {
return (void *) f;
}
void g (void * ptr, my_typed_item * closed, my_typed_item * open) {
((void (*) (char *, char *, int, int, int, double, double, double, int, int)) compute_pointer ()) (closed [1].element.rarg, closed [2].element.rarg, open [1].element.i32arg, open [2].element.i32arg, open [3].element.i32arg, open [4].element.darg, open [5].element.darg, open [6].element.darg, open [7].element.i32arg, open [8].element.i32arg);
}
void call_routine () {
my_typed_item closed[3];
my_typed_item open [9];
closed[1].element.rarg=NULL;
closed[2].element.rarg=NULL;
open[1].element.i32arg=0;
open[2].element.i32arg=0;
open[3].element.i32arg=0;
open[4].element.darg=0;
open[5].element.darg=0;
open[6].element.darg=0;
open[7].element.i32arg=0;
open[8].element.i32arg=0;
g (NULL, closed, open);
}
int main () {
call_routine ();
}[/code]

