Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision f23297749a9c5994cc01da9cf150c132ee015f82)
+++ src/SymTab/Autogen.cc	(revision 6fc5c14c6f831f36aaf4f6736da31f67985da917)
@@ -379,4 +379,6 @@
 				// don't make a function whose parameter is an unnamed bitfield
 				continue;
+			} else if ( ! InitTweak::isConstructable( field->get_type() ) ) {
+				continue;
 			}
 			memCtorType->parameters.push_back( new ObjectDecl( field->name, Type::StorageClasses(), LinkageSpec::Cforall, 0, field->get_type()->clone(), 0 ) );
@@ -407,6 +409,9 @@
 				}
 
-				if ( type->get_const() && func->get_name() == "?=?" ) {
+				if ( type->get_const() && CodeGen::isAssignment( func->name ) ) {
 					// don't assign const members, but do construct/destruct
+					continue;
+				} else if ( CodeGen::isCtorDtor( func->name ) && ! InitTweak::isConstructable( type ) ) {
+					// don't construct non-constructable types
 					continue;
 				}
@@ -441,4 +446,7 @@
 				if ( isUnnamedBitfield( dynamic_cast< ObjectDecl * > ( field ) ) ) {
 					// don't make a function whose parameter is an unnamed bitfield
+					continue;
+				} else if ( ! InitTweak::isConstructable( field->get_type() ) ) {
+					// don't construct non-constructable types
 					continue;
 				} else if ( parameter != params.end() ) {
Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision f23297749a9c5994cc01da9cf150c132ee015f82)
+++ src/SymTab/Indexer.cc	(revision 6fc5c14c6f831f36aaf4f6736da31f67985da917)
@@ -407,7 +407,7 @@
 		makeWritable();
 
-		const std::string &name = decl->get_name();
+		const std::string &name = decl->name;
 		std::string mangleName;
-		if ( LinkageSpec::isOverridable( decl->get_linkage() ) ) {
+		if ( LinkageSpec::isOverridable( decl->linkage ) ) {
 			// mangle the name without including the appropriate suffix, so overridable routines are placed into the
 			// same "bucket" as their user defined versions.
@@ -418,5 +418,5 @@
 
 		// this ensures that no two declarations with the same unmangled name at the same scope both have C linkage
-		if ( ! LinkageSpec::isMangled( decl->get_linkage() ) ) {
+		if ( ! LinkageSpec::isMangled( decl->linkage ) ) {
 			// NOTE this is broken in Richard's original code in such a way that it never triggers (it
 			// doesn't check decls that have the same manglename, and all C-linkage decls are defined to
