Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision 293dc1c9a88a6120c9da7e8d3566ea1feae53953)
+++ src/AST/Convert.cpp	(revision 16ba4a6fa0eb60a0cd27fb96882e37dbf94834dd)
@@ -2764,5 +2764,5 @@
 			old->location,
 			GET_ACCEPT_1(value, Expr),
-			(old->get_maybeConstructed()) ? ast::MaybeConstruct : ast::DoConstruct
+			(old->get_maybeConstructed()) ? ast::MaybeConstruct : ast::NoConstruct
 		);
 	}
@@ -2773,5 +2773,5 @@
 			GET_ACCEPT_V(initializers, Init),
 			GET_ACCEPT_V(designations, Designation),
-			(old->get_maybeConstructed()) ? ast::MaybeConstruct : ast::DoConstruct
+			(old->get_maybeConstructed()) ? ast::MaybeConstruct : ast::NoConstruct
 		);
 	}
Index: src/AST/Decl.hpp
===================================================================
--- src/AST/Decl.hpp	(revision 293dc1c9a88a6120c9da7e8d3566ea1feae53953)
+++ src/AST/Decl.hpp	(revision 16ba4a6fa0eb60a0cd27fb96882e37dbf94834dd)
@@ -79,4 +79,5 @@
 	ptr<Expr> asmName;
 	bool isDeleted = false;
+	bool isTypeFixed = false;
 
 	DeclWithType( const CodeLocation& loc, const std::string& name, Storage::Classes storage,
Index: src/AST/Init.hpp
===================================================================
--- src/AST/Init.hpp	(revision 293dc1c9a88a6120c9da7e8d3566ea1feae53953)
+++ src/AST/Init.hpp	(revision 16ba4a6fa0eb60a0cd27fb96882e37dbf94834dd)
@@ -50,5 +50,5 @@
 
 /// Flag for whether to construct from initialzier
-enum ConstructFlag { DoConstruct, MaybeConstruct };
+enum ConstructFlag { NoConstruct, MaybeConstruct };
 
 /// Object initializer base class
@@ -71,5 +71,5 @@
 	ptr<Expr> value;
 
-	SingleInit( const CodeLocation & loc, const Expr * val, ConstructFlag mc = DoConstruct )
+	SingleInit( const CodeLocation & loc, const Expr * val, ConstructFlag mc = NoConstruct )
 	: Init( loc, mc ), value( val ) {}
 
@@ -90,5 +90,5 @@
 
 	ListInit( const CodeLocation & loc, std::vector<ptr<Init>> && is,
-		std::vector<ptr<Designation>> && ds = {}, ConstructFlag mc = DoConstruct );
+		std::vector<ptr<Designation>> && ds = {}, ConstructFlag mc = NoConstruct );
 
 	using iterator = std::vector<ptr<Init>>::iterator;
@@ -118,5 +118,5 @@
 	ConstructorInit( 
 		const CodeLocation & loc, const Stmt * ctor, const Stmt * dtor, const Init * init )
-	: Init( loc, DoConstruct ), ctor( ctor ), dtor( dtor ), init( init ) {}
+	: Init( loc, MaybeConstruct ), ctor( ctor ), dtor( dtor ), init( init ) {}
 
 	const Init * accept( Visitor & v ) const override { return v.visit( this ); }
Index: src/AST/Pass.impl.hpp
===================================================================
--- src/AST/Pass.impl.hpp	(revision 293dc1c9a88a6120c9da7e8d3566ea1feae53953)
+++ src/AST/Pass.impl.hpp	(revision 16ba4a6fa0eb60a0cd27fb96882e37dbf94834dd)
@@ -683,7 +683,13 @@
 		// Do not enter (or leave) a new scope if atFunctionTop. Remember to save the result.
 		auto guard1 = makeFuncGuard( [this, enterScope = !this->atFunctionTop]() {
-			if ( enterScope ) __pass::symtab::enter(core, 0);
+			if ( enterScope ) {
+				__pass::symtab::enter(core, 0);
+				__pass::scope::enter(core, 0);
+			}
 		}, [this, leaveScope = !this->atFunctionTop]() {
-			if ( leaveScope ) __pass::symtab::leave(core, 0);
+			if ( leaveScope ) {
+				__pass::symtab::leave(core, 0);
+				__pass::scope::leave(core, 0);
+			}
 		});
 		ValueGuard< bool > guard2( atFunctionTop );
Index: src/AST/Type.cpp
===================================================================
--- src/AST/Type.cpp	(revision 293dc1c9a88a6120c9da7e8d3566ea1feae53953)
+++ src/AST/Type.cpp	(revision 16ba4a6fa0eb60a0cd27fb96882e37dbf94834dd)
@@ -211,5 +211,5 @@
 	for ( const Type * ty : types ) {
 		members.emplace_back( new ObjectDecl{
-			CodeLocation{}, "", ty, new ListInit( CodeLocation{}, {}, {}, MaybeConstruct ),
+			CodeLocation{}, "", ty, new ListInit( CodeLocation{}, {}, {}, NoConstruct ),
 			Storage::Classes{}, Linkage::Cforall } );
 	}
