diff --git a/tests/value/modulo.i b/tests/value/modulo.i
index 70e4fe6ceec0abdb7f206548ce5e2a3274d0dc25..fbb77dc8f382e5a240869aa2077f18f8ae189a4c 100644
--- a/tests/value/modulo.i
+++ b/tests/value/modulo.i
@@ -9,13 +9,13 @@ void main2 ()
   A = (4 * i) % 4;
   B = (4 * i + 1) % 4;
   i = v; //@ assert ((i>=-100) && (i<=100)) ;
-  E = (3*i + 1) % 12; 
+  E = (3*i + 1) % 12;
   i = v; //@ assert ((i>=0) && (i<=100)) ;
-    
+
   C = (4 * i + 1) % 4;
-  D = (3*i + 1) % 12; 
-  F = (24*i + 5) % 12;    
-  G = (24*i + 5) % 13;    
+  D = (3*i + 1) % 12;
+  F = (24*i + 5) % 12;
+  G = (24*i + 5) % 13;
   H = i % 1000;
   I = (2 * i+1101) % 1000;
   J = (5 * i - 201) % 1000;
@@ -131,7 +131,7 @@ void extract_bits_modulo(void)
 //volatile int v;
 
 // Test extraction of modulo with 'positive' semantics (ie. not nearest
