Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 35f730f354743329a974699df96cde989593246d)
+++ src/Parser/DeclarationNode.cc	(revision 6040e67da4f1afa6550d4e3339f24a66a4be8fc3)
@@ -71,4 +71,7 @@
 	attr.expr = nullptr;
 	attr.type = nullptr;
+
+	assert.condition = nullptr;
+	assert.message = nullptr;
 }
 
@@ -88,4 +91,7 @@
 	// asmName, no delete, passed to next stage
 	delete initializer;
+
+	delete assert.condition;
+	delete assert.message;
 }
 
@@ -117,4 +123,7 @@
 	newnode->attr.expr = maybeClone( attr.expr );
 	newnode->attr.type = maybeClone( attr.type );
+
+	newnode->assert.condition = maybeClone( assert.condition );
+	newnode->assert.message = maybeClone( assert.message );
 	return newnode;
 } // DeclarationNode::clone
@@ -434,4 +443,12 @@
 	return newnode;
 }
+
+DeclarationNode * DeclarationNode::newStaticAssert( ExpressionNode * condition, Expression * message ) {
+	DeclarationNode * newnode = new DeclarationNode;
+	newnode->assert.condition = condition;
+	newnode->assert.message = message;
+	return newnode;
+}
+
 
 void appendError( string & dst, const string & src ) {
@@ -1052,4 +1069,8 @@
 	} // if
 
+	if ( assert.condition ) {
+		return new StaticAssertDecl( maybeBuild< Expression >( assert.condition ), strict_dynamic_cast< ConstantExpr * >( maybeClone( assert.message ) ) );
+	}
+
 	// SUE's cannot have function specifiers, either
 	//
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 35f730f354743329a974699df96cde989593246d)
+++ src/Parser/ParseNode.h	(revision 6040e67da4f1afa6550d4e3339f24a66a4be8fc3)
@@ -246,4 +246,5 @@
 	static DeclarationNode * newAttribute( std::string *, ExpressionNode * expr = nullptr ); // gcc attributes
 	static DeclarationNode * newAsmStmt( StatementNode * stmt ); // gcc external asm statement
+	static DeclarationNode * newStaticAssert( ExpressionNode * condition, Expression * message );
 
 	DeclarationNode();
@@ -313,4 +314,10 @@
 	Attr_t attr;
 
+	struct StaticAssert_t {
+		ExpressionNode * condition;
+		Expression * message;
+	};
+	StaticAssert_t assert;
+
 	BuiltinType builtin;
 
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 35f730f354743329a974699df96cde989593246d)
+++ src/Parser/parser.yy	(revision 6040e67da4f1afa6550d4e3339f24a66a4be8fc3)
@@ -1314,5 +1314,5 @@
 static_assert:
 	STATICASSERT '(' constant_expression ',' string_literal ')' ';' // C11
-		{ SemanticError( yylloc, "Static assert is currently unimplemented." ); $$ = nullptr; }
+		{ $$ = DeclarationNode::newStaticAssert( $3, $5 ); }
 
 // C declaration syntax is notoriously confusing and error prone. Cforall provides its own type, variable and function
