diff --git a/src/plugins/e-acsl/tests/arith/functions.c b/src/plugins/e-acsl/tests/arith/functions.c
index a3e010fc6f607b715aa78855b37b91d5012227ff..c51ffd5bd0439aee40b0ef4e236b8008ea5a11bf 100644
--- a/src/plugins/e-acsl/tests/arith/functions.c
+++ b/src/plugins/e-acsl/tests/arith/functions.c
@@ -46,6 +46,11 @@ int glob = 5;
 // Test functions returning a rational
 /*@ logic real over(real a, real b) = a/b; */
 
+//Test function using a global variable (they elaborate to functions
+//with labels)
+int z = 8;
+/*@ logic integer f3 (integer y) = z+y; */
+
 int main(void) {
   int x = 1, y = 2;
   /*@ assert p1(x, y); */;
@@ -82,7 +87,8 @@ int main(void) {
 
   /*@ assert over(1., 2.) == 0.5; */;
 
-  // not yet supported
   /*@ assert p_here(27); */;
   /*@ assert f_here(27) == 27; */;
+
+  /*@ assert f3(5) == 13; */;
 }
diff --git a/src/plugins/e-acsl/tests/arith/oracle/functions.res.oracle b/src/plugins/e-acsl/tests/arith/oracle/functions.res.oracle
index bb5a7cd1b3c49b8c32e0f0e920d1c1116b32fc3d..eeec870713379fa27db796bee36b86b1f32df353 100644
--- a/src/plugins/e-acsl/tests/arith/oracle/functions.res.oracle
+++ b/src/plugins/e-acsl/tests/arith/oracle/functions.res.oracle
@@ -1,73 +1,73 @@
 [e-acsl] beginning translation.
-[e-acsl] functions.c:73: Warning: 
+[e-acsl] functions.c:78: Warning: 
   E-ACSL construct `function application' is not yet supported.
   Ignoring annotation.
 [e-acsl] translation done in project "e-acsl".
-[eva:alarm] functions.c:51: Warning: 
+[eva:alarm] functions.c:56: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] functions.c:51: Warning: 
+[eva:alarm] functions.c:56: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] functions.c:53: Warning: 
+[eva:alarm] functions.c:58: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
-[eva:alarm] functions.c:55: Warning: 
+[eva:alarm] functions.c:60: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] functions.c:55: Warning: 
+[eva:alarm] functions.c:60: Warning: 
   function __e_acsl_assert_register_long: precondition data->values == \null ||
                                                        \valid(data->values) got status unknown.
-[eva:alarm] functions.c:56: Warning: 
+[eva:alarm] functions.c:61: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] functions.c:56: Warning: 
+[eva:alarm] functions.c:61: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] functions.c:57: Warning: 
-  function __e_acsl_assert, behavior blocking: precondition got status unknown.
-[eva:alarm] functions.c:58: Warning: 
+[eva:alarm] functions.c:62: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
 [eva:alarm] functions.c:63: Warning: 
+  function __e_acsl_assert, behavior blocking: precondition got status unknown.
+[eva:alarm] functions.c:68: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] functions.c:63: Warning: 
+[eva:alarm] functions.c:68: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] functions.c:66: Warning: 
+[eva:alarm] functions.c:71: Warning: 
   function __e_acsl_assert_register_char: precondition data->values == \null ||
                                                        \valid(data->values) got status unknown.
-[eva:alarm] functions.c:66: Warning: 
+[eva:alarm] functions.c:71: Warning: 
   function __e_acsl_assert_register_char: precondition data->values == \null ||
                                                        \valid(data->values) got status unknown.
-[eva:alarm] functions.c:68: Warning: 
+[eva:alarm] functions.c:73: Warning: 
   function __e_acsl_assert_register_short: precondition data->values == \null ||
                                                         \valid(data->values) got status unknown.
-[eva:alarm] functions.c:68: Warning: 
+[eva:alarm] functions.c:73: Warning: 
   function __e_acsl_assert_register_short: precondition data->values == \null ||
                                                         \valid(data->values) got status unknown.
-[eva:alarm] functions.c:73: Warning: 
+[eva:alarm] functions.c:78: Warning: 
   function __e_acsl_assert_register_struct: precondition data->values == \null ||
                                                          \valid(data->values) got status unknown.
-[eva:alarm] functions.c:73: Warning: 
+[eva:alarm] functions.c:78: Warning: 
   function __e_acsl_assert_register_struct: precondition data->values == \null ||
                                                          \valid(data->values) got status unknown.
-[eva:alarm] functions.c:73: Warning: assertion got status unknown.
-[eva:alarm] functions.c:74: Warning: 
+[eva:alarm] functions.c:78: Warning: assertion got status unknown.
+[eva:alarm] functions.c:79: Warning: 
   function __e_acsl_assert_register_struct: precondition data->values == \null ||
                                                          \valid(data->values) got status unknown.
-[eva:alarm] functions.c:74: Warning: 
+[eva:alarm] functions.c:79: Warning: 
   function __e_acsl_assert_register_long: precondition data->values == \null ||
                                                        \valid(data->values) got status unknown.
 [eva:alarm] functions.c:28: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] functions.c:79: Warning: 
+[eva:alarm] functions.c:84: Warning: 
   non-finite double value. assert \is_finite(__gen_e_acsl__9);
-[eva:alarm] functions.c:79: Warning: 
+[eva:alarm] functions.c:84: Warning: 
   function __e_acsl_assert_register_double: precondition data->values == \null ||
                                                          \valid(data->values) got status unknown.
-[eva:alarm] functions.c:79: Warning: 
+[eva:alarm] functions.c:84: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
-[eva:alarm] functions.c:81: Warning: assertion got status unknown.
-[eva:alarm] functions.c:83: Warning: 
+[eva:alarm] functions.c:86: Warning: assertion got status unknown.
+[eva:alarm] functions.c:88: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
diff --git a/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c b/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c
index c173eeb0c636c88c751bdf35ad302ec72cea7082..7aea7dc1b36ead4003a0ffb2ceb233a3e43b1f45 100644
--- a/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c
+++ b/src/plugins/e-acsl/tests/arith/oracle/gen_functions.c
@@ -100,6 +100,12 @@ int __gen_e_acsl_f_sum(int x);
 */
 void __gen_e_acsl_over(__e_acsl_mpq_t *__retres_arg, double a, double b);
 
+int z = 8;
+/*@ logic integer f3{L}(integer y) = \at(z + y,L);
+
+*/
+long __gen_e_acsl_f3(int y);
+
 int main(void)
 {
   int __retres;
@@ -120,7 +126,7 @@ int main(void)
     __gen_e_acsl_assert_data.pred_txt = "p1(x, y)";
     __gen_e_acsl_assert_data.file = "functions.c";
     __gen_e_acsl_assert_data.fct = "main";
-    __gen_e_acsl_assert_data.line = 51;
+    __gen_e_acsl_assert_data.line = 56;
     __e_acsl_assert(__gen_e_acsl_p1_2,& __gen_e_acsl_assert_data);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
   }
@@ -137,7 +143,7 @@ int main(void)
     __gen_e_acsl_assert_data_2.pred_txt = "p2(3, 4)";
     __gen_e_acsl_assert_data_2.file = "functions.c";
     __gen_e_acsl_assert_data_2.fct = "main";
-    __gen_e_acsl_assert_data_2.line = 52;
+    __gen_e_acsl_assert_data_2.line = 57;
     __e_acsl_assert(__gen_e_acsl_p2_2,& __gen_e_acsl_assert_data_2);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
   }
@@ -158,7 +164,7 @@ int main(void)
     __gen_e_acsl_assert_data_3.pred_txt = "p2(5, 99999999999999999999999999999)";
     __gen_e_acsl_assert_data_3.file = "functions.c";
     __gen_e_acsl_assert_data_3.fct = "main";
-    __gen_e_acsl_assert_data_3.line = 53;
+    __gen_e_acsl_assert_data_3.line = 58;
     __e_acsl_assert(__gen_e_acsl_p2_4,& __gen_e_acsl_assert_data_3);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
     __gmpz_clear(__gen_e_acsl_);
@@ -178,7 +184,7 @@ int main(void)
     __gen_e_acsl_assert_data_4.pred_txt = "f1(x, y) == 3";
     __gen_e_acsl_assert_data_4.file = "functions.c";
     __gen_e_acsl_assert_data_4.fct = "main";
-    __gen_e_acsl_assert_data_4.line = 55;
+    __gen_e_acsl_assert_data_4.line = 60;
     __e_acsl_assert(__gen_e_acsl_f1_2 == 3L,& __gen_e_acsl_assert_data_4);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
   }
@@ -200,7 +206,7 @@ int main(void)
     __gen_e_acsl_assert_data_5.pred_txt = "p2(x, f1(3, 4))";
     __gen_e_acsl_assert_data_5.file = "functions.c";
     __gen_e_acsl_assert_data_5.fct = "main";
-    __gen_e_acsl_assert_data_5.line = 56;
+    __gen_e_acsl_assert_data_5.line = 61;
     __e_acsl_assert(__gen_e_acsl_p2_6,& __gen_e_acsl_assert_data_5);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
   }
@@ -226,7 +232,7 @@ int main(void)
     __gen_e_acsl_assert_data_6.pred_txt = "f1(9, 99999999999999999999999999999) > 0";
     __gen_e_acsl_assert_data_6.file = "functions.c";
     __gen_e_acsl_assert_data_6.fct = "main";
-    __gen_e_acsl_assert_data_6.line = 57;
+    __gen_e_acsl_assert_data_6.line = 62;
     __e_acsl_assert(__gen_e_acsl_gt_2 > 0,& __gen_e_acsl_assert_data_6);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6);
     __gmpz_clear(__gen_e_acsl__3);
@@ -257,7 +263,7 @@ int main(void)
     __gen_e_acsl_assert_data_7.pred_txt = "f1(99999999999999999999999999999, 99999999999999999999999999999) ==\n199999999999999999999999999998";
     __gen_e_acsl_assert_data_7.file = "functions.c";
     __gen_e_acsl_assert_data_7.fct = "main";
-    __gen_e_acsl_assert_data_7.line = 58;
+    __gen_e_acsl_assert_data_7.line = 63;
     __e_acsl_assert(__gen_e_acsl_eq == 0,& __gen_e_acsl_assert_data_7);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7);
     __gmpz_clear(__gen_e_acsl__5);
@@ -283,7 +289,7 @@ int main(void)
     __gen_e_acsl_assert_data_8.pred_txt = "g(x) == x";
     __gen_e_acsl_assert_data_8.file = "functions.c";
     __gen_e_acsl_assert_data_8.fct = "main";
-    __gen_e_acsl_assert_data_8.line = 63;
+    __gen_e_acsl_assert_data_8.line = 68;
     __e_acsl_assert(__gen_e_acsl_g_2 == x,& __gen_e_acsl_assert_data_8);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_8);
   }
@@ -303,7 +309,7 @@ int main(void)
     __gen_e_acsl_assert_data_9.pred_txt = "h_char(c) == c";
     __gen_e_acsl_assert_data_9.file = "functions.c";
     __gen_e_acsl_assert_data_9.fct = "main";
-    __gen_e_acsl_assert_data_9.line = 66;
+    __gen_e_acsl_assert_data_9.line = 71;
     __e_acsl_assert((int)__gen_e_acsl_h_char_2 == (int)c,
                     & __gen_e_acsl_assert_data_9);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_9);
@@ -324,7 +330,7 @@ int main(void)
     __gen_e_acsl_assert_data_10.pred_txt = "h_short(s) == s";
     __gen_e_acsl_assert_data_10.file = "functions.c";
     __gen_e_acsl_assert_data_10.fct = "main";
-    __gen_e_acsl_assert_data_10.line = 68;
+    __gen_e_acsl_assert_data_10.line = 73;
     __e_acsl_assert((int)__gen_e_acsl_h_short_2 == (int)s,
                     & __gen_e_acsl_assert_data_10);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_10);
@@ -348,7 +354,7 @@ int main(void)
     __gen_e_acsl_assert_data_11.pred_txt = "\\let r = t1(m); r.k == 8";
     __gen_e_acsl_assert_data_11.file = "functions.c";
     __gen_e_acsl_assert_data_11.fct = "main";
-    __gen_e_acsl_assert_data_11.line = 73;
+    __gen_e_acsl_assert_data_11.line = 78;
     __e_acsl_assert(__gen_e_acsl_r.k == 8,& __gen_e_acsl_assert_data_11);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_11);
   }
@@ -369,7 +375,7 @@ int main(void)
     __gen_e_acsl_assert_data_12.pred_txt = "t2(t1(m)) == 17";
     __gen_e_acsl_assert_data_12.file = "functions.c";
     __gen_e_acsl_assert_data_12.fct = "main";
-    __gen_e_acsl_assert_data_12.line = 74;
+    __gen_e_acsl_assert_data_12.line = 79;
     __e_acsl_assert(__gen_e_acsl_t2_2 == 17L,& __gen_e_acsl_assert_data_12);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_12);
   }
@@ -389,7 +395,7 @@ int main(void)
     __gen_e_acsl_assert_data_13.pred_txt = "f2(d) > 0";
     __gen_e_acsl_assert_data_13.file = "functions.c";
     __gen_e_acsl_assert_data_13.fct = "main";
-    __gen_e_acsl_assert_data_13.line = 79;
+    __gen_e_acsl_assert_data_13.line = 84;
     __e_acsl_assert(__gen_e_acsl_f2_2 > 0.,& __gen_e_acsl_assert_data_13);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_13);
   }
@@ -406,7 +412,7 @@ int main(void)
     __gen_e_acsl_assert_data_14.pred_txt = "f_sum(100) == 100";
     __gen_e_acsl_assert_data_14.file = "functions.c";
     __gen_e_acsl_assert_data_14.fct = "main";
-    __gen_e_acsl_assert_data_14.line = 81;
+    __gen_e_acsl_assert_data_14.line = 86;
     __e_acsl_assert(__gen_e_acsl_f_sum_2 == 100,
                     & __gen_e_acsl_assert_data_14);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_14);
@@ -431,7 +437,7 @@ int main(void)
     __gen_e_acsl_assert_data_15.pred_txt = "over(1., 2.) == 0.5";
     __gen_e_acsl_assert_data_15.file = "functions.c";
     __gen_e_acsl_assert_data_15.fct = "main";
-    __gen_e_acsl_assert_data_15.line = 83;
+    __gen_e_acsl_assert_data_15.line = 88;
     __e_acsl_assert(__gen_e_acsl_eq_2 == 0,& __gen_e_acsl_assert_data_15);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_15);
     __gmpq_clear(__gen_e_acsl_over_2);
@@ -450,7 +456,7 @@ int main(void)
     __gen_e_acsl_assert_data_16.pred_txt = "p_here(27)";
     __gen_e_acsl_assert_data_16.file = "functions.c";
     __gen_e_acsl_assert_data_16.fct = "main";
-    __gen_e_acsl_assert_data_16.line = 86;
+    __gen_e_acsl_assert_data_16.line = 90;
     __e_acsl_assert(__gen_e_acsl_p_here_2,& __gen_e_acsl_assert_data_16);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_16);
   }
@@ -467,12 +473,29 @@ int main(void)
     __gen_e_acsl_assert_data_17.pred_txt = "f_here(27) == 27";
     __gen_e_acsl_assert_data_17.file = "functions.c";
     __gen_e_acsl_assert_data_17.fct = "main";
-    __gen_e_acsl_assert_data_17.line = 87;
+    __gen_e_acsl_assert_data_17.line = 91;
     __e_acsl_assert(__gen_e_acsl_f_here_2 == 27,
                     & __gen_e_acsl_assert_data_17);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_17);
   }
   /*@ assert f_here(27) == 27; */ ;
+  {
+    long __gen_e_acsl_f3_2;
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data_18 =
+      {.values = (void *)0};
+    __gen_e_acsl_f3_2 = __gen_e_acsl_f3(5);
+    __e_acsl_assert_register_long(& __gen_e_acsl_assert_data_18,"f3(5)",0,
+                                  __gen_e_acsl_f3_2);
+    __gen_e_acsl_assert_data_18.blocking = 1;
+    __gen_e_acsl_assert_data_18.kind = "Assertion";
+    __gen_e_acsl_assert_data_18.pred_txt = "f3(5) == 13";
+    __gen_e_acsl_assert_data_18.file = "functions.c";
+    __gen_e_acsl_assert_data_18.fct = "main";
+    __gen_e_acsl_assert_data_18.line = 93;
+    __e_acsl_assert(__gen_e_acsl_f3_2 == 13L,& __gen_e_acsl_assert_data_18);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_18);
+  }
+  /*@ assert f3(5) == 13; */ ;
   __retres = 0;
   __e_acsl_memory_clean();
   return __retres;
@@ -741,4 +764,12 @@ void __gen_e_acsl_over(__e_acsl_mpq_t *__retres_arg, double a, double b)
   return;
 }
 
+/*@ assigns \result;
+    assigns \result \from y; */
+long __gen_e_acsl_f3(int y)
+{
+  long __retres = z + (long)y;
+  return __retres;
+}
+