-// to zero in absolute value, which is the one '%' would have used). 
+// to zero in absolute value, which is the one '%' would have used).
 void pos_rem(void) {
   int n = v;
   //@ assert -1 <= n <= 255;
@@ -147,6 +147,18 @@ void pos_rem(void) {
   int l = (int)*(signed char*)&n; // Best rem is ([0..72] \cup {255})%255, we approximate by [-128..127]
 }
 
+/* No overflow alarms should be emitted on mod operations, even on addresses. */
+void address_modulo(void) {
+  int* ptr = v ? &A : &B;
+  unsigned int uaddr = (unsigned int) ptr;
+  int addr = (int) uaddr;
+  int i = v % 100;
+  int r = addr % 16;
+  r = addr % i;
+  r = uaddr % 16;
+  r = uaddr % i;
+}
+
 void main() {
   if (v) { pgcd1(a, b); }
   if (v) { pgcd2(a, b); }
@@ -157,4 +169,5 @@ void main() {
   shift_modulo();
   extract_bits_modulo();
   pos_rem();
+  address_modulo();
 }
diff --git a/tests/value/oracle/modulo.res.oracle b/tests/value/oracle/modulo.res.oracle
index fe4cc36533ff4d0cba105c6afff625dc025e3343..2735d95852af1642e100d42a180b75add289acd7 100644
--- a/tests/value/oracle/modulo.res.oracle
+++ b/tests/value/oracle/modulo.res.oracle
@@ -26,8 +26,8 @@
   b ∈ [--..--]
   i2 ∈ [--..--]
 [eva] computing for function pgcd1 <- main.
-  Called from modulo.i:151.
-[eva:alarm] modulo.i:151: Warning: 
+  Called from modulo.i:163.
+[eva:alarm] modulo.i:163: Warning: 
   function pgcd1: precondition got status unknown.
 [eva] modulo.i:37: loop invariant got status valid.
 [eva] modulo.i:38: loop invariant got status valid.
@@ -40,8 +40,8 @@
 [eva] Recording results for pgcd1
 [eva] Done for function pgcd1
 [eva] computing for function pgcd2 <- main.
-  Called from modulo.i:152.
-[eva:alarm] modulo.i:152: Warning: 
+  Called from modulo.i:164.
+[eva:alarm] modulo.i:164: Warning: 
   function pgcd2: precondition got status unknown.
 [eva] modulo.i:50: loop invariant got status valid.
 [eva] modulo.i:53: Frama_C_show_each_2: [-10..10], [1..10], [-9..9]
@@ -49,15 +49,15 @@
 [eva] Recording results for pgcd2
 [eva] Done for function pgcd2
 [eva] computing for function pgcd3 <- main.
-  Called from modulo.i:153.
-[eva:alarm] modulo.i:153: Warning: 
+  Called from modulo.i:165.
+[eva:alarm] modulo.i:165: Warning: 
   function pgcd3: precondition got status unknown.
 [eva:alarm] modulo.i:63: Warning: division by zero. assert b_0 ≢ 0;
 [eva] modulo.i:64: Frama_C_show_each_3: [-10..10], [-10..10], [-9..9]
 [eva] Recording results for pgcd3
 [eva] Done for function pgcd3
 [eva] computing for function main2 <- main.
-  Called from modulo.i:155.
+  Called from modulo.i:167.
 [eva:alarm] modulo.i:9: Warning: signed overflow. assert -2147483648 ≤ 4 * i;
 [eva:alarm] modulo.i:9: Warning: signed overflow. assert 4 * i ≤ 2147483647;
 [eva:alarm] modulo.i:10: Warning: signed overflow. assert -2147483648 ≤ 4 * i;
@@ -69,12 +69,12 @@
 [eva] Recording results for main2
 [eva] Done for function main2
 [eva] computing for function simultaneous_congruences <- main.
-  Called from modulo.i:156.
+  Called from modulo.i:168.
 [eva:alarm] modulo.i:76: Warning: assertion got status unknown.
 [eva] Recording results for simultaneous_congruences
 [eva] Done for function simultaneous_congruences
 [eva] computing for function shift_modulo <- main.
-  Called from modulo.i:157.
+  Called from modulo.i:169.
 [eva:alarm] modulo.i:100: Warning: assertion got status unknown.
 [eva:alarm] modulo.i:103: Warning: 
   signed overflow. assert (int)((int)(i * 12) + 5) << 25 ≤ 2147483647;
@@ -83,21 +83,42 @@
 [eva] Recording results for shift_modulo
 [eva] Done for function shift_modulo
 [eva] computing for function extract_bits_modulo <- main.
-  Called from modulo.i:158.
+  Called from modulo.i:170.
 [eva:alarm] modulo.i:109: Warning: assertion got status unknown.
 [eva] Recording results for extract_bits_modulo
 [eva] Done for function extract_bits_modulo
 [eva] computing for function pos_rem <- main.
-  Called from modulo.i:159.
+  Called from modulo.i:171.
 [eva:alarm] modulo.i:137: Warning: assertion got status unknown.
 [eva:alarm] modulo.i:142: Warning: assertion got status unknown.
 [eva:alarm] modulo.i:146: Warning: assertion got status unknown.
 [eva] Recording results for pos_rem
 [eva] Done for function pos_rem
+[eva] computing for function address_modulo <- main.
+  Called from modulo.i:172.
+[eva:garbled-mix:write] modulo.i:156: 
+  Assigning imprecise value to r because of arithmetic operation on addresses.
+[eva:alarm] modulo.i:157: Warning: division by zero. assert i ≢ 0;
+[eva:garbled-mix:write] modulo.i:157: 
+  Assigning imprecise value to r because of arithmetic operation on addresses.
+[eva:garbled-mix:write] modulo.i:158: 
+  Assigning imprecise value to r because of arithmetic operation on addresses.
+[eva:alarm] modulo.i:159: Warning: 
+  division by zero. assert (unsigned int)i ≢ 0;
+[eva:garbled-mix:write] modulo.i:159: 
+  Assigning imprecise value to r because of arithmetic operation on addresses.
+[eva] Recording results for address_modulo
+[eva] Done for function address_modulo
 [eva] Recording results for main
 [eva] Done for function main
 [scope:rm_asserts] removing 2 assertion(s)
 [eva] ====== VALUES COMPUTED ======
+[eva:final-states] Values at end of function address_modulo:
+  ptr ∈ {{ &A ; &B }}
+  uaddr ∈ {{ (unsigned int)&A ; (unsigned int)&B }}
+  addr ∈ {{ (int)&A ; (int)&B }}
+  i ∈ [-99..99]
+  r ∈ {{ garbled mix of &{A; B} (origin: Arithmetic {modulo.i:159}) }}
 [eva:final-states] Values at end of function extract_bits_modulo:
   i ∈ [0..10]
   aa1 ∈ [1291..32011],1291%3072
@@ -182,6 +203,8 @@
   O ∈ [0..11]
   P ∈ {0}
   Q ∈ [-8..8]
+[from] Computing for function address_modulo
+[from] Done for function address_modulo
 [from] Computing for function extract_bits_modulo
 [from] Done for function extract_bits_modulo
 [from] Computing for function main2
@@ -202,6 +225,8 @@
 [from] Done for function main
 [from] ====== DEPENDENCIES COMPUTED ======
   These dependencies hold at termination for the executions that terminate:
+[from] Function address_modulo:
+  NO EFFECTS
 [from] Function extract_bits_modulo:
   NO EFFECTS
 [from] Function main2:
@@ -253,6 +278,10 @@
   P FROM v
   Q FROM v
 [from] ====== END OF DEPENDENCIES ======
+[inout] Out (internal) for function address_modulo:
+    ptr; tmp; uaddr; addr; i; r
+[inout] Inputs for function address_modulo:
+    v
 [inout] Out (internal) for function extract_bits_modulo:
     i; aa1; ptr1; m1; n1; aa2; ptr2; m2; n2; aa3; ptr3; m3; n3; aa4; ptr4; 
     m4; n4