Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 637dd9c6c6f1e227e65a024443938074659ae04c)
+++ src/CodeGen/CodeGenerator.cc	(revision cc32d8399627ee613fb6842043aca12a1038ffcb)
@@ -887,4 +887,8 @@
 		if ( asmStmt->get_instruction() ) asmStmt->get_instruction()->accept( *visitor );
 		output << " )" ;
+	}
+
+	void CodeGenerator::postvisit( DirectiveStmt * dirStmt ) {
+		output << dirStmt->directive;
 	}
 
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 637dd9c6c6f1e227e65a024443938074659ae04c)
+++ src/CodeGen/CodeGenerator.h	(revision cc32d8399627ee613fb6842043aca12a1038ffcb)
@@ -99,4 +99,5 @@
 		void postvisit( ExprStmt * );
 		void postvisit( AsmStmt * );
+		void postvisit( DirectiveStmt * );
 		void postvisit( AsmDecl * );				// special: statement in declaration context
 		void postvisit( IfStmt * );
Index: src/Common/PassVisitor.h
===================================================================
--- src/Common/PassVisitor.h	(revision 637dd9c6c6f1e227e65a024443938074659ae04c)
+++ src/Common/PassVisitor.h	(revision cc32d8399627ee613fb6842043aca12a1038ffcb)
@@ -71,4 +71,5 @@
 	virtual void visit( ExprStmt * exprStmt ) override final;
 	virtual void visit( AsmStmt * asmStmt ) override final;
+	virtual void visit( DirectiveStmt * dirStmt ) override final;
 	virtual void visit( IfStmt * ifStmt ) override final;
 	virtual void visit( WhileStmt * whileStmt ) override final;
@@ -168,4 +169,5 @@
 	virtual Statement * mutate( ExprStmt * exprStmt ) override final;
 	virtual Statement * mutate( AsmStmt * asmStmt ) override final;
+	virtual Statement * mutate( DirectiveStmt * dirStmt ) override final;
 	virtual Statement * mutate( IfStmt * ifStmt ) override final;
 	virtual Statement * mutate( WhileStmt * whileStmt ) override final;
Index: src/Common/PassVisitor.impl.h
===================================================================
--- src/Common/PassVisitor.impl.h	(revision 637dd9c6c6f1e227e65a024443938074659ae04c)
+++ src/Common/PassVisitor.impl.h	(revision cc32d8399627ee613fb6842043aca12a1038ffcb)
@@ -777,4 +777,20 @@
 
 //--------------------------------------------------------------------------
+// AsmStmt
+template< typename pass_type >
+void PassVisitor< pass_type >::visit( DirectiveStmt * node ) {
+	VISIT_START( node )
+
+	VISIT_END( node );
+}
+
+template< typename pass_type >
+Statement * PassVisitor< pass_type >::mutate( DirectiveStmt * node ) {
+	MUTATE_START( node );
+
+	MUTATE_END( Statement, node );
+}
+
+//--------------------------------------------------------------------------
 // IfStmt
 template< typename pass_type >
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 637dd9c6c6f1e227e65a024443938074659ae04c)
+++ src/Parser/StatementNode.cc	(revision cc32d8399627ee613fb6842043aca12a1038ffcb)
@@ -321,6 +321,5 @@
 
 Statement * build_directive( string * directive ) {
-	cout << *directive << endl;
-	return nullptr;
+	return new DirectiveStmt( *directive );
 }
 
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 637dd9c6c6f1e227e65a024443938074659ae04c)
+++ src/SynTree/Mutator.h	(revision cc32d8399627ee613fb6842043aca12a1038ffcb)
@@ -39,4 +39,5 @@
 	virtual Statement * mutate( ExprStmt * exprStmt ) = 0;
 	virtual Statement * mutate( AsmStmt * asmStmt ) = 0;
+	virtual Statement * mutate( DirectiveStmt * dirStmt ) = 0;
 	virtual Statement * mutate( IfStmt * ifStmt ) = 0;
 	virtual Statement * mutate( WhileStmt * whileStmt ) = 0;
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision 637dd9c6c6f1e227e65a024443938074659ae04c)
+++ src/SynTree/Statement.cc	(revision cc32d8399627ee613fb6842043aca12a1038ffcb)
@@ -94,4 +94,11 @@
 
 
+DirectiveStmt::DirectiveStmt( const std::string & directive ) : Statement(), directive( directive ) {}
+
+void DirectiveStmt::print( std::ostream &os, Indenter ) const {
+	os << "GCC Directive:" << directive << endl;
+}
+
+
 const char *BranchStmt::brType[] = { "Goto", "Break", "Continue" };
 
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision 637dd9c6c6f1e227e65a024443938074659ae04c)
+++ src/SynTree/Statement.h	(revision cc32d8399627ee613fb6842043aca12a1038ffcb)
@@ -126,4 +126,17 @@
 };
 
+class DirectiveStmt : public Statement {
+	public:
+	std::string directive;
+
+	DirectiveStmt( const std::string & );
+	virtual ~DirectiveStmt(){}
+
+	virtual DirectiveStmt * clone() const { return new DirectiveStmt( *this ); }
+	virtual void accept( Visitor & v ) { v.visit( this ); }
+	virtual Statement * acceptMutator( Mutator & m ) { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
+};
+
 class IfStmt : public Statement {
   public:
Index: src/SynTree/SynTree.h
===================================================================
--- src/SynTree/SynTree.h	(revision 637dd9c6c6f1e227e65a024443938074659ae04c)
+++ src/SynTree/SynTree.h	(revision cc32d8399627ee613fb6842043aca12a1038ffcb)
@@ -44,4 +44,5 @@
 class ExprStmt;
 class AsmStmt;
+class DirectiveStmt;
 class IfStmt;
 class WhileStmt;
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 637dd9c6c6f1e227e65a024443938074659ae04c)
+++ src/SynTree/Visitor.h	(revision cc32d8399627ee613fb6842043aca12a1038ffcb)
@@ -41,4 +41,5 @@
 	virtual void visit( ExprStmt * exprStmt ) = 0;
 	virtual void visit( AsmStmt * asmStmt ) = 0;
+	virtual void visit( DirectiveStmt * directiveStmt ) = 0;
 	virtual void visit( IfStmt * ifStmt ) = 0;
 	virtual void visit( WhileStmt * whileStmt ) = 0;
