Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 2f0a06782533aa6fcd6240724fe8d0dce348e8c6)
+++ src/Parser/parser.yy	(revision d807ca2866358a4b3b1a0171f96cffdd65420e92)
@@ -175,4 +175,5 @@
 	bool flag;
 	CatchStmt::Kind catch_kind;
+	GenericExpr * genexpr;
 }
 
@@ -259,4 +260,5 @@
 %type<flag> asm_volatile_opt
 %type<en> handler_predicate_opt
+%type<genexpr> generic_association generic_assoc_list
 
 // statements
@@ -501,15 +503,30 @@
 		{ SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
 	| GENERIC '(' assignment_expression ',' generic_assoc_list ')' // C11
-		{ SemanticError( yylloc, "_Generic is currently unimplemented." ); $$ = nullptr; }
+		{
+			// add the missing control expression to the GenericExpr and return it
+			$5->control = maybeMoveBuild<Expression>( $3 );
+			$$ = new ExpressionNode( $5 );
+		}
 	;
 
 generic_assoc_list:										// C11
-	| generic_association
+	generic_association
 	| generic_assoc_list ',' generic_association
+		{
+			// steal the association node from the singleton and delete the wrapper
+			$1->associations.splice($1->associations.end(), $3->associations);
+			delete $3;
+			$$ = $1;
+		}
 	;
 
 generic_association:									// C11
 	type_no_function ':' assignment_expression
+		{
+			// create a GenericExpr wrapper with one association pair
+			$$ = new GenericExpr( nullptr, { { maybeMoveBuildType($1), maybeMoveBuild<Expression>($3) } } );
+		}
 	| DEFAULT ':' assignment_expression
+		{ $$ = new GenericExpr( nullptr, { { maybeMoveBuild<Expression>($3) } } ); }
 	;
 
