aboutsummaryrefslogtreecommitdiffstats
path: root/cfrontend
diff options
context:
space:
mode:
authorBernhard Schommer <bernhardschommer@gmail.com>2016-08-29 14:54:06 +0200
committerBernhard Schommer <bernhardschommer@gmail.com>2016-08-29 14:54:06 +0200
commit5cf814404cec9a8702e4bfa88e0f9176fa04ecfb (patch)
treefabd44046e3e5b9aaac7f33b9e4dddaa8d3f06e8 /cfrontend
parent3208e22ea89c459a5a7944ad8e82511d4a5328fa (diff)
parent477f73ef96d957de5a896a05175ceaab7e0dce03 (diff)
downloadcompcert-5cf814404cec9a8702e4bfa88e0f9176fa04ecfb.tar.gz
compcert-5cf814404cec9a8702e4bfa88e0f9176fa04ecfb.zip
Merge branch 'master' into advanced-diagnostics
Diffstat (limited to 'cfrontend')
-rw-r--r--cfrontend/C2C.ml2
-rw-r--r--cfrontend/PrintCsyntax.ml24
2 files changed, 23 insertions, 3 deletions
diff --git a/cfrontend/C2C.ml b/cfrontend/C2C.ml
index c33449e4..4049907e 100644
--- a/cfrontend/C2C.ml
+++ b/cfrontend/C2C.ml
@@ -758,7 +758,7 @@ let rec convertExpr env e =
let (kind, args1) =
match args with
| {edesc = C.EConst(CInt(n,_,_))} :: args1 -> (n, args1)
- | _ -> error "argument 1 of '__builtin_debug' must be constant"; (0L, args) in
+ | _ -> error "argument 1 of '__builtin_debug' must be constant"; (1L, args) in
let (text, args2) =
match args1 with
| {edesc = C.EConst(CStr(txt))} :: args2 -> (txt, args2)
diff --git a/cfrontend/PrintCsyntax.ml b/cfrontend/PrintCsyntax.ml
index 7933f987..e3e259f7 100644
--- a/cfrontend/PrintCsyntax.ml
+++ b/cfrontend/PrintCsyntax.ml
@@ -401,7 +401,7 @@ let name_function_parameters fun_name params cconv =
| _ ->
let rec add_params first = function
| [] ->
- if cconv.cc_vararg then Buffer.add_string b "..."
+ if cconv.cc_vararg then Buffer.add_string b ",..."
| (id, ty) :: rem ->
if not first then Buffer.add_string b ", ";
Buffer.add_string b (name_cdecl (extern_atom id) ty);
@@ -426,7 +426,7 @@ let print_function p id f =
let print_fundef p id fd =
match fd with
- | Ctypes.External((EF_external _ | EF_runtime _), args, res, cconv) ->
+ | Ctypes.External((EF_external _ | EF_runtime _| EF_malloc | EF_free), args, res, cconv) ->
fprintf p "extern %s;@ @ "
(name_cdecl (extern_atom id) (Tfunction(args, res, cconv)))
| Ctypes.External(_, _, _, _) ->
@@ -434,6 +434,14 @@ let print_fundef p id fd =
| Ctypes.Internal f ->
print_function p id f
+let print_fundecl p id fd =
+ match fd with
+ | Ctypes.Internal f ->
+ let linkage = if C2C.atom_is_static id then "static" else "extern" in
+ fprintf p "%s %s;@ @ " linkage
+ (name_cdecl (extern_atom id) (Csyntax.type_of_function f))
+ | _ -> ()
+
let string_of_init id =
let b = Buffer.create (List.length id) in
let add_init = function
@@ -501,6 +509,17 @@ let print_globvar p id v =
end;
fprintf p ";@]@ @ "
+let print_globvardecl p id v =
+ let name = extern_atom id in
+ let name = if v.gvar_readonly then "const "^name else name in
+ let linkage = if C2C.atom_is_static id then "static" else "extern" in
+ fprintf p "%s %s;@ @ " linkage (name_cdecl name v.gvar_info)
+
+let print_globdecl p (id,gd) =
+ match gd with
+ | Gfun f -> print_fundecl p id f
+ | Gvar v -> print_globvardecl p id v
+
let print_globdef p (id, gd) =
match gd with
| Gfun f -> print_fundef p id f
@@ -524,6 +543,7 @@ let print_program p prog =
fprintf p "@[<v 0>";
List.iter (declare_composite p) prog.prog_types;
List.iter (define_composite p) prog.prog_types;
+ List.iter (print_globdecl p) prog.prog_defs;
List.iter (print_globdef p) prog.prog_defs;
fprintf p "@]@."