diff --git a/src/plugins/e-acsl/doc/Changelog b/src/plugins/e-acsl/doc/Changelog
index 0d7380accd3846f1015cd02ee92dca018a41e818..c05704c94c67baf0658a7209701a7be811bfffd2 100644
--- a/src/plugins/e-acsl/doc/Changelog
+++ b/src/plugins/e-acsl/doc/Changelog
@@ -25,6 +25,8 @@
 Plugin E-ACSL <next-release>
 ############################
 
+-* E-ACSL       [2021-07-19] Fix crash occurring when two or more successive
+                logic coercions were done in a term (frama-c/e-acsl#172).
 -* E-ACSL       [2021-07-19] Fix crash when raising some user errors
                 (frama-c/e-acsl#170).
 -* E-ACSL       [2021-07-16] Fix crash when using some built-in labels
diff --git a/src/plugins/e-acsl/src/code_generator/translate.ml b/src/plugins/e-acsl/src/code_generator/translate.ml
index abe48eaa1ad565dd676714a3dde2f94070e34abf..0141cf409140d2affe193f72bdf4993aab124345 100644
--- a/src/plugins/e-acsl/src/code_generator/translate.ml
+++ b/src/plugins/e-acsl/src/code_generator/translate.ml
@@ -654,7 +654,7 @@ and context_insensitive_term_to_exp kf env t =
         e
     in
     e, env, Typed_number.C_number, ""
-  | TLogic_coerce _ -> assert false (* handle in [term_to_exp] *)
+  | TLogic_coerce (_, t) -> context_insensitive_term_to_exp kf env t
   | TAddrOf lv ->
     let lv, env, _ = tlval_to_lval kf env lv in
     Cil.mkAddrOf ~loc lv, env, Typed_number.C_number, "addrof"
@@ -741,7 +741,6 @@ and term_to_exp kf env t =
     Printer.pp_term t generate_rte;
   Env.with_rte_and_result env false
     ~f:(fun env ->
-        let t = match t.term_node with TLogic_coerce(_, t) -> t | _ -> t in
         let e, env, sty, name = context_insensitive_term_to_exp kf env t in
         let env = if generate_rte then translate_rte kf env e else env in
         let cast = Typing.get_cast t in
diff --git a/src/plugins/e-acsl/tests/bts/issue-eacsl-172.c b/src/plugins/e-acsl/tests/bts/issue-eacsl-172.c
new file mode 100644
index 0000000000000000000000000000000000000000..4be6d489f1a879136e9c639d8f95e8ba6ed80cb4
--- /dev/null
+++ b/src/plugins/e-acsl/tests/bts/issue-eacsl-172.c
@@ -0,0 +1,9 @@
+/* run.config
+   COMMENT: frama-c/e-acsl#172, test for a term with two successive logic
+   coercion.
+*/
+double d2 = 11.;
+int main() {
+  //@ assert (int)d2 > 10;
+  return 0;
+}
diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_issue-eacsl-172.c b/src/plugins/e-acsl/tests/bts/oracle/gen_issue-eacsl-172.c
new file mode 100644
index 0000000000000000000000000000000000000000..fc026da4d148cc8c2687c8506992e1dae583cfd6
--- /dev/null
+++ b/src/plugins/e-acsl/tests/bts/oracle/gen_issue-eacsl-172.c
@@ -0,0 +1,21 @@
+/* Generated by Frama-C */
+#include "stddef.h"
+#include "stdio.h"
+double d2 = 11.;
+int main(void)
+{
+  int __retres;
+  __e_acsl_assert(-2147483649. < d2,1,"RTE","main",
+                  "float_to_int: -2147483649 < d2",
+                  "tests/bts/issue-eacsl-172.c",7);
+  __e_acsl_assert(d2 < 2147483648.,1,"RTE","main",
+                  "float_to_int: d2 < 2147483648",
+                  "tests/bts/issue-eacsl-172.c",7);
+  __e_acsl_assert((int)d2 > 10,1,"Assertion","main","(int)d2 > 10",
+                  "tests/bts/issue-eacsl-172.c",7);
+  /*@ assert (int)d2 > 10; */ ;
+  __retres = 0;
+  return __retres;
+}
+
+
diff --git a/src/plugins/e-acsl/tests/bts/oracle/issue-eacsl-172.res.oracle b/src/plugins/e-acsl/tests/bts/oracle/issue-eacsl-172.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..efd026311297e55d8fefb674326118e6ece88624
--- /dev/null
+++ b/src/plugins/e-acsl/tests/bts/oracle/issue-eacsl-172.res.oracle
@@ -0,0 +1,2 @@
+[e-acsl] beginning translation.
+[e-acsl] translation done in project "e-acsl".
diff --git a/src/plugins/e-acsl/tests/bts/oracle_dev/issue-eacsl-172.e-acsl.err.log b/src/plugins/e-acsl/tests/bts/oracle_dev/issue-eacsl-172.e-acsl.err.log
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391