diff --git a/test/compiler/efArray.st b/test/compiler/efArray.st
new file mode 100644
index 0000000000000000000000000000000000000000..f8842de31f374ef0381b50b6ae360b01d735b701
--- /dev/null
+++ b/test/compiler/efArray.st
@@ -0,0 +1,5 @@
+program efArrayTest
+
+evflag efa[3];  /* error: array of event flags */
+
+#include "simple.st"
diff --git a/test/compiler/efGlobal.st b/test/compiler/efGlobal.st
new file mode 100644
index 0000000000000000000000000000000000000000..704e70d83c5a660cc36ffb6d9f050d58755b5e4c
--- /dev/null
+++ b/test/compiler/efGlobal.st
@@ -0,0 +1,11 @@
+program efGlobalTest
+
+ss x {
+    evflag a;
+    state y {
+        evflag b;
+        when () {
+            evflag c;
+        } exit
+    }
+}
diff --git a/test/compiler/efPointer.st b/test/compiler/efPointer.st
new file mode 100644
index 0000000000000000000000000000000000000000..6916cc929d9f0264213f9c9be9bd69103d95ae7f
--- /dev/null
+++ b/test/compiler/efPointer.st
@@ -0,0 +1,5 @@
+program efPointerTest
+
+evflag *efp;    /* error: pointer to event flag */
+
+#include "simple.st"
diff --git a/test/compiler/foreignGlobal.st b/test/compiler/foreignGlobal.st
new file mode 100644
index 0000000000000000000000000000000000000000..465f2bf7f4adc1a83b3ae76b0a5e5eca627c7dfd
--- /dev/null
+++ b/test/compiler/foreignGlobal.st
@@ -0,0 +1,11 @@
+program foreignGlobalTest
+
+ss x {
+    foreign a;
+    state y {
+        foreign b;
+        when () {
+            foreign c;
+        } exit
+    }
+}
diff --git a/test/compiler/pvNotAssigned.st b/test/compiler/pvNotAssigned.st
new file mode 100644
index 0000000000000000000000000000000000000000..35209257020198b63848c8ef6e2165ad75a3749b
--- /dev/null
+++ b/test/compiler/pvNotAssigned.st
@@ -0,0 +1,38 @@
+program pvNotAssigned
+
+int a;
+
+entry {
+    pvGet(a);
+    pvPut(a);
+    pvAssign(a, "");
+    pvMonitor(a);
+}
+ss x {
+    state y {
+        entry {
+            pvAssign(a, "");
+            pvMonitor(a);
+            pvGet(a);
+            pvPut(a);
+        }
+        when () {
+            pvAssign(a, "");
+            pvMonitor(a);
+            pvGet(a);
+            pvPut(a);
+        } exit
+        exit {
+            pvAssign(a, "");
+            pvMonitor(a);
+            pvGet(a);
+            pvPut(a);
+        }
+    }
+}
+exit {
+    pvAssign(a, "");
+    pvMonitor(a);
+    pvGet(a);
+    pvPut(a);
+}
diff --git a/test/compiler/test.plt b/test/compiler/test.plt
index 48b38f75e5cf1933634ee2466258b6109c02b467..a10709910f2c9ad8fef4deeb2e80aa2f18fd0bf6 100644
--- a/test/compiler/test.plt
+++ b/test/compiler/test.plt
@@ -23,6 +23,11 @@ my @error = qw(
   syncq_size_out_of_range
   varinit
   varinitOptr
+  efArray
+  efPointer
+  efGlobal
+  foreignGlobal
+  pvNotAssigned
 );
 
 if ($host_arch =~ /64/) {
diff --git a/test/validate/decl.st b/test/validate/decl.st
index d01a29bc6dcbb268c5a9dc4d6d5d6719b735b25b..58d6ac480a9d873fc9dee9fe17ed2c1c12d30d7c 100644
--- a/test/validate/decl.st
+++ b/test/validate/decl.st
@@ -10,11 +10,6 @@ int *(*(*complicated)[2][3])[1] = 0;
 
 evflag ef;
 
-#if 0
-evflag efa[3];  /* error: array of event flags */
-evflag *efp;    /* error: pointer to event flag */
-#endif
-
 /* struct member access */
 %%struct r { int x; } rv;
 
@@ -53,10 +48,7 @@ ss one {
         sync c to ef;
         string s = "s";
         assign s;
-        /* evflag ef; */    /* error: event flag must be global */
-        /* foreign z; */    /* error: foreign must be global */
         entry {
-            /* pvPut(a); */ /* error: not assigned */
             pvPut(b);
             pvPut(c);
             pvPut(s);