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:
parent
9248316fb6
commit
513aabb046
7 changed files with 50 additions and 65 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue