Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 4753415975c6f56302c712e83f72751cbf46c6ad)
+++ src/CodeGen/CodeGenerator.cc	(revision 25a054f2026506f0b8d821cfc29790b22ca54608)
@@ -443,12 +443,21 @@
 	}
 
-	void CodeGenerator::visit( AlignofExpr *sizeofExpr ) {
+	void CodeGenerator::visit( AlignofExpr *alignofExpr ) {
 		// use GCC extension to avoid bumping std to C11
 		output << "__alignof__(";
-		if ( sizeofExpr->get_isType() ) {
-			output << genType( sizeofExpr->get_type(), "" );
-		} else {
-			sizeofExpr->get_expr()->accept( *this );
-		} // if
+		if ( alignofExpr->get_isType() ) {
+			output << genType( alignofExpr->get_type(), "" );
+		} else {
+			alignofExpr->get_expr()->accept( *this );
+		} // if
+		output << ")";
+	}
+
+	void CodeGenerator::visit( OffsetofExpr *offsetofExpr ) {
+		// use GCC builtin
+		output << "__builtin_offsetof(";
+		output << genType( offsetofExpr->get_type(), "" );
+		output << ", ";
+		offsetofExpr->get_member()->accept( *this );
 		output << ")";
 	}
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 4753415975c6f56302c712e83f72751cbf46c6ad)
+++ src/CodeGen/CodeGenerator.h	(revision 25a054f2026506f0b8d821cfc29790b22ca54608)
@@ -61,4 +61,5 @@
 		virtual void visit( SizeofExpr *sizeofExpr );
 		virtual void visit( AlignofExpr *alignofExpr );
+		virtual void visit( OffsetofExpr *offsetofExpr );
 		virtual void visit( LogicalExpr *logicalExpr );
 		virtual void visit( ConditionalExpr *conditionalExpr );
