aboutsummaryrefslogtreecommitdiffstats
path: root/cparser/Lexer.mll
diff options
context:
space:
mode:
authorBernhard Schommer <bernhardschommer@gmail.com>2017-01-20 10:55:26 +0100
committerBernhard Schommer <bernhardschommer@gmail.com>2017-01-20 10:55:26 +0100
commit55937c177f90ecf0dea40c318d2f8d52fa69b55d (patch)
tree493a207959cd64f6b3419dc109d246df35b01e54 /cparser/Lexer.mll
parentefaf1cf1c47370ab23db190fc4c2c1f3ad05323e (diff)
downloadcompcert-kvx-55937c177f90ecf0dea40c318d2f8d52fa69b55d.tar.gz
compcert-kvx-55937c177f90ecf0dea40c318d2f8d52fa69b55d.zip
Implement offsetof via builtin.
The implementation of offsetof as macro in the form ((size_t) &((ty*) NULL)->member) has the problem that it cannot be used everywhere were an integer constant expression is allowed, for example in initiliazers of global variables and there is also no check for the case that member is of bitifield type. The new implementation adds a builtin function for this which is replaced by an integer constant during elaboration. Bug 20765
Diffstat (limited to 'cparser/Lexer.mll')
-rw-r--r--cparser/Lexer.mll2
1 files changed, 2 insertions, 0 deletions
diff --git a/cparser/Lexer.mll b/cparser/Lexer.mll
index 71aad604..efb06b5d 100644
--- a/cparser/Lexer.mll
+++ b/cparser/Lexer.mll
@@ -36,6 +36,7 @@ let () =
("__attribute", fun loc -> ATTRIBUTE loc);
("__attribute__", fun loc -> ATTRIBUTE loc);
("__builtin_va_arg", fun loc -> BUILTIN_VA_ARG loc);
+ ("__builtin_offsetof", fun loc -> BUILTIN_OFFSETOF loc);
("__const", fun loc -> CONST loc);
("__const__", fun loc -> CONST loc);
("__inline", fun loc -> INLINE loc);
@@ -510,6 +511,7 @@ and singleline_comment = parse
| UNDERSCORE_BOOL loc -> loop UNDERSCORE_BOOL't loc
| BREAK loc -> loop BREAK't loc
| BUILTIN_VA_ARG loc -> loop BUILTIN_VA_ARG't loc
+ | BUILTIN_OFFSETOF loc -> loop BUILTIN_OFFSETOF't loc
| CASE loc -> loop CASE't loc
| CHAR loc -> loop CHAR't loc
| COLON loc -> loop COLON't loc