diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2019-09-03 17:34:08 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2019-09-03 17:34:50 -0700 |
commit | d20655669bd6f94cdd9fb2472668e92a069c0cf2 (patch) | |
tree | 610e9a9ea0948470c015568ca1e7ccf8bcdd03ef /src/pdumper.h | |
parent | 5f089ac93f18fbd6e8131b81e1c6b403894b5759 (diff) | |
download | emacs-d20655669bd6f94cdd9fb2472668e92a069c0cf2.tar.gz |
Avoid casting -1 to possibly-unsigned enum
* src/alloc.c (mark_maybe_pointer):
* src/pdumper.h (pdumper_object_p_precise):
Use pdumper_valid_object_type_p.
* src/pdumper.c (pdumper_find_object_type_impl):
* src/pdumper.h (pdumper_find_object_type):
Return int, not enum Lisp_Type. All callers changed.
* src/pdumper.h (PDUMPER_NO_OBJECT): Do not cast -1 to enum
Lisp_Type; in theory, C18 says this could yield 7, which would
mean PDUMPER_NO_OBJECT == Lisp_Float (!).
(pdumper_valid_object_type_p): New function.
Diffstat (limited to 'src/pdumper.h')
-rw-r--r-- | src/pdumper.h | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/pdumper.h b/src/pdumper.h index 5d1e9c3aea3..83c094f3caa 100644 --- a/src/pdumper.h +++ b/src/pdumper.h @@ -24,7 +24,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ INLINE_HEADER_BEGIN -#define PDUMPER_NO_OBJECT ((enum Lisp_Type) -1) +enum { PDUMPER_NO_OBJECT = -1 }; /* Indicate in source code that we're deliberately relying on pdumper not preserving the given value. Compiles to nothing --- for humans @@ -170,12 +170,12 @@ pdumper_cold_object_p (const void *obj) } -extern enum Lisp_Type pdumper_find_object_type_impl (const void *obj); +extern int pdumper_find_object_type_impl (const void *obj); /* Return the type of the dumped object that starts at OBJ. It is a programming error to call this routine for an OBJ for which pdumper_object_p would return false. */ -INLINE _GL_ATTRIBUTE_CONST enum Lisp_Type +INLINE _GL_ATTRIBUTE_CONST int pdumper_find_object_type (const void *obj) { #ifdef HAVE_PDUMPER @@ -186,6 +186,14 @@ pdumper_find_object_type (const void *obj) #endif } +/* Return true if TYPE is that of a Lisp object. + PDUMPER_NO_OBJECT is invalid. */ +INLINE bool +pdumper_valid_object_type_p (int type) +{ + return 0 <= type; +} + /* Return whether OBJ points exactly to the start of some object in the loaded dump image. It is a programming error to call this routine for an OBJ for which pdumper_object_p would return @@ -194,7 +202,7 @@ INLINE _GL_ATTRIBUTE_CONST bool pdumper_object_p_precise (const void *obj) { #ifdef HAVE_PDUMPER - return pdumper_find_object_type (obj) != PDUMPER_NO_OBJECT; + return pdumper_valid_object_type_p (pdumper_find_object_type (obj)); #else (void) obj; emacs_abort (); |