summaryrefslogtreecommitdiff
path: root/global.h
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2015-02-15 13:29:30 +0100
committerJustus Winter <4winter@informatik.uni-hamburg.de>2015-02-15 14:33:33 +0100
commit44753cf5a30b9324d2c4ac9021843674bde5cc3c (patch)
tree743687464c6e13941fdf2cb4691843c6864fe2db /global.h
parentf573a84faeb902f74b5f4b6fc1a67e7579012a9e (diff)
Do not generate code dereferencing type-punned pointers
For variable-length arrays, up to 2048 bytes are transmitted inline. If the array is larger, the data is transmitted out-of-line, and a pointer to a vm_allocated region is stored at the beginning of the array. Previously, the generated code casted the field. Use a union instead. This fixes the gcc warning `dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]'. * global.c (OOLPostfix): New variable. * global.h (OOLPostfix): New declaration. * server.c (WriteServerCallArg): Avoid cast. (WriteDestroyArg): Likewise. (WritePackArgValue): Likewise. (WritePackArg): Likewise. * user.c (WriteExtractArgValue): Likewise. * utils.c (WriteFieldDeclPrim): Generate a union with an additional pointer field for variable-length arrays.
Diffstat (limited to 'global.h')
-rw-r--r--global.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/global.h b/global.h
index ca4d865..8dbb6fd 100644
--- a/global.h
+++ b/global.h
@@ -53,6 +53,7 @@ extern const_string_t UserPrefix;
extern const_string_t ServerDemux;
extern const_string_t SubrPrefix;
extern const_string_t RoutinePrefix;
+extern const_string_t OOLPostfix;
extern int yylineno;
extern string_t yyinname;