diff --git a/src/plugins/e-acsl/doc/Changelog b/src/plugins/e-acsl/doc/Changelog
index 79d17b198b14550ca3b0c3b21e044a04a166b24b..78572f83775819071f278b22995fe41e269c545c 100644
--- a/src/plugins/e-acsl/doc/Changelog
+++ b/src/plugins/e-acsl/doc/Changelog
@@ -19,6 +19,8 @@
 #   configure	configure
 ###############################################################################
 
+-* E-ACSL       [2019/12/04] Fix bug with compiler built-ins.
+
 ############################
 Plugin E-ACSL 20.0 (Calcium)
 ############################
diff --git a/src/plugins/e-acsl/src/code_generator/global_observer.ml b/src/plugins/e-acsl/src/code_generator/global_observer.ml
index a3ab2f4e946f8f16c3940f3fc743fc773b1f25e4..7f3fe8cab77a572492aa980c04870004ae9685da 100644
--- a/src/plugins/e-acsl/src/code_generator/global_observer.ml
+++ b/src/plugins/e-acsl/src/code_generator/global_observer.ml
@@ -111,10 +111,12 @@ let mk_init_function () =
   let stmts =
     Varinfo.Hashtbl.fold_sorted
       (fun vi _ stmts ->
-         (* a global is both allocated and initialized *)
-         Constructor.mk_store_stmt vi
-         :: Constructor.mk_initialize ~loc:Location.unknown (Cil.var vi)
-         :: stmts)
+         if Misc.is_fc_or_compiler_builtin vi then stmts
+         else
+           (* a global is both allocated and initialized *)
+           Constructor.mk_store_stmt vi
+           :: Constructor.mk_initialize ~loc:Location.unknown (Cil.var vi)
+           :: stmts)
       tbl
       stmts
   in
@@ -173,7 +175,9 @@ let mk_init_function () =
 
 let mk_delete_stmts stmts =
   Varinfo.Hashtbl.fold_sorted
-    (fun vi _l acc -> Constructor.mk_delete_stmt vi :: acc)
+    (fun vi _l acc ->
+       if Misc.is_fc_or_compiler_builtin vi then acc
+       else Constructor.mk_delete_stmt vi :: acc)
     tbl
     stmts
 
diff --git a/src/plugins/e-acsl/src/code_generator/injector.ml b/src/plugins/e-acsl/src/code_generator/injector.ml
index 8714ac2538b06636387e9dc57dc7da291d33a233..c125b9875c9f57d4b892d5034c4f6e01bb67ba16 100644
--- a/src/plugins/e-acsl/src/code_generator/injector.ml
+++ b/src/plugins/e-acsl/src/code_generator/injector.ml
@@ -593,12 +593,12 @@ let inject_in_global (env, main) = function
 
   (* Cil built-ins and other library globals: nothing to do *)
   | GVarDecl(vi, _) | GVar(vi, _, _) | GFun({ svar = vi }, _)
-    when Cil.is_builtin vi ->
+    when Misc.is_fc_or_compiler_builtin vi ->
     env, main
   | g when Misc.is_library_loc (Global.loc g) ->
     env, main
 
