diff --git a/test/test_grudge.py b/test/test_grudge.py
index 6cbb55f6f36e5f0e6b584105312b7170dfc5c591..4e6f80970017558848efca0f20c4a0969a69eae1 100644
--- a/test/test_grudge.py
+++ b/test/test_grudge.py
@@ -1138,6 +1138,31 @@ def test_empty_boundary(actx_factory):
         assert len(component) == len(discr.discr_from_dd(BTAG_NONE).groups)
 
 
+def test_operator_compiler_overwrite(ctx_factory):
+    """Tests that the same expression in ``eval_code`` and ``discr_code``
+    does not confuse the OperatorCompiler in grudge/symbolic/compiler.py.
+    """
+
+    ctx = ctx_factory()
+    queue = cl.CommandQueue(ctx)
+
+    ambient_dim = 2
+    target_order = 4
+
+    from meshmode.mesh.generation import generate_regular_rect_mesh
+    mesh = generate_regular_rect_mesh(
+            a=(-0.5,)*ambient_dim, b=(0.5,)*ambient_dim,
+            n=(8,)*ambient_dim, order=1)
+    discr = DGDiscretizationWithBoundaries(ctx, mesh, order=target_order)
+
+    sym_u = sym.nodes(ambient_dim)
+    sym_div_u = sum(d(u) for d, u in zip(sym.nabla(ambient_dim), sym_u))
+
+    div_u = bind(discr, sym_div_u)(queue)
+    error = la.norm(div_u.get(queue) - discr.dim)
+    logger.info("error: %.5e", error)
+
+
 # You can test individual routines by typing
 # $ python test_grudge.py 'test_routine()'