diff --git a/src/cc65/declare.c b/src/cc65/declare.c
index b141a15ef..4950dc8f8 100644
--- a/src/cc65/declare.c
+++ b/src/cc65/declare.c
@@ -882,12 +882,19 @@ static SymEntry* ParseUnionDecl (const char* Name, unsigned* DSFlags)
     EnterStructLevel ();
 
     /* Parse union fields */
-    UnionSize      = 0;
+    UnionSize = 0;
     while (CurTok.Tok != TOK_RCURLY) {
 
         /* Get the type of the entry */
         DeclSpec Spec;
         int SignednessSpecified = 0;
+
+        /* Check for a _Static_assert */
+        if (CurTok.Tok == TOK_STATIC_ASSERT) {
+            ParseStaticAssert ();
+            continue;
+        }
+
         InitDeclSpec (&Spec);
         ParseTypeSpec (&Spec, -1, T_QUAL_NONE, &SignednessSpecified);
 
@@ -1030,6 +1037,7 @@ static SymEntry* ParseStructDecl (const char* Name, unsigned* DSFlags)
 
         /* Get the type of the entry */
         DeclSpec Spec;
+        int SignednessSpecified = 0;
 
         /* Check for a _Static_assert */
         if (CurTok.Tok == TOK_STATIC_ASSERT) {
@@ -1037,7 +1045,6 @@ static SymEntry* ParseStructDecl (const char* Name, unsigned* DSFlags)
             continue;
         }
 
-        int SignednessSpecified = 0;
         InitDeclSpec (&Spec);
         ParseTypeSpec (&Spec, -1, T_QUAL_NONE, &SignednessSpecified);
 
diff --git a/test/val/staticassert.c b/test/val/staticassert.c
index e43eeec8d..3338f7a4a 100644
--- a/test/val/staticassert.c
+++ b/test/val/staticassert.c
@@ -65,6 +65,13 @@ struct S {
     int b;
 };
 
+/* _Static_assert can also appear in unions. */
+union U {
+    int a;
+    _Static_assert (1, "1 should still be true.");
+    int b;
+};
+
 
 int main (void)
 {