diff --git a/lib/modules/Parser.pmod/C.pmod b/lib/modules/Parser.pmod/C.pmod
index 8fd8d3d558bf4c4275401e4706f6837f26862136..5b43bd81137884ba20b5af1f517a9db3631719d4 100644
--- a/lib/modules/Parser.pmod/C.pmod
+++ b/lib/modules/Parser.pmod/C.pmod
@@ -277,7 +277,19 @@ array group(array(string|Token) tokens, void|mapping groupings)
     {
       case 0: ret+=({token}); break;
       case 1: stack->push(ret); ret=({token}); break;
-      case 2: ret=stack->pop()+({ ret + ({token}) });
+      case 2:
+	if (!sizeof(ret) || !stack->ptr ||
+	    (groupings[(string)ret[0]] != (string)token)) {
+	  // Mismatch
+	  werror(sprintf("**** Grouping mismatch token=%O\n"
+			 "**** tokens: ({ %{%O, %}})\n"
+			 "**** ret: ({ %{%O, %}})\n"
+			 "**** stackdepth: %d\n",
+			 (string)token, (array(string)) tokens,
+			 (array(string))ret, stack->ptr));
+	  return ret;
+	}
+	ret=stack->pop()+({ ret + ({token}) });
     }
   }
   return ret;