Index: src/SynTree/Attribute.cc
===================================================================
--- src/SynTree/Attribute.cc	(revision db175c815b9fb1e034519ceec970bdba6f35615c)
+++ src/SynTree/Attribute.cc	(revision db175c815b9fb1e034519ceec970bdba6f35615c)
@@ -0,0 +1,47 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// Attribute.cc --
+//
+// Author           : Rob Schluntz
+// Created On       : Mon June 06 14:51:16 2016
+// Last Modified By : Rob Schluntz
+// Last Modified On : Mon June 06 14:54:48 2016
+// Update Count     : 1
+//
+
+#include <cassert>
+
+#include "Common/utility.h"
+#include "Attribute.h"
+#include "Expression.h"
+
+Attribute::Attribute( const Attribute &other ) : name( other.name ) {
+  cloneAll( other.parameters, parameters );
+}
+
+Attribute::~Attribute() {
+  deleteAll( parameters );
+}
+
+void Attribute::print( std::ostream &os, int indent ) const {
+  using std::endl;
+  using std::string;
+
+  if ( ! empty() ) {
+    os << "Attribute with name: " << name;
+    if ( ! parameters.empty() ) {
+      os << " with parameters: " << endl;
+      printAll( parameters, os, indent );
+    }
+  }
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// mode: c++ //
+// compile-command: "make install" //
+// End: //
Index: src/SynTree/Attribute.h
===================================================================
--- src/SynTree/Attribute.h	(revision db175c815b9fb1e034519ceec970bdba6f35615c)
+++ src/SynTree/Attribute.h	(revision db175c815b9fb1e034519ceec970bdba6f35615c)
@@ -0,0 +1,43 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// Declaration.h --
+//
+// Author           : Richard C. Bilson
+// Created On       : Mon May 18 07:44:20 2015
+// Last Modified By : Rob Schluntz
+// Last Modified On : Fri May 06 16:26:12 2016
+// Update Count     : 33
+//
+
+#ifndef GCC_ATTRIBUTE_H
+#define GCC_ATTRIBUTE_H
+
+#include "SynTree.h"
+
+// GCC attribute
+// https://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html#Attribute-Syntax
+class Attribute {
+  public:
+  Attribute( std::string name = "", const std::list< Expression * > & parameters = std::list< Expression * >() ) : name( name ), parameters( parameters ) {}
+  Attribute( const Attribute &other );
+  virtual ~Attribute();
+
+  std::string get_name() const { return name; }
+  void set_name( const std::string & newValue ) { name = newValue; }
+  std::list< Expression * > & get_parameters() { return parameters; }
+  bool empty() const { return name == ""; }
+
+  Attribute * clone() const { return new Attribute( *this ); }
+  void print( std:: ostream &os, int indent = 0 ) const;
+
+  private:
+  std::string name;
+  // to keep things nice and tight, use NameExpr for special identifier parameters
+  std::list< Expression * > parameters;
+};
+
+#endif
