Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision f5234f377ada7d47d16f2cf07778a4ca2e416546)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 083cf3181fe3a210bc837e36dd40f9dc8d3ae198)
@@ -792,4 +792,23 @@
 	}
 
+	void AlternativeFinder::visit( AlignofExpr *alignofExpr ) {
+		if ( alignofExpr->get_isType() ) {
+			alternatives.push_back( Alternative( alignofExpr->clone(), env, Cost::zero ) );
+		} else {
+			// find all alternatives for the argument to sizeof
+			AlternativeFinder finder( indexer, env );
+			finder.find( alignofExpr->get_expr() );
+			// find the lowest cost alternative among the alternatives, otherwise ambiguous
+			AltList winners;
+			findMinCost( finder.alternatives.begin(), finder.alternatives.end(), back_inserter( winners ) );
+			if ( winners.size() != 1 ) {
+				throw SemanticError( "Ambiguous expression in alignof operand: ", alignofExpr->get_expr() );
+			} // if
+			// return the lowest cost alternative for the argument
+			Alternative &choice = winners.front();
+			alternatives.push_back( Alternative( new AlignofExpr( choice.expr->clone() ), choice.env, Cost::zero ) );
+		} // if
+	}
+
 	void AlternativeFinder::resolveAttr( DeclarationWithType *funcDecl, FunctionType *function, Type *argType, const TypeEnvironment &env ) {
 		// assume no polymorphism
Index: src/ResolvExpr/AlternativeFinder.h
===================================================================
--- src/ResolvExpr/AlternativeFinder.h	(revision f5234f377ada7d47d16f2cf07778a4ca2e416546)
+++ src/ResolvExpr/AlternativeFinder.h	(revision 083cf3181fe3a210bc837e36dd40f9dc8d3ae198)
@@ -56,4 +56,5 @@
 		virtual void visit( ConstantExpr *constantExpr ); 
 		virtual void visit( SizeofExpr *sizeofExpr );
+		virtual void visit( AlignofExpr *sizeofExpr );
 		virtual void visit( AttrExpr *attrExpr );
 		virtual void visit( LogicalExpr *logicalExpr );
