Index: src/AST/Expr.cpp
===================================================================
--- src/AST/Expr.cpp	(revision 119889f9c47003a2856dc01fc1d2a09b8da9b989)
+++ src/AST/Expr.cpp	(revision 366f5cd47f06469e6c39617fdc1be75acd3f4943)
@@ -11,5 +11,5 @@
 // Last Modified By : Peter A. Buhr
 // Created On       : Wed May 18 13:56:00 2022
-// Update Count     : 12
+// Update Count     : 18
 //
 
@@ -46,7 +46,6 @@
 // --- ApplicationExpr
 
-ApplicationExpr::ApplicationExpr( const CodeLocation & loc, const Expr * f,
-	std::vector<ptr<Expr>> && as )
-: Expr( loc ), func( f ), args( std::move(as) ) {
+ApplicationExpr::ApplicationExpr( const CodeLocation & loc, const Expr * f,	std::vector<ptr<Expr>> && as )
+		: Expr( loc ), func( f ), args( std::move(as) ) {
 	// ensure that `ApplicationExpr` result type is `FuncExpr`
 	const PointerType * pt = strict_dynamic_cast< const PointerType * >( f->result.get() );
@@ -103,6 +102,5 @@
 }
 
-UntypedExpr * UntypedExpr::createCall( const CodeLocation & loc,
-		const std::string & name, std::vector<ptr<Expr>> && args ) {
+UntypedExpr * UntypedExpr::createCall( const CodeLocation & loc, const std::string & name, std::vector<ptr<Expr>> && args ) {
 	return new UntypedExpr( loc,
 			new NameExpr( loc, name ), std::move( args ) );
@@ -111,9 +109,7 @@
 // --- VariableExpr
 
-VariableExpr::VariableExpr( const CodeLocation & loc )
-: Expr( loc ), var( nullptr ) {}
-
-VariableExpr::VariableExpr( const CodeLocation & loc, const DeclWithType * v )
-: Expr( loc ), var( v ) {
+VariableExpr::VariableExpr( const CodeLocation & loc ) : Expr( loc ), var( nullptr ) {}
+
+VariableExpr::VariableExpr( const CodeLocation & loc, const DeclWithType * v ) : Expr( loc ), var( v ) {
 	assert( var );
 	assert( var->get_type() );
@@ -130,6 +126,5 @@
 }
 
-VariableExpr * VariableExpr::functionPointer(
-		const CodeLocation & loc, const FunctionDecl * decl ) {
+VariableExpr * VariableExpr::functionPointer( const CodeLocation & loc, const FunctionDecl * decl ) {
 	// wrap usually-determined result type in a pointer
 	VariableExpr * funcExpr = new VariableExpr{ loc, decl };
@@ -178,7 +173,5 @@
 }
 
-AddressExpr::AddressExpr( const CodeLocation & loc, const Expr * a ) :
-	Expr( loc, addrExprType( loc, a ) ), arg( a )
-{}
+AddressExpr::AddressExpr( const CodeLocation & loc, const Expr * a ) : Expr( loc, addrExprType( loc, a ) ), arg( a ) {}
 
 // --- LabelAddressExpr
@@ -191,5 +184,5 @@
 
 CastExpr::CastExpr( const CodeLocation & loc, const Expr * a, GeneratedFlag g, CastKind kind )
-: Expr( loc, new VoidType{} ), arg( a ), isGenerated( g ), kind( kind ) {}
+		: Expr( loc, new VoidType{} ), arg( a ), isGenerated( g ), kind( kind ) {}
 
 bool CastExpr::get_lvalue() const {
@@ -213,5 +206,5 @@
 
 MemberExpr::MemberExpr( const CodeLocation & loc, const DeclWithType * mem, const Expr * agg )
-: Expr( loc ), member( mem ), aggregate( agg ) {
+		: Expr( loc ), member( mem ), aggregate( agg ) {
 	assert( member );
 	assert( aggregate );
@@ -249,17 +242,13 @@
 
 ConstantExpr * ConstantExpr::from_bool( const CodeLocation & loc, bool b ) {
-	return new ConstantExpr{
-		loc, new BasicType{ BasicKind::Bool }, b ? "1" : "0", (unsigned long long)b };
+	return new ConstantExpr{ loc, new BasicType{ BasicKind::Bool }, b ? "1" : "0", (unsigned long long)b };
 }
 
 ConstantExpr * ConstantExpr::from_int( const CodeLocation & loc, int i ) {
-	return new ConstantExpr{
-		loc, new BasicType{ BasicKind::SignedInt }, std::to_string( i ), (unsigned long long)i };
+	return new ConstantExpr{ loc, new BasicType{ BasicKind::SignedInt }, std::to_string( i ), (unsigned long long)i };
 }
 
 ConstantExpr * ConstantExpr::from_ulong( const CodeLocation & loc, unsigned long i ) {
-	return new ConstantExpr{
-		loc, new BasicType{ BasicKind::LongUnsignedInt }, std::to_string( i ),
-		(unsigned long long)i };
+	return new ConstantExpr{ loc, new BasicType{ BasicKind::LongUnsignedInt }, std::to_string( i ), (unsigned long long)i };
 }
 
@@ -274,33 +263,28 @@
 
 ConstantExpr * ConstantExpr::null( const CodeLocation & loc, const Type * ptrType ) {
-	return new ConstantExpr{
-		loc, ptrType ? ptrType : new PointerType{ new VoidType{} }, "0", (unsigned long long)0 };
+	return new ConstantExpr{ loc, ptrType ? ptrType : new PointerType{ new VoidType{} }, "0", (unsigned long long)0 };
 }
 
 // --- SizeofExpr
 
-SizeofExpr::SizeofExpr( const CodeLocation & loc, const Type * type )
-: SizeofExpr( loc, type, nullptr ) {}
-
-SizeofExpr::SizeofExpr( const CodeLocation & loc, const Type * type, const Type * result )
-: Expr( loc, result ), type( type ) {}
+SizeofExpr::SizeofExpr( const CodeLocation & loc, const Type * type ) : SizeofExpr( loc, type, nullptr ) {}
+
+SizeofExpr::SizeofExpr( const CodeLocation & loc, const Type * type, const Type * result ) : Expr( loc, result ), type( type ) {}
 
 // --- AlignofExpr
 
-AlignofExpr::AlignofExpr( const CodeLocation & loc, const Type * type )
-: AlignofExpr( loc, type, nullptr ) {}
-
-AlignofExpr::AlignofExpr( const CodeLocation & loc, const Type * type, const Type * result )
-: Expr( loc, result ), type( type ) {}
+AlignofExpr::AlignofExpr( const CodeLocation & loc, const Type * type, const Alignment kind ) : AlignofExpr( loc, type, nullptr, kind ) {}
+
+AlignofExpr::AlignofExpr( const CodeLocation & loc, const Type * type, const Type * result, const Alignment kind )
+		: Expr( loc, result ), type( type ), kind( kind ) {}
 
 // --- CountofExpr
 
-CountofExpr::CountofExpr( const CodeLocation & loc, const Type * t )
-: Expr( loc ), type( t ) {}
+CountofExpr::CountofExpr( const CodeLocation & loc, const Type * t ) : Expr( loc ), type( t ) {}
 
 // --- OffsetofExpr
 
 OffsetofExpr::OffsetofExpr( const CodeLocation & loc, const Type * ty, const DeclWithType * mem, const Type * res )
-: Expr( loc, res ), type( ty ), member( mem ) {
+		: Expr( loc, res ), type( ty ), member( mem ) {
 	assert( type );
 	assert( member );
@@ -309,6 +293,5 @@
 // --- OffsetPackExpr
 
-OffsetPackExpr::OffsetPackExpr( const CodeLocation & loc, const StructInstType * ty )
-: Expr( loc ), type( ty ) {
+OffsetPackExpr::OffsetPackExpr( const CodeLocation & loc, const StructInstType * ty ) : Expr( loc ), type( ty ) {
 	assert( type );
 }
@@ -316,7 +299,6 @@
 // --- LogicalExpr
 
-LogicalExpr::LogicalExpr(
-	const CodeLocation & loc, const Expr * a1, const Expr * a2, LogicalFlag ia )
-: Expr( loc, new BasicType{ BasicKind::SignedInt } ), arg1( a1 ), arg2( a2 ), isAnd( ia ) {}
+LogicalExpr::LogicalExpr( const CodeLocation & loc, const Expr * a1, const Expr * a2, LogicalFlag ia )
+		: Expr( loc, new BasicType{ BasicKind::SignedInt } ), arg1( a1 ), arg2( a2 ), isAnd( ia ) {}
 
 // --- CommaExpr
@@ -330,6 +312,5 @@
 // --- ConstructorExpr
 
-ConstructorExpr::ConstructorExpr( const CodeLocation & loc, const Expr * call )
-: Expr( loc ), callExpr( call ) {
+ConstructorExpr::ConstructorExpr( const CodeLocation & loc, const Expr * call ) : Expr( loc ), callExpr( call ) {
 	// allow resolver to type a constructor used as an expression if it has the same type as its
 	// first argument
@@ -342,6 +323,5 @@
 // --- CompoundLiteralExpr
 
-CompoundLiteralExpr::CompoundLiteralExpr( const CodeLocation & loc, const Type * t, const Init * i )
-: Expr( loc ), init( i ) {
+CompoundLiteralExpr::CompoundLiteralExpr( const CodeLocation & loc, const Type * t, const Init * i ) : Expr( loc ), init( i ) {
 	assert( t && i );
 	result = t;
@@ -354,11 +334,9 @@
 // --- TupleExpr
 
-TupleExpr::TupleExpr( const CodeLocation & loc, std::vector<ptr<Expr>> && xs )
-: Expr( loc, Tuples::makeTupleType( xs ) ), exprs( xs ) {}
+TupleExpr::TupleExpr( const CodeLocation & loc, std::vector<ptr<Expr>> && xs ) : Expr( loc, Tuples::makeTupleType( xs ) ), exprs( xs ) {}
 
 // --- TupleIndexExpr
 
-TupleIndexExpr::TupleIndexExpr( const CodeLocation & loc, const Expr * t, unsigned i )
-: Expr( loc ), tuple( t ), index( i ) {
+TupleIndexExpr::TupleIndexExpr( const CodeLocation & loc, const Expr * t, unsigned i ) : Expr( loc ), tuple( t ), index( i ) {
 	const TupleType * type = strict_dynamic_cast< const TupleType * >( tuple->result.get() );
 	assertf( type->size() > index, "TupleIndexExpr index out of bounds: tuple size %d, requested "
@@ -374,8 +352,6 @@
 // --- TupleAssignExpr
 
-TupleAssignExpr::TupleAssignExpr(
-	const CodeLocation & loc, std::vector<ptr<Expr>> && assigns,
-	std::vector<ptr<ObjectDecl>> && tempDecls )
-: Expr( loc, Tuples::makeTupleType( assigns ) ), stmtExpr() {
+TupleAssignExpr::TupleAssignExpr( const CodeLocation & loc, std::vector<ptr<Expr>> && assigns, std::vector<ptr<ObjectDecl>> && tempDecls )
+		: Expr( loc, Tuples::makeTupleType( assigns ) ), stmtExpr() {
 	// convert internally into a StmtExpr which contains the declarations and produces the tuple of
 	// the assignments
@@ -392,6 +368,5 @@
 // --- StmtExpr
 
-StmtExpr::StmtExpr( const CodeLocation & loc, const CompoundStmt * ss )
-: Expr( loc ), stmts( ss ) { computeResult(); }
+StmtExpr::StmtExpr( const CodeLocation & loc, const CompoundStmt * ss ) : Expr( loc ), stmts( ss ) { computeResult(); }
 
 void StmtExpr::computeResult() {
@@ -411,6 +386,5 @@
 unsigned long long UniqueExpr::nextId = 0;
 
-UniqueExpr::UniqueExpr( const CodeLocation & loc, const Expr * e, unsigned long long i )
-: Expr( loc, e->result ), expr( e ), id( i ) {
+UniqueExpr::UniqueExpr( const CodeLocation & loc, const Expr * e, unsigned long long i ) : Expr( loc, e->result ), expr( e ), id( i ) {
 	assert( expr );
 	if ( id == -1ull ) {
Index: src/AST/Expr.hpp
===================================================================
--- src/AST/Expr.hpp	(revision 119889f9c47003a2856dc01fc1d2a09b8da9b989)
+++ src/AST/Expr.hpp	(revision 366f5cd47f06469e6c39617fdc1be75acd3f4943)
@@ -11,5 +11,5 @@
 // Last Modified By : Peter A. Buhr
 // Created On       : Fri May 10 10:30:00 2019
-// Update Count     : 8
+// Update Count     : 24
 //
 
@@ -495,7 +495,8 @@
 public:
 	ptr<Type> type;
-
-	AlignofExpr( const CodeLocation & loc, const Type * t );
-	AlignofExpr( const CodeLocation & loc, const Type * t, const Type * r );
+	enum Alignment { Alignof, __Alignof } kind;
+
+	AlignofExpr( const CodeLocation & loc, const Type * t, const Alignment kind );
+	AlignofExpr( const CodeLocation & loc, const Type * t, const Type * r, const Alignment kind );
 
 	const Expr * accept( Visitor & v ) const override { return v.visit( this ); }
