[C++] Fail for semicolons without a rule
diff --git a/eval.cc b/eval.cc
index a7fbb78..ae41567 100644
--- a/eval.cc
+++ b/eval.cc
@@ -115,8 +115,11 @@
 
   const string&& expr = stmt->expr->Eval(this);
   // See semicolon.mk.
-  if (expr.find_first_not_of(" \t;") == string::npos)
+  if (expr.find_first_not_of(" \t;") == string::npos) {
+    if (stmt->term == ';')
+      Error("*** missing rule before commands.");
     return;
+  }
 
   Rule* rule;
   RuleVarAssignment rule_var;
diff --git a/testcase/err_semicolon.mk b/testcase/err_semicolon.mk
index 2e244ce..f85826a 100644
--- a/testcase/err_semicolon.mk
+++ b/testcase/err_semicolon.mk
@@ -1,3 +1,2 @@
-# TODO(c): fix error message
 # This is an error. See also semicolon.mk
 ;
diff --git a/testcase/err_semicolon2.mk b/testcase/err_semicolon2.mk
new file mode 100644
index 0000000..9b3bde1
--- /dev/null
+++ b/testcase/err_semicolon2.mk
@@ -0,0 +1,2 @@
+a;
+
diff --git a/testcase/err_semicolon3.mk b/testcase/err_semicolon3.mk
new file mode 100644
index 0000000..ba3f501
--- /dev/null
+++ b/testcase/err_semicolon3.mk
@@ -0,0 +1,3 @@
+# TODO(go): Fix
+
+ ;
diff --git a/testcase/err_semicolon4.mk b/testcase/err_semicolon4.mk
new file mode 100644
index 0000000..2dd21f2
--- /dev/null
+++ b/testcase/err_semicolon4.mk
@@ -0,0 +1 @@
+;