Index: src/ControlStruct/LabelFixer.cc
===================================================================
--- src/ControlStruct/LabelFixer.cc	(revision d180746e9c094bb8a0500bb2383c1d5d8616da38)
+++ src/ControlStruct/LabelFixer.cc	(revision ef3d79882ba207ec8438aeb09719e4916b178dee)
@@ -37,21 +37,17 @@
 	}
 
-	void LabelFixer::visit( FunctionDecl *functionDecl ) {
+	void LabelFixer::previsit( FunctionDecl * ) {
 		// need to go into a nested function in a fresh state
-		std::map < Label, Entry *> oldLabelTable = labelTable;
+		GuardValue( labelTable );
 		labelTable.clear();
+	}
 
-		maybeAccept( functionDecl->get_statements(), *this );
-
+	void LabelFixer::postvisit( FunctionDecl * functionDecl ) {
 		MLEMutator mlemut( resolveJumps(), generator );
 		functionDecl->acceptMutator( mlemut );
-
-		// and remember the outer function's labels when
-		// returning to it
-		labelTable = oldLabelTable;
 	}
 
 	// prune to at most one label definition for each statement
-	void LabelFixer::visit( Statement *stmt ) {
+	void LabelFixer::previsit( Statement *stmt ) {
 		std::list< Label > &labels = stmt->get_labels();
 
@@ -62,6 +58,6 @@
 	}
 
-	void LabelFixer::visit( BranchStmt *branchStmt ) {
-		visit ( ( Statement * )branchStmt );
+	void LabelFixer::previsit( BranchStmt *branchStmt ) {
+		previsit( ( Statement *)branchStmt );
 
 		// for labeled branches, add an entry to the label table
@@ -72,15 +68,8 @@
 	}
 
-	void LabelFixer::visit( UntypedExpr *untyped ) {
-		if ( NameExpr * func = dynamic_cast< NameExpr * >( untyped->get_function() ) ) {
-			if ( func->get_name() == "&&" ) {
-				NameExpr * arg = dynamic_cast< NameExpr * >( untyped->get_args().front() );
-				Label target = arg->get_name();
-				assert( target != "" );
-				setLabelsUsg( target, untyped );
-			} else {
-				Visitor::visit( untyped );
-			}
-		}
+	void LabelFixer::previsit( LabelAddressExpr * addrExpr ) {
+		Label & target = addrExpr->arg;
+		assert( target != "" );
+		setLabelsUsg( target, addrExpr );
 	}
 