-  (* variables and functions declarations *)
+  (* variable declarations *)
   | GVarDecl(vi, _) | GFunDecl(_, vi, _) ->
     (* do not convert extern ghost variables, because they can't be linked,
        see bts #1392 *)
diff --git a/src/plugins/e-acsl/src/libraries/misc.ml b/src/plugins/e-acsl/src/libraries/misc.ml
index cbc9e16e284ace3ea2b3c1ae17346bc18689a2a2..31d7d92833ce3f995f2f5e7eefaa4f357b9c064a 100644
--- a/src/plugins/e-acsl/src/libraries/misc.ml
+++ b/src/plugins/e-acsl/src/libraries/misc.ml
@@ -46,6 +46,14 @@ let register_library_function vi =
 
 let reset () = Datatype.String.Hashtbl.clear library_functions
 
+let is_fc_or_compiler_builtin vi =
+  Cil.is_builtin vi
+  ||
+  (String.length vi.vname >= 10
+   &&
+   let prefix = String.sub vi.vname 0 10 in
+   Datatype.String.equal prefix "__builtin_")
+
 (* ************************************************************************** *)
 (** {2 Builders} *)
 (* ************************************************************************** *)
@@ -215,6 +223,6 @@ let name_of_binop = function
 
 (*
 Local Variables:
-compile-command: "make -C ../.."
+compile-command: "make -C ../../../../.."
 End:
 *)
diff --git a/src/plugins/e-acsl/src/libraries/misc.mli b/src/plugins/e-acsl/src/libraries/misc.mli
index c1dafb633c93cd4db90b15f161772c00b4c35f29..59ee66f1faf0f1d20aba65cf85c96855a1a92a25 100644
--- a/src/plugins/e-acsl/src/libraries/misc.mli
+++ b/src/plugins/e-acsl/src/libraries/misc.mli
@@ -51,6 +51,8 @@ val is_library_loc: location -> bool
 val register_library_function: varinfo -> unit
 val reset: unit -> unit
 
+val is_fc_or_compiler_builtin: varinfo -> bool
+
 (* ************************************************************************** *)
 (** {2 Other stuff} *)
 (* ************************************************************************** *)
@@ -102,6 +104,6 @@ val finite_min_and_max: Ival.t -> Integer.t * Integer.t
 
 (*
 Local Variables:
-compile-command: "make -C ../.."
+compile-command: "make -C ../../../../.."
 End:
 *)
diff --git a/src/plugins/e-acsl/src/project_initializer/dup_functions.ml b/src/plugins/e-acsl/src/project_initializer/dup_functions.ml
index a0e7efedc5e1d53d63988a48f40afb3d559c3344..64fc328a712e224f33e2d6f31fdc0630b825350c 100644
--- a/src/plugins/e-acsl/src/project_initializer/dup_functions.ml
+++ b/src/plugins/e-acsl/src/project_initializer/dup_functions.ml
@@ -305,7 +305,7 @@ class dup_functions_visitor prj = object (self)
         (* it is duplicable *)
         && self#is_unvariadic_function vi (* it is not a variadic function *)
         && not (Misc.is_library_loc loc) (* it is not in the E-ACSL's RTL *)
-        && not (Cil.is_builtin vi) (* it is not a Frama-C built-in *)
+        && not (Misc.is_fc_or_compiler_builtin vi) (* it is not a built-in *)
         &&
         (let kf =
            try Globals.Functions.get vi with Not_found -> assert false
@@ -387,7 +387,7 @@ if there are memory-related annotations.@]"
                     but reading some libc code *));
     Cil.JustCopy
   | GVarDecl(vi, _) | GFunDecl(_, vi, _) | GFun({ svar = vi }, _)
-      when Cil.is_builtin vi ->
+      when Misc.is_fc_or_compiler_builtin vi ->
     self#next ();
     Cil.JustCopy
   | _ ->
diff --git a/src/plugins/e-acsl/src/project_initializer/prepare_ast.ml b/src/plugins/e-acsl/src/project_initializer/prepare_ast.ml
index 035f8c083dd6ca7277305c4df8200447e7b937de..1eee37987db0534b7caf7f8c7b39660d172e24eb 100644
--- a/src/plugins/e-acsl/src/project_initializer/prepare_ast.ml
+++ b/src/plugins/e-acsl/src/project_initializer/prepare_ast.ml
@@ -198,7 +198,7 @@ class prepare_visitor prj = object (self)
     | GVarDecl(vi, loc) | GFunDecl(_, vi, loc) | GFun({ svar = vi }, loc)
       when self#is_unvariadic_function vi
         && not (Misc.is_library_loc loc)
-        && not (Cil.is_builtin vi)
+        && not (Misc.is_fc_or_compiler_builtin vi)
       ->
       let kf = Extlib.the self#current_kf in
       let s = Annotations.funspec ~populate:false kf in