/* PR 3967 local-alloc screwed up consideration of high+lo_sum and created reg_equivs that it shouldn't have, resulting in lo_sum with uninitialized data, resulting in segv. The test has to remain relatively large, since register spilling is required to twig the bug. */ unsigned long *Local1; unsigned long *Local2; unsigned long *Local3; unsigned long *RDbf1; unsigned long *RDbf2; unsigned long *RDbf3; unsigned long *IntVc1; unsigned long *IntVc2; unsigned long *IntCode3; unsigned long *IntCode4; unsigned long *IntCode5; unsigned long *IntCode6; unsigned long *Lom1; unsigned long *Lom2; unsigned long *Lom3; unsigned long *Lom4; unsigned long *Lom5; unsigned long *Lom6; unsigned long *Lom7; unsigned long *Lom8; unsigned long *Lom9; unsigned long *Lom10; unsigned long *RDbf11; unsigned long *RDbf12; typedef struct { long a1; unsigned long n1; unsigned long local1; unsigned long local2; unsigned long local3; unsigned long rdbf1; unsigned long rdbf2; unsigned long milli; unsigned long frames1; unsigned long frames2; unsigned long nonShared; long newPrivate; long freeLimit; unsigned long cache1; unsigned long cache2; unsigned long cache3; unsigned long cache4; unsigned long cache5; unsigned long time6; unsigned long frames7; unsigned long page8; unsigned long ot9; unsigned long data10; unsigned long bm11; unsigned long misc12; } ShrPcCommonStatSType; typedef struct { unsigned long sharedAttached; unsigned long totalAttached; long avgPercentShared; unsigned long numberOfFreeFrames; unsigned long localDirtyPageCount; unsigned long globalDirtyPageCount; long wakeupInterval; unsigned long numActiveProcesses; unsigned long numRecentActiveProcesses; unsigned long gemDirtyPageKinds[10]; unsigned long stoneDirtyPageKinds[10]; unsigned long gemsInCacheCount; long targetFreeFrameCount; } ShrPcMonStatSType; typedef struct { unsigned long c1; unsigned long c2; unsigned long c3; unsigned long c4; unsigned long c5; unsigned long c6; unsigned long c7; unsigned long c8; unsigned long c9; unsigned long c10; unsigned long c11; unsigned long c12; unsigned long a1; unsigned long a2; unsigned long a3; unsigned long a4; unsigned long a5; unsigned long a6; unsigned long a7; unsigned long a8; unsigned long a9; unsigned long a10; unsigned long a11; unsigned long a12; unsigned long a13; unsigned long a14; unsigned long a15; unsigned long a16; unsigned long a17; unsigned long a18; unsigned long a19; unsigned long sessionStats[40]; } ShrPcGemStatSType; union ShrPcStatUnion { ShrPcMonStatSType monitor; ShrPcGemStatSType gem; }; typedef struct { int processId; int sessionId; ShrPcCommonStatSType cmn; union ShrPcStatUnion u; } ShrPcStatsSType; typedef struct { unsigned long *p1; unsigned long *p2; unsigned long *p3; unsigned long *p4; unsigned long *p5; unsigned long *p6; unsigned long *p7; unsigned long *p8; unsigned long *p9; unsigned long *p10; unsigned long *p11; } WorkEntrySType; WorkEntrySType Workspace; static void setStatPointers (ShrPcStatsSType * statsPtr, long sessionId) { statsPtr->sessionId = sessionId; statsPtr->cmn.a1 = 0; statsPtr->cmn.n1 = 5; Local1 = &statsPtr->cmn.local1; Local2 = &statsPtr->cmn.local2; Local3 = &statsPtr->cmn.local3; RDbf1 = &statsPtr->cmn.rdbf1; RDbf2 = &statsPtr->cmn.rdbf2; RDbf3 = &statsPtr->cmn.milli; *RDbf3 = 1; IntVc1 = &statsPtr->u.gem.a1; IntVc2 = &statsPtr->u.gem.a2; IntCode3 = &statsPtr->u.gem.a3; IntCode4 = &statsPtr->u.gem.a4; IntCode5 = &statsPtr->u.gem.a5; IntCode6 = &statsPtr->u.gem.a6; { WorkEntrySType *workSpPtr; workSpPtr = &Workspace; workSpPtr->p1 = &statsPtr->u.gem.a7; workSpPtr->p2 = &statsPtr->u.gem.a8; workSpPtr->p3 = &statsPtr->u.gem.a9; workSpPtr->p4 = &statsPtr->u.gem.a10; workSpPtr->p5 = &statsPtr->u.gem.a11; workSpPtr->p6 = &statsPtr->u.gem.a12; workSpPtr->p7 = &statsPtr->u.gem.a13; workSpPtr->p8 = &statsPtr->u.gem.a14; workSpPtr->p9 = &statsPtr->u.gem.a15; workSpPtr->p10 = &statsPtr->u.gem.a16; workSpPtr->p11 = &statsPtr->u.gem.a17; } Lom1 = &statsPtr->u.gem.c1; Lom2 = &statsPtr->u.gem.c2; Lom3 = &statsPtr->u.gem.c3; Lom4 = &statsPtr->u.gem.c4; Lom5 = &statsPtr->u.gem.c5; Lom6 = &statsPtr->u.gem.c6; Lom7 = &statsPtr->u.gem.c7; Lom8 = &statsPtr->u.gem.c8; Lom9 = &statsPtr->u.gem.c9; Lom10 = &statsPtr->u.gem.c10; RDbf11 = &statsPtr->u.gem.c11; RDbf12 = &statsPtr->u.gem.c12; } typedef struct { ShrPcStatsSType stats; } ShrPcPteSType; ShrPcPteSType MyPte; static void initPte (void *shrpcPtr, long sessionId) { ShrPcPteSType *ptePtr; ptePtr = &MyPte; setStatPointers (&ptePtr->stats, sessionId); } void InitCache (int sessionId) { initPte (0, sessionId); } int main (int argc, char *argv[]) { InitCache (5); return 0; }