Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision 56fcd77789e0a3dd06b9b874c59e22735ec493bb)
+++ src/GenPoly/Box.cc	(revision db0b3ce315c36892df143c4cfa383579eb255b6f)
@@ -309,6 +309,7 @@
 					Type *concrete = env->lookup( tyParm->first );
 					if ( concrete ) {
-						// TODO add alignment
 						arg = appExpr->get_args().insert( arg, new SizeofExpr( concrete->clone() ) );
+						arg++;
+						arg = appExpr->get_args().insert( arg, new AlignofExpr( concrete->clone() ) );
 						arg++;
 					} else {
@@ -1008,14 +1009,17 @@
 			std::list< DeclarationWithType *>::iterator last = funcType->get_parameters().begin();
 			std::list< DeclarationWithType *> inferredParams;
-			// TODO add alignment
 			ObjectDecl *newObj = new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::C, 0, new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), 0 );
 //   ObjectDecl *newFunPtr = new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) ), 0 );
 			for ( std::list< TypeDecl *>::const_iterator tyParm = funcType->get_forall().begin(); tyParm != funcType->get_forall().end(); ++tyParm ) {
-				ObjectDecl *thisParm;
-				// add all size parameters to parameter list
+				ObjectDecl *sizeParm, *alignParm;
+				// add all size and alignment parameters to parameter list
 				if ( (*tyParm)->get_kind() == TypeDecl::Any ) {
-					thisParm = newObj->clone();
-					thisParm->set_name( (*tyParm)->get_name() );
-					last = funcType->get_parameters().insert( last, thisParm );
+					sizeParm = newObj->clone();
+					sizeParm->set_name( std::string("_sizeof_") + (*tyParm)->get_name() );
+					last = funcType->get_parameters().insert( last, sizeParm );
+					++last;
+					alignParm = newObj->clone();
+					alignParm->set_name( std::string("_alignof_") + (*tyParm)->get_name() );
+					last = funcType->get_parameters().insert( last, alignParm );
 					++last;
 				}
Index: src/GenPoly/ScrubTyVars.cc
===================================================================
--- src/GenPoly/ScrubTyVars.cc	(revision 56fcd77789e0a3dd06b9b874c59e22735ec493bb)
+++ src/GenPoly/ScrubTyVars.cc	(revision db0b3ce315c36892df143c4cfa383579eb255b6f)
@@ -13,4 +13,6 @@
 // Update Count     : 2
 //
+
+#include <string>
 
 #include "GenPoly.h"
@@ -42,10 +44,20 @@
 
 	Expression * ScrubTyVars::mutate( SizeofExpr *szeof ) {
-		// sizeof( T ) => T parameter, which is the size of T
+		// sizeof( T ) => _sizeof_T parameter, which is the size of T
 		if ( TypeInstType *typeInst = dynamic_cast< TypeInstType * >( szeof->get_type() ) ) {
-			Expression *expr = new NameExpr( typeInst->get_name() );
+			Expression *expr = new NameExpr( std::string("_sizeof_") + typeInst->get_name() );
 			return expr;
 		} else {
 			return Mutator::mutate( szeof );
+		} // if
+	}
+
+	Expression * ScrubTyVars::mutate( AlignofExpr *algnof ) {
+		// alignof( T ) => _alignof_T parameter, which is the alignment of T
+		if ( TypeInstType *typeInst = dynamic_cast< TypeInstType * >( algnof->get_type() ) ) {
+			Expression *expr = new NameExpr( std::string("_alignof_") + typeInst->get_name() );
+			return expr;
+		} else {
+			return Mutator::mutate( algnof );
 		} // if
 	}
Index: src/GenPoly/ScrubTyVars.h
===================================================================
--- src/GenPoly/ScrubTyVars.h	(revision 56fcd77789e0a3dd06b9b874c59e22735ec493bb)
+++ src/GenPoly/ScrubTyVars.h	(revision db0b3ce315c36892df143c4cfa383579eb255b6f)
@@ -36,4 +36,5 @@
 		virtual Type* mutate( TypeInstType *typeInst );
 		Expression* mutate( SizeofExpr *szeof );
+		Expression* mutate( AlignofExpr *algnof );
 		virtual Type* mutate( PointerType *pointer );
 	  private:
