local-alloc.c (contains_replace_regs): LO_SUM may contain replace regs.
* local-alloc.c (contains_replace_regs): LO_SUM may contain replace regs. * gcc.c-torture/execute/20020402-2.c: New. From-SVN: r51773
This commit is contained in:
parent
d32c91705d
commit
7a145e929d
@ -1,3 +1,9 @@
|
||||
2002-04-02 Richard Henderson <rth@redhat.com>
|
||||
|
||||
PR opt/3967
|
||||
* local-alloc.c (contains_replace_regs): LO_SUM may contain
|
||||
replace regs.
|
||||
|
||||
2002-04-02 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* doc/standards.texi: Document required freestanding libc entry points.
|
||||
|
@ -664,7 +664,6 @@ contains_replace_regs (x)
|
||||
case PC:
|
||||
case CC0:
|
||||
case HIGH:
|
||||
case LO_SUM:
|
||||
return 0;
|
||||
|
||||
case REG:
|
||||
|
230
gcc/testsuite/gcc.c-torture/execute/20020402-2.c
Normal file
230
gcc/testsuite/gcc.c-torture/execute/20020402-2.c
Normal file
@ -0,0 +1,230 @@
|
||||
/* 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user