Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision bc3127d4673a19c1f70b8cc4cc5902edde3e61d8)
+++ src/CodeGen/CodeGenerator.cc	(revision 139574805facb4527b59228eb12469fe2199a610)
@@ -546,11 +546,11 @@
 		extension( addressExpr );
 		output << "(&";
-		// this hack makes sure that we don't convert "constant_zero" to "0" if we're taking its address
-		if ( VariableExpr * variableExpr = dynamic_cast< VariableExpr* >( addressExpr->get_arg() ) ) {
-			output << mangleName( variableExpr->get_var() );
-		} else {
-			addressExpr->get_arg()->accept( *this );
-		} // if
+		addressExpr->arg->accept( *this );
 		output << ")";
+	}
+
+	void CodeGenerator::visit( LabelAddressExpr *addressExpr ) {
+		extension( addressExpr );
+		output << "(&&" << addressExpr->arg << ")";
 	}
 
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision bc3127d4673a19c1f70b8cc4cc5902edde3e61d8)
+++ src/CodeGen/CodeGenerator.h	(revision 139574805facb4527b59228eb12469fe2199a610)
@@ -59,4 +59,5 @@
 		virtual void visit( NameExpr *nameExpr );
 		virtual void visit( AddressExpr *addressExpr );
+		virtual void visit( LabelAddressExpr *addressExpr );
 		virtual void visit( CastExpr *castExpr );
 		virtual void visit( VirtualCastExpr *castExpr );
Index: src/CodeGen/OperatorTable.cc
===================================================================
--- src/CodeGen/OperatorTable.cc	(revision bc3127d4673a19c1f70b8cc4cc5902edde3e61d8)
+++ src/CodeGen/OperatorTable.cc	(revision 139574805facb4527b59228eb12469fe2199a610)
@@ -66,5 +66,4 @@
 			{	"?^=?",		"^=",	"_operator_bitxorassign",		OT_INFIXASSIGN		},
 			{	"?|=?",		"|=",	"_operator_bitorassign",		OT_INFIXASSIGN		},
-			{	"&&",		"&&",	"&&",							OT_LABELADDRESS		}
 		};
 
