Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 4e2461096b7c7d12f2ee84f0cef534e05aa25d48)
+++ src/SynTree/Declaration.h	(revision fac84bec61bfcae250ff4c206545b9a9c1261619)
@@ -10,5 +10,5 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Fri May 06 11:16:45 2016
+// Last Modified On : Fri May 06 15:39:02 2016
 // Update Count     : 33
 //
@@ -107,9 +107,16 @@
   public:
 	// temporary - merge this into general GCC attributes
-	enum Attribute {
-		NoAttribute, Constructor, Destructor,
+	struct Attribute {
+		enum Type {
+			NoAttribute, Constructor, Destructor,
+		} type;
+		enum Priority {
+			// priorities 0-100 are reserved by gcc, so it's okay to use 100 an exceptional case
+			Default = 100, High,
+		} priority;
+		Attribute(Type t = NoAttribute, Priority p = Default) : type(t), priority(p) {};
 	};
 
-	FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn, Attribute attribute = NoAttribute );
+	FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn, Attribute attribute = Attribute() );
 	FunctionDecl( const FunctionDecl &other );
 	virtual ~FunctionDecl();
Index: src/SynTree/FunctionDecl.cc
===================================================================
--- src/SynTree/FunctionDecl.cc	(revision 4e2461096b7c7d12f2ee84f0cef534e05aa25d48)
+++ src/SynTree/FunctionDecl.cc	(revision fac84bec61bfcae250ff4c206545b9a9c1261619)
@@ -10,5 +10,5 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Fri May 06 11:35:09 2016
+// Last Modified On : Fri May 06 15:41:05 2016
 // Update Count     : 19
 //
@@ -65,13 +65,16 @@
 		os << "_Noreturn ";
 	} // if
-	switch ( attribute ) {
-		case Constructor:
+	switch ( attribute.type ) {
+		case Attribute::Constructor:
 			os << "Global Constructor ";
 			break;
-		case Destructor:
+		case Attribute::Destructor:
 			os << "Global Destructor ";
 			break;
 		default:
 			break;
+	}
+	if ( attribute.priority != Attribute::Default ) {
+		os << "with priority " << attribute.priority << " ";
 	}
 	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
@@ -114,13 +117,16 @@
 		os << "_Noreturn ";
 	} // if
-	switch ( attribute ) {
-		case Constructor:
+	switch ( attribute.type ) {
+		case Attribute::Constructor:
 			os << " Global Constructor ";
 			break;
-		case Destructor:
+		case Attribute::Destructor:
 			os << " Global Destructor ";
 			break;
 		default:
 			break;
+	}
+	if ( attribute.priority != Attribute::Default ) {
+		os << "with priority " << attribute.priority << " ";
 	}
 	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
