Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision 20207c02efaa0537d8bd93ff326cf0baf5424a82)
+++ src/AST/Convert.cpp	(revision 2d019af1e5dc0df0ad2bbe9c215b4c34968890c0)
@@ -9,7 +9,7 @@
 // Author           : Thierry Delisle
 // Created On       : Thu May 09 15::37::05 2019
-// Last Modified By : Andrew Beach
-// Last Modified On : Thr Nov 12 10:07:00 2020
-// Update Count     : 34
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri Mar 12 18:43:51 2021
+// Update Count     : 36
 //
 
@@ -327,4 +327,10 @@
 	const ast::AsmDecl * visit( const ast::AsmDecl * node ) override final {
 		auto decl = new AsmDecl( get<AsmStmt>().accept1( node->stmt ) );
+		declPostamble( decl, node );
+		return nullptr;
+	}
+
+	const ast::DirectiveDecl * visit( const ast::DirectiveDecl * node ) override final {
+		auto decl = new DirectiveDecl( get<DirectiveStmt>().accept1( node->stmt ) );
 		declPostamble( decl, node );
 		return nullptr;
@@ -1769,4 +1775,16 @@
 	}
 
+	virtual void visit( const DirectiveDecl * old ) override final {
+		auto decl = new ast::DirectiveDecl{
+			old->location,
+			GET_ACCEPT_1(stmt, DirectiveStmt)
+		};
+		decl->extension  = old->extension;
+		decl->uniqueId   = old->uniqueId;
+		decl->storage    = { old->storageClasses.val };
+
+		this->node = decl;
+	}
+
 	virtual void visit( const StaticAssertDecl * old ) override final {
 		auto decl = new ast::StaticAssertDecl{
Index: src/AST/Decl.hpp
===================================================================
--- src/AST/Decl.hpp	(revision 20207c02efaa0537d8bd93ff326cf0baf5424a82)
+++ src/AST/Decl.hpp	(revision 2d019af1e5dc0df0ad2bbe9c215b4c34968890c0)
@@ -10,6 +10,6 @@
 // Created On       : Thu May 9 10:00:00 2019
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jan 11 20:48:38 2021
-// Update Count     : 30
+// Last Modified On : Fri Mar 12 18:25:05 2021
+// Update Count     : 32
 //
 
@@ -365,4 +365,18 @@
 };
 
+/// C-preprocessor directive `#...`
+class DirectiveDecl : public Decl {
+public:
+	ptr<DirectiveStmt> stmt;
+
+	DirectiveDecl( const CodeLocation & loc, DirectiveStmt * stmt )
+	: Decl( loc, "", {}, {} ), stmt(stmt) {}
+
+	const DirectiveDecl * accept( Visitor & v ) const override { return v.visit( this ); }
+private:
+	DirectiveDecl * clone() const override { return new DirectiveDecl( *this ); }
+	MUTATE_FRIEND
+};
+
 class StaticAssertDecl : public Decl {
 public:
Index: src/AST/Fwd.hpp
===================================================================
--- src/AST/Fwd.hpp	(revision 20207c02efaa0537d8bd93ff326cf0baf5424a82)
+++ src/AST/Fwd.hpp	(revision 2d019af1e5dc0df0ad2bbe9c215b4c34968890c0)
@@ -9,7 +9,7 @@
 // Author           : Andrew Beach
 // Created On       : Wed May  8 16:05:00 2019
-// Last Modified By : Andrew Beach
-// Last Modified On : Thr Jul 23 14:15:00 2020
-// Update Count     : 2
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri Mar 12 18:37:39 2021
+// Update Count     : 4
 //
 
@@ -35,4 +35,5 @@
 class TypedefDecl;
 class AsmDecl;
+class DirectiveDecl;
 class StaticAssertDecl;
 
Index: src/AST/Node.cpp
===================================================================
--- src/AST/Node.cpp	(revision 20207c02efaa0537d8bd93ff326cf0baf5424a82)
+++ src/AST/Node.cpp	(revision 2d019af1e5dc0df0ad2bbe9c215b4c34968890c0)
@@ -9,7 +9,7 @@
 // Author           : Thierry Delisle
 // Created On       : Thu May 16 14:16:00 2019
-// Last Modified By : Andrew Beach
-// Last Modified On : Fri Jun  5 10:21:00 2020
-// Update Count     : 1
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri Mar 12 18:25:06 2021
+// Update Count     : 2
 //
 
@@ -130,4 +130,6 @@
 template class ast::ptr_base< ast::AsmDecl, ast::Node::ref_type::weak >;
 template class ast::ptr_base< ast::AsmDecl, ast::Node::ref_type::strong >;
+template class ast::ptr_base< ast::DirectiveDecl, ast::Node::ref_type::weak >;
+template class ast::ptr_base< ast::DirectiveDecl, ast::Node::ref_type::strong >;
 template class ast::ptr_base< ast::StaticAssertDecl, ast::Node::ref_type::weak >;
 template class ast::ptr_base< ast::StaticAssertDecl, ast::Node::ref_type::strong >;
Index: src/AST/Pass.hpp
===================================================================
--- src/AST/Pass.hpp	(revision 20207c02efaa0537d8bd93ff326cf0baf5424a82)
+++ src/AST/Pass.hpp	(revision 2d019af1e5dc0df0ad2bbe9c215b4c34968890c0)
@@ -139,4 +139,5 @@
 	const ast::Decl *             visit( const ast::TypedefDecl          * ) override final;
 	const ast::AsmDecl *          visit( const ast::AsmDecl              * ) override final;
+	const ast::DirectiveDecl *    visit( const ast::DirectiveDecl        * ) override final;
 	const ast::StaticAssertDecl * visit( const ast::StaticAssertDecl     * ) override final;
 	const ast::CompoundStmt *     visit( const ast::CompoundStmt         * ) override final;
Index: src/AST/Pass.impl.hpp
===================================================================
--- src/AST/Pass.impl.hpp	(revision 20207c02efaa0537d8bd93ff326cf0baf5424a82)
+++ src/AST/Pass.impl.hpp	(revision 2d019af1e5dc0df0ad2bbe9c215b4c34968890c0)
@@ -646,4 +646,17 @@
 
 //--------------------------------------------------------------------------
+// DirectiveDecl
+template< typename core_t >
+const ast::DirectiveDecl * ast::Pass< core_t >::visit( const ast::DirectiveDecl * node ) {
+	VISIT_START( node );
+
+	VISIT(
+		maybe_accept( node, &DirectiveDecl::stmt );
+	)
+
+	VISIT_END( DirectiveDecl, node );
+}
+
+//--------------------------------------------------------------------------
 // StaticAssertDecl
 template< typename core_t >
Index: src/AST/Print.cpp
===================================================================
--- src/AST/Print.cpp	(revision 20207c02efaa0537d8bd93ff326cf0baf5424a82)
+++ src/AST/Print.cpp	(revision 2d019af1e5dc0df0ad2bbe9c215b4c34968890c0)
@@ -387,4 +387,9 @@
 
 	virtual const ast::AsmDecl * visit( const ast::AsmDecl * node ) override final {
+		safe_print( node->stmt );
+		return node;
+	}
+
+	virtual const ast::DirectiveDecl * visit( const ast::DirectiveDecl * node ) override final {
 		safe_print( node->stmt );
 		return node;
Index: src/AST/Visitor.hpp
===================================================================
--- src/AST/Visitor.hpp	(revision 20207c02efaa0537d8bd93ff326cf0baf5424a82)
+++ src/AST/Visitor.hpp	(revision 2d019af1e5dc0df0ad2bbe9c215b4c34968890c0)
@@ -9,7 +9,7 @@
 // Author           : Andrew Beach
 // Created On       : Thr May 9 15:28:00 2019
-// Last Modified By : Andrew Beach
-// Last Modified On : Thr May 9 15:33:00 2019
-// Update Count     : 0
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri Mar 12 18:25:07 2021
+// Update Count     : 1
 //
 
@@ -31,4 +31,5 @@
     virtual const ast::Decl *             visit( const ast::TypedefDecl          * ) = 0;
     virtual const ast::AsmDecl *          visit( const ast::AsmDecl              * ) = 0;
+    virtual const ast::DirectiveDecl *    visit( const ast::DirectiveDecl        * ) = 0;
     virtual const ast::StaticAssertDecl * visit( const ast::StaticAssertDecl     * ) = 0;
     virtual const ast::CompoundStmt *     visit( const ast::CompoundStmt         * ) = 0;
