diff options
author | Bernhard Schommer <bernhardschommer@gmail.com> | 2018-03-09 12:45:10 +0100 |
---|---|---|
committer | Bernhard Schommer <bernhardschommer@gmail.com> | 2018-03-09 12:45:10 +0100 |
commit | 49bc45ed256f2d4d68ddab6868a2de06a67647be (patch) | |
tree | 8f0234e94ddaae9d21b682ce15f43c12ee3a6c0a /cparser | |
parent | 3f12f94bb84b796f764a2a0765048c17ab840ffb (diff) | |
download | compcert-49bc45ed256f2d4d68ddab6868a2de06a67647be.tar.gz compcert-49bc45ed256f2d4d68ddab6868a2de06a67647be.zip |
Do not transfer arguments for annotations.
In order to ensure that no transformation for arguments to
builtin annotations are used, the original unchanged arguments are
used.
Bug 23179
Diffstat (limited to 'cparser')
-rw-r--r-- | cparser/StructPassing.ml | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/cparser/StructPassing.ml b/cparser/StructPassing.ml index e431d9f9..10aa6fd5 100644 --- a/cparser/StructPassing.ml +++ b/cparser/StructPassing.ml @@ -323,12 +323,15 @@ and transf_call env ctx opt_lhs fn args ty = | None -> e | Some lhs -> eassign lhs e in match fn with - | {edesc = EVar { C.name = "__builtin_va_arg" - | "__builtin_annot" + | {edesc = EVar { C.name = "__builtin_annot" | "__builtin_annot_intval" | "__builtin_ais_annot" } } -> (* Do not transform the call in this case, just use the default pass-by-reference mode for struct/union arguments. *) + opt_eassign {edesc = ECall(fn, args); etyp = ty} + | {edesc = EVar { C.name = "__builtin_va_arg" } } -> + (* Do not transform the call in this case, just use the default + pass-by-reference mode for struct/union arguments. *) opt_eassign {edesc = ECall(fn, args'); etyp = ty} | _ -> let call = |