diff options
| author | David Jones | 2003-11-19 14:15:49 +0000 |
|---|---|---|
| committer | David Jones | 2003-11-19 14:15:49 +0000 |
| commit | 2a4b2d0bb7a6a7db9f8015b6a1e0e71a66f0eb1f (patch) | |
| tree | e1f79ba9e948bfd95cbf80a963579af2204b4183 /mps/code | |
| parent | ae2ecc91b4107e8c56859e8bfec1da92c21eb563 (diff) | |
| download | emacs-2a4b2d0bb7a6a7db9f8015b6a1e0e71a66f0eb1f.tar.gz emacs-2a4b2d0bb7a6a7db9f8015b6a1e0e71a66f0eb1f.zip | |
Mps: now uses correct test for remembering / restoring
SegSummary.
Copied from Perforce
Change: 64983
ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code')
| -rw-r--r-- | mps/code/expt825.c | 9 | ||||
| -rw-r--r-- | mps/code/mpm.h | 2 | ||||
| -rw-r--r-- | mps/code/trace.c | 3 |
3 files changed, 13 insertions, 1 deletions
diff --git a/mps/code/expt825.c b/mps/code/expt825.c index 458e0c0870f..db4b4325faa 100644 --- a/mps/code/expt825.c +++ b/mps/code/expt825.c | |||
| @@ -6,6 +6,15 @@ | |||
| 6 | * | 6 | * |
| 7 | * DESIGN | 7 | * DESIGN |
| 8 | * | 8 | * |
| 9 | * Just a copy of finaltest.c with the following modifcations: | ||
| 10 | * maxtreeDEPTH is 2 rather than 12. This makes the test run and fail | ||
| 11 | * much more quickly. | ||
| 12 | * | ||
| 13 | * After trees have been created and finalized, call | ||
| 14 | * mps_arena_unsafe_expose_remember_protection / restore. If the bug | ||
| 15 | * is present then this sequence will fail. | ||
| 16 | * | ||
| 17 | * | ||
| 9 | * DEPENDENCIES | 18 | * DEPENDENCIES |
| 10 | * | 19 | * |
| 11 | * This test uses the dylan object format, but the reliance on this | 20 | * This test uses the dylan object format, but the reliance on this |
diff --git a/mps/code/mpm.h b/mps/code/mpm.h index 54ed5f755c5..efd02ca8287 100644 --- a/mps/code/mpm.h +++ b/mps/code/mpm.h | |||
| @@ -610,6 +610,8 @@ extern void SegClassMixInNoSplitMerge(SegClass class); | |||
| 610 | #define SEG_SUPERCLASS(className) \ | 610 | #define SEG_SUPERCLASS(className) \ |
| 611 | ((SegClass)SUPERCLASS(className)) | 611 | ((SegClass)SUPERCLASS(className)) |
| 612 | 612 | ||
| 613 | #define ClassOfSeg(seg) ((seg)->class) | ||
| 614 | |||
| 613 | extern Size SegSize(Seg seg); | 615 | extern Size SegSize(Seg seg); |
| 614 | extern Addr (SegBase)(Seg seg); | 616 | extern Addr (SegBase)(Seg seg); |
| 615 | extern Addr (SegLimit)(Seg seg); | 617 | extern Addr (SegLimit)(Seg seg); |
diff --git a/mps/code/trace.c b/mps/code/trace.c index 07723fc0bf5..edd7714562f 100644 --- a/mps/code/trace.c +++ b/mps/code/trace.c | |||
| @@ -1761,7 +1761,7 @@ void ArenaExposeRemember(Globals globals, int remember) | |||
| 1761 | 1761 | ||
| 1762 | do { | 1762 | do { |
| 1763 | base = SegBase(seg); | 1763 | base = SegBase(seg); |
| 1764 | if((SegPool(seg)->class->attr & AttrSCAN) != 0) { | 1764 | if(IsSubclassPoly(ClassOfSeg(seg), GCSegClassGet())) { |
| 1765 | if(remember) { | 1765 | if(remember) { |
| 1766 | RefSet summary; | 1766 | RefSet summary; |
| 1767 | 1767 | ||
| @@ -1805,6 +1805,7 @@ void ArenaRestoreProtection(Globals globals) | |||
| 1805 | } | 1805 | } |
| 1806 | b = SegOfAddr(&seg, arena, block->the[i].base); | 1806 | b = SegOfAddr(&seg, arena, block->the[i].base); |
| 1807 | if(b && SegBase(seg) == block->the[i].base) { | 1807 | if(b && SegBase(seg) == block->the[i].base) { |
| 1808 | AVER(IsSubclassPoly(ClassOfSeg(seg), GCSegClassGet())); | ||
| 1808 | SegSetSummary(seg, block->the[i].summary); | 1809 | SegSetSummary(seg, block->the[i].summary); |
| 1809 | } else { | 1810 | } else { |
| 1810 | /* Either seg has gone or moved, both of which are | 1811 | /* Either seg has gone or moved, both of which are |