Index: src/CodeGen/FixNames.cc
===================================================================
--- src/CodeGen/FixNames.cc	(revision ba3706fcc236a2f6c927dc1a9da14313751a7aa4)
+++ src/CodeGen/FixNames.cc	(revision c50d54d127a8d9ee804259333a744a4dcb787fac)
@@ -19,4 +19,5 @@
 #include <string>                  // for string, operator!=, operator==
 
+#include "Common/PassVisitor.h"
 #include "Common/SemanticError.h"  // for SemanticError
 #include "FixMain.h"               // for FixMain
@@ -32,10 +33,10 @@
 
 namespace CodeGen {
-	class FixNames : public Visitor {
+	class FixNames : public WithGuards {
 	  public:
-		virtual void visit( ObjectDecl *objectDecl );
-		virtual void visit( FunctionDecl *functionDecl );
+		void postvisit( ObjectDecl *objectDecl );
+		void postvisit( FunctionDecl *functionDecl );
 
-		virtual void visit( CompoundStmt *compoundStmt );
+		void previsit( CompoundStmt *compoundStmt );
 	  private:
 		int scopeLevel = 1;
@@ -93,10 +94,10 @@
 	}
 
-	void fixNames( std::list< Declaration* > translationUnit ) {
-		FixNames fixer;
+	void fixNames( std::list< Declaration* > & translationUnit ) {
+		PassVisitor<FixNames> fixer;
 		acceptAll( translationUnit, fixer );
 	}
 
-	void FixNames::fixDWT( DeclarationWithType *dwt ) {
+	void FixNames::fixDWT( DeclarationWithType * dwt ) {
 		if ( dwt->get_name() != "" ) {
 			if ( LinkageSpec::isMangled( dwt->get_linkage() ) ) {
@@ -107,11 +108,9 @@
 	}
 
-	void FixNames::visit( ObjectDecl *objectDecl ) {
-		Visitor::visit( objectDecl );
+	void FixNames::postvisit( ObjectDecl * objectDecl ) {
 		fixDWT( objectDecl );
 	}
 
-	void FixNames::visit( FunctionDecl *functionDecl ) {
-		Visitor::visit( functionDecl );
+	void FixNames::postvisit( FunctionDecl * functionDecl ) {
 		fixDWT( functionDecl );
 
@@ -126,8 +125,7 @@
 	}
 
-	void FixNames::visit( CompoundStmt *compoundStmt ) {
+	void FixNames::previsit( CompoundStmt * ) {
 		scopeLevel++;
-		Visitor::visit( compoundStmt );
-		scopeLevel--;
+		GuardAction( [this](){ scopeLevel--; } );
 	}
 } // namespace CodeGen
Index: src/CodeGen/FixNames.h
===================================================================
--- src/CodeGen/FixNames.h	(revision ba3706fcc236a2f6c927dc1a9da14313751a7aa4)
+++ src/CodeGen/FixNames.h	(revision c50d54d127a8d9ee804259333a744a4dcb787fac)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// FixNames.h -- 
+// FixNames.h --
 //
 // Author           : Richard C. Bilson
@@ -22,5 +22,5 @@
 namespace CodeGen {
 	/// mangles object and function names
-	void fixNames( std::list< Declaration* > translationUnit );
+	void fixNames( std::list< Declaration* > & translationUnit );
 } // namespace CodeGen
 
