Index: src/AST/Expr.cpp
===================================================================
--- src/AST/Expr.cpp	(revision 9b4f3290a76fc499cac978b84cc1ab000bd8d6d0)
+++ src/AST/Expr.cpp	(revision 8ff178d5ee06e2dd970d121edcf369bda332f653)
@@ -32,7 +32,7 @@
 // --- ApplicationExpr
 
-ApplicationExpr::ApplicationExpr( const CodeLocation & loc, const Expr * f, 
-	std::vector<ptr<Expr>> && as ) 
-: Expr( loc ), func( f ), args( std::move(args) ) {
+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() );
@@ -48,6 +48,6 @@
 	assert( arg );
 
-	UntypedExpr * ret = new UntypedExpr{ 
-		loc, new NameExpr{loc, "*?"}, std::vector<ptr<Expr>>{ ptr<Expr>{ arg } } 
+	UntypedExpr * ret = new UntypedExpr{
+		loc, new NameExpr{loc, "*?"}, std::vector<ptr<Expr>>{ ptr<Expr>{ arg } }
 	};
 	if ( const Type * ty = arg->result ) {
@@ -59,5 +59,5 @@
 			ret->result = new ReferenceType{ base };
 		} else {
-			// references have been removed, in which case dereference returns an lvalue of the 
+			// references have been removed, in which case dereference returns an lvalue of the
 			// base type
 			ret->result.set_and_mutate( base )->set_lvalue( true );
@@ -112,5 +112,5 @@
 		} else {
 			// taking address of non-lvalue, must be a reference, loses one layer of reference
-			if ( const ReferenceType * refType = 
+			if ( const ReferenceType * refType =
 					dynamic_cast< const ReferenceType * >( arg->result.get() ) ) {
 				Type * res = addrType( refType->base );
@@ -118,5 +118,5 @@
 				result = res;
 			} else {
-				SemanticError( loc, arg->result, 
+				SemanticError( loc, arg->result,
 					"Attempt to take address of non-lvalue expression: " );
 			}
@@ -128,10 +128,10 @@
 
 // label address always has type `void*`
-LabelAddressExpr::LabelAddressExpr( const CodeLocation & loc, Label && a ) 
+LabelAddressExpr::LabelAddressExpr( const CodeLocation & loc, Label && a )
 : Expr( loc, new PointerType{ new VoidType{} } ), arg( a ) {}
 
 // --- CastExpr
 
-CastExpr::CastExpr( const CodeLocation & loc, const Expr * a, GeneratedFlag g ) 
+CastExpr::CastExpr( const CodeLocation & loc, const Expr * a, GeneratedFlag g )
 : Expr( loc, new VoidType{} ), arg( a ), isGenerated( g ) {}
 
@@ -169,5 +169,5 @@
 }
 
-VariableExpr * VariableExpr::functionPointer( 
+VariableExpr * VariableExpr::functionPointer(
 		const CodeLocation & loc, const FunctionDecl * decl ) {
 	// wrap usually-determined result type in a pointer
@@ -202,21 +202,21 @@
 
 ConstantExpr * ConstantExpr::from_bool( const CodeLocation & loc, bool b ) {
-	return new ConstantExpr{ 
+	return new ConstantExpr{
 		loc, new BasicType{ BasicType::Bool }, b ? "1" : "0", (unsigned long long)b };
 }
 
 ConstantExpr * ConstantExpr::from_char( const CodeLocation & loc, char c ) {
-	return new ConstantExpr{ 
+	return new ConstantExpr{
 		loc, new BasicType{ BasicType::Char }, std::to_string( c ), (unsigned long long)c };
 }
 
 ConstantExpr * ConstantExpr::from_int( const CodeLocation & loc, int i ) {
-	return new ConstantExpr{ 
+	return new ConstantExpr{
 		loc, new BasicType{ BasicType::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{ BasicType::LongUnsignedInt }, std::to_string( i ), 
+	return new ConstantExpr{
+		loc, new BasicType{ BasicType::LongUnsignedInt }, std::to_string( i ),
 		(unsigned long long)i };
 }
@@ -229,5 +229,5 @@
 	return new ConstantExpr{
 		loc,
-		new ArrayType{ 
+		new ArrayType{
 			new BasicType{ BasicType::Char, CV::Const },
 			ConstantExpr::from_int( loc, s.size() + 1 /* null terminator */ ),
@@ -258,12 +258,4 @@
 : Expr( loc, new BasicType{ BasicType::LongUnsignedInt } ), expr( nullptr ), type( t ) {}
 
-// --- UntypedOffsetofExpr
-
-UntypedOffsetofExpr::UntypedOffsetofExpr( 
-	const CodeLocation & loc, const Type * ty, const std::string & mem )
-: Expr( loc, new BasicType{ BasicType::LongUnsignedInt } ), type( ty ), member( mem ) {
-	assert( type );
-}
-
 // --- OffsetofExpr
 
@@ -277,6 +269,6 @@
 
 OffsetPackExpr::OffsetPackExpr( const CodeLocation & loc, const StructInstType * ty )
-: Expr( loc, new ArrayType{ 
-	new BasicType{ BasicType::LongUnsignedInt }, nullptr, FixedLen, DynamicDim } 
+: Expr( loc, new ArrayType{
+	new BasicType{ BasicType::LongUnsignedInt }, nullptr, FixedLen, DynamicDim }
 ), type( ty ) {
 	assert( type );
@@ -285,5 +277,5 @@
 // --- LogicalExpr
 
-LogicalExpr::LogicalExpr( 
+LogicalExpr::LogicalExpr(
 	const CodeLocation & loc, const Expr * a1, const Expr * a2, LogicalFlag ia )
 : Expr( loc, new BasicType{ BasicType::SignedInt } ), arg1( a1 ), arg2( a2 ), isAnd( ia ) {}
