diff --git a/src/mapper/constant_folder.py b/src/mapper/constant_folder.py
index c9fa19834922f7f5d25df271ccca9277cf574d3d..680375f59a69ac1f69e0430a5c6d86283492d3a5 100644
--- a/src/mapper/constant_folder.py
+++ b/src/mapper/constant_folder.py
@@ -8,8 +8,14 @@ class ConstantFoldingMapperBase(object):
         from pymbolic.mapper.dependency import DependencyMapper
         return not bool(DependencyMapper()(expr))
 
-    def fold(self, expr, klass, op, constructor):
+    def evaluate(self, expr):
         from pymbolic import evaluate
+        try:
+            return evaluate(expr)
+        except ValueError:
+            return None
+
+    def fold(self, expr, klass, op, constructor):
 
         constants = []
         nonconstants = []
@@ -21,7 +27,12 @@ class ConstantFoldingMapperBase(object):
                 queue = list(child.children) + queue
             else:
                 if self.is_constant(child):
-                    constants.append(evaluate(child))
+                    value = self.evaluate(child)
+                    if value is None:
+                        # couldn't evaluate
+                        nonconstants.append(child)
+                    else:
+                        constants.append(value)
                 else:
                     nonconstants.append(child)