1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-30 04:10:54 -08:00

Further elimination of type puns that violate the strict aliasing rule. this change eliminates puns on the format methods.

Copied from Perforce
 Change: 179452
 ServerID: perforce.ravenbrook.com
This commit is contained in:
Richard Brooksby 2012-09-12 19:45:27 +01:00
parent 9248316fb6
commit 513aabb046
7 changed files with 50 additions and 65 deletions

View file

@ -40,11 +40,11 @@ Bool FormatCheck(Format format)
}
static Addr FormatDefaultClass(Addr object)
static mps_addr_t FormatDefaultClass(mps_addr_t object)
{
AVER(object != NULL);
return ((Addr *)object)[0];
return ((mps_addr_t *)object)[0];
}
@ -53,13 +53,13 @@ static Addr FormatDefaultClass(Addr object)
Res FormatCreate(Format *formatReturn, Arena arena,
Align alignment,
FormatVariety variety,
FormatScanMethod scan,
FormatSkipMethod skip,
FormatMoveMethod move,
FormatIsMovedMethod isMoved,
FormatCopyMethod copy,
FormatPadMethod pad,
FormatClassMethod class,
mps_fmt_scan_t scan,
mps_fmt_skip_t skip,
mps_fmt_fwd_t move,
mps_fmt_isfwd_t isMoved,
mps_fmt_copy_t copy,
mps_fmt_pad_t pad,
mps_fmt_class_t class,
Size headerSize)
{
Format format;

View file

@ -807,13 +807,13 @@ extern Bool FormatCheck(Format format);
extern Res FormatCreate(Format *formatReturn, Arena arena,
Align alignment,
FormatVariety variety,
FormatScanMethod scan,
FormatSkipMethod skip,
FormatMoveMethod move,
FormatIsMovedMethod isMoved,
FormatCopyMethod copy,
FormatPadMethod pad,
FormatClassMethod class,
mps_fmt_scan_t scan,
mps_fmt_skip_t skip,
mps_fmt_fwd_t move,
mps_fmt_isfwd_t isMoved,
mps_fmt_copy_t copy,
mps_fmt_pad_t pad,
mps_fmt_class_t class,
Size headerSize);
extern void FormatDestroy(Format format);
extern Arena FormatArena(Format format);
@ -940,7 +940,7 @@ extern Res RootCreateReg(Root *rootReturn, Arena arena,
void *p, size_t s);
extern Res RootCreateFmt(Root *rootReturn, Arena arena,
Rank rank, RootMode mode,
FormatScanMethod scan,
mps_fmt_scan_t scan,
Addr base, Addr limit);
extern Res RootCreateFun(Root *rootReturn, Arena arena,
Rank rank, mps_root_scan_t scan,

View file

@ -406,13 +406,13 @@ typedef struct FormatStruct {
Arena arena; /* owning arena */
RingStruct arenaRing; /* formats are attached to the arena */
Align alignment; /* alignment of formatted objects */
FormatScanMethod scan;
FormatSkipMethod skip;
FormatMoveMethod move;
FormatIsMovedMethod isMoved;
FormatCopyMethod copy;
FormatPadMethod pad;
FormatClassMethod class; /* pointer indicating class */
mps_fmt_scan_t scan;
mps_fmt_skip_t skip;
mps_fmt_fwd_t move;
mps_fmt_isfwd_t isMoved;
mps_fmt_copy_t copy;
mps_fmt_pad_t pad;
mps_fmt_class_t class; /* pointer indicating class */
Size headerSize; /* size of header */
} FormatStruct;

View file

@ -242,19 +242,6 @@ typedef struct TraceStartMessageStruct *TraceStartMessage;
typedef struct TraceMessageStruct *TraceMessage; /* trace end */
/* Format*Method -- see design.mps.format-interface */
/* .fmt-methods: These methods must match those defined in the */
/* MPS C Interface. (See <code/mps.h#fmt-methods>.) */
typedef Res (*FormatScanMethod)(mps_ss_t ss, Addr base, Addr limit);
typedef Addr (*FormatSkipMethod)(Addr object);
typedef void (*FormatMoveMethod)(Addr object, Addr to);
typedef Addr (*FormatIsMovedMethod)(Addr object);
typedef void (*FormatCopyMethod)(Addr object, Addr to);
typedef void (*FormatPadMethod)(Addr base, Size size);
typedef Addr (*FormatClassMethod)(Addr object);
/* CONSTANTS */

View file

@ -179,8 +179,7 @@ typedef struct mps_ld_s { /* location dependency descriptor */
/* Format and Root Method Types */
/* see design.mps.root-interface */
/* .fmt-methods: Keep in sync with <code/mpmtypes.h#fmt-methods> */
/* .root-methods: Keep in sync with <code/mpmtypes.h#root-methods> */
/* see design.mps.format-interface */
typedef mps_res_t (*mps_root_scan_t)(mps_ss_t, void *, size_t);
typedef mps_res_t (*mps_fmt_scan_t)(mps_ss_t, mps_addr_t, mps_addr_t);

View file

@ -463,12 +463,12 @@ mps_res_t mps_fmt_create_A(mps_fmt_t *mps_fmt_o,
arena,
(Align)mps_fmt_A->align,
FormatVarietyA,
(FormatScanMethod)mps_fmt_A->scan,
(FormatSkipMethod)mps_fmt_A->skip,
(FormatMoveMethod)mps_fmt_A->fwd,
(FormatIsMovedMethod)mps_fmt_A->isfwd,
(FormatCopyMethod)mps_fmt_A->copy,
(FormatPadMethod)mps_fmt_A->pad,
mps_fmt_A->scan,
mps_fmt_A->skip,
mps_fmt_A->fwd,
mps_fmt_A->isfwd,
mps_fmt_A->copy,
mps_fmt_A->pad,
NULL,
(Size)0);
@ -497,13 +497,13 @@ mps_res_t mps_fmt_create_B(mps_fmt_t *mps_fmt_o,
arena,
(Align)mps_fmt_B->align,
FormatVarietyB,
(FormatScanMethod)mps_fmt_B->scan,
(FormatSkipMethod)mps_fmt_B->skip,
(FormatMoveMethod)mps_fmt_B->fwd,
(FormatIsMovedMethod)mps_fmt_B->isfwd,
(FormatCopyMethod)mps_fmt_B->copy,
(FormatPadMethod)mps_fmt_B->pad,
(FormatClassMethod)mps_fmt_B->mps_class,
mps_fmt_B->scan,
mps_fmt_B->skip,
mps_fmt_B->fwd,
mps_fmt_B->isfwd,
mps_fmt_B->copy,
mps_fmt_B->pad,
mps_fmt_B->mps_class,
(Size)0);
ArenaLeave(arena);
@ -531,12 +531,12 @@ mps_res_t mps_fmt_create_auto_header(mps_fmt_t *mps_fmt_o,
arena,
(Align)mps_fmt->align,
FormatVarietyAutoHeader,
(FormatScanMethod)mps_fmt->scan,
(FormatSkipMethod)mps_fmt->skip,
(FormatMoveMethod)mps_fmt->fwd,
(FormatIsMovedMethod)mps_fmt->isfwd,
mps_fmt->scan,
mps_fmt->skip,
mps_fmt->fwd,
mps_fmt->isfwd,
NULL,
(FormatPadMethod)mps_fmt->pad,
mps_fmt->pad,
NULL,
(Size)mps_fmt->mps_headerSize);
@ -565,12 +565,12 @@ mps_res_t mps_fmt_create_fixed(mps_fmt_t *mps_fmt_o,
arena,
(Align)mps_fmt_fixed->align,
FormatVarietyFixed,
(FormatScanMethod)mps_fmt_fixed->scan,
mps_fmt_fixed->scan,
NULL,
(FormatMoveMethod)mps_fmt_fixed->fwd,
(FormatIsMovedMethod)mps_fmt_fixed->isfwd,
mps_fmt_fixed->fwd,
mps_fmt_fixed->isfwd,
NULL,
(FormatPadMethod)mps_fmt_fixed->pad,
mps_fmt_fixed->pad,
NULL,
(Size)0);
@ -1265,11 +1265,10 @@ mps_res_t mps_root_create_table_masked(mps_root_t *mps_root_o,
mps_res_t mps_root_create_fmt(mps_root_t *mps_root_o, mps_arena_t arena,
mps_rank_t mps_rank, mps_rm_t mps_rm,
mps_fmt_scan_t mps_fmt_scan,
mps_fmt_scan_t scan,
mps_addr_t base, mps_addr_t limit)
{
Rank rank = (Rank)mps_rank;
FormatScanMethod scan = (FormatScanMethod)mps_fmt_scan;
Root root;
RootMode mode = (RootMode)mps_rm;
Res res;

View file

@ -53,7 +53,7 @@ typedef struct RootStruct {
size_t s; /* passed to scan */
} reg;
struct {
FormatScanMethod scan; /* format-like scanner */
mps_fmt_scan_t scan; /* format-like scanner */
Addr base, limit; /* passed to scan */
} fmt;
} the;
@ -315,7 +315,7 @@ Res RootCreateReg(Root *rootReturn, Arena arena,
}
Res RootCreateFmt(Root *rootReturn, Arena arena,
Rank rank, RootMode mode, FormatScanMethod scan,
Rank rank, RootMode mode, mps_fmt_scan_t scan,
Addr base, Addr limit)
{
union RootUnion theUnion;