Index: doc/proposals/tagged-struct.txt
===================================================================
--- doc/proposals/tagged-struct.txt	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
+++ doc/proposals/tagged-struct.txt	(revision 29038efb31bd98805b210064fad0660703b22f67)
@@ -71,4 +71,9 @@
 should be possible to do during linking.
 
+If a generic/polymorphic type is tagged its tagged would then be shared
+between all applications of that generic. Internal tags could be used to
+seperate these structures again, however it seems in most cases simply using
+the existing type parameters should provide the needed information.
+
 
 Traits:
@@ -102,21 +107,57 @@
 To allow for growth each option would have to be a structure itself.
 
-Which brings us to "tagget struct union", ie. a union of tagged structures
+Which brings us to "tagged struct union", ie. a union of tagged structures
 as opposed to tagging the union itself. This extention acts as a constraint.
 If unions are declared tagged instead of creating a new tagged type, all
-possible values of the union must be of that tagged type or a child type.
+possible values of the union must be of that tagged type or a child type. If
+the tagged type is omitted then they must all be tagged but of any tagged
+type.
+
+As a short cut union_instance->type might get the type object of the loaded
+value. It should always be the same operation regardless so it saves
+abritarly picking a branch of the union to get the type object.
 
 
-Custom Type Objects (Extention):
+Type Objects Fields (Extention):
 
-Some method to define type objects used within a tree of types. One option is
-to allow the tree's type object to be specified by the tree root. It would
-then have to be filled in for each type in the tree, including the root.
+Adding fields to the type object allows data to be shared between instances
+of the same type. Such behaviour could be mimiced by creating a lookup
+function on the type object pointer, but this may be cleaner and more
+efficient.
 
-The only required field is the parent field, a pointer to the type object's
-type. (This is also the only required field on the tagged structure itself.)
+The type object fields follow similar rules to the fields on the tagged
+objects themselves, they must be additive. So any fields present on a
+type object will be present (and in the same place) on all of its children.
 
-A further extention could allow expanding type objects, so child types could
-append fields to their parent's feild list. They might need their own type
-objects at that point, or maybe static checks will be enough to see the
-minimum field list.
+This does mean that many type object structure types will have to be auto
+generated, and traversing up the tree might get a little wierd. That could
+be symplified by only allowing the root type to specify fields on the type
+object, so that the type object is consistant throughout that particular tree.
+And hence the type_object pointers would also be consistant as the type they
+point to would never change.
+
+struct Example tagged {
+	tagged char const * const type_name = "Example";
+	int data;
+};
+
+Creates a tagged structure that has no parent, stores an integer and the type
+object also has an extra field that stores a string on the type object.
+This can be accessed by using member access on the type object, as a regular
+structure.
+
+Type object fields will have to allow initialization on their declaration,
+and declarations of children as well, as they are not assotiated with the
+later instances of the tagged structure.
+
+	...
+	tagged void (*dtor)(tagged Example * this);
+	...
+
+Sub-Extention, not sure how it would work but some way to have a "dynamic"
+field that is considered the type of the current tagged struct might be useful
+for things like specifying a deconstructor. In this case, the following code
+will clean up any child type of Example:
+
+Example * ex = get_some_example();
+ex->type->dtor(ex);
Index: src/GenPoly/InstantiateGeneric.cc
===================================================================
--- src/GenPoly/InstantiateGeneric.cc	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
+++ src/GenPoly/InstantiateGeneric.cc	(revision 29038efb31bd98805b210064fad0660703b22f67)
@@ -171,5 +171,5 @@
 		Type* postmutate( UnionInstType *inst );
 
-		void premutate( FunctionType * ftype ) {
+		void premutate( __attribute__((unused)) FunctionType * ftype ) {
 			GuardValue( inFunctionType );
 			inFunctionType = true;
Index: src/InitTweak/GenInit.cc
===================================================================
--- src/InitTweak/GenInit.cc	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
+++ src/InitTweak/GenInit.cc	(revision 29038efb31bd98805b210064fad0660703b22f67)
@@ -71,11 +71,10 @@
 		// that need to be constructed or destructed
 		void previsit( StructDecl *aggregateDecl );
-		void previsit( UnionDecl *aggregateDecl ) { visit_children = false; }
-		void previsit( EnumDecl *aggregateDecl ) { visit_children = false; }
-		void previsit( TraitDecl *aggregateDecl ) { visit_children = false; }
-		void previsit( TypeDecl *typeDecl ) { visit_children = false; }
-		void previsit( TypedefDecl *typeDecl ) { visit_children = false; }
-
-		void previsit( FunctionType *funcType ) { visit_children = false; }
+		void previsit( __attribute__((unused)) UnionDecl    * aggregateDecl ) { visit_children = false; }
+		void previsit( __attribute__((unused)) EnumDecl     * aggregateDecl ) { visit_children = false; }
+		void previsit( __attribute__((unused)) TraitDecl    * aggregateDecl ) { visit_children = false; }
+		void previsit( __attribute__((unused)) TypeDecl     * typeDecl )      { visit_children = false; }
+		void previsit( __attribute__((unused)) TypedefDecl  * typeDecl )      { visit_children = false; }
+		void previsit( __attribute__((unused)) FunctionType * funcType )      { visit_children = false; }
 
 		void previsit( CompoundStmt * compoundStmt );
@@ -336,5 +335,5 @@
 	}
 
-	void CtorDtor::previsit( CompoundStmt * compoundStmt ) {
+	void CtorDtor::previsit( __attribute__((unused)) CompoundStmt * compoundStmt ) {
 		GuardScope( managedTypes );
 	}
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
+++ src/Parser/parser.yy	(revision 29038efb31bd98805b210064fad0660703b22f67)
@@ -2332,5 +2332,5 @@
 	| TYPEGENname
 	| CONST
-		{ $$ = Token{ new string( "__const__" ) }; }
+		{ $$ = Token{ new string( "__const__" ), { nullptr, -1 } }; }
 	;
 
Index: src/ResolvExpr/CurrentObject.cc
===================================================================
--- src/ResolvExpr/CurrentObject.cc	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
+++ src/ResolvExpr/CurrentObject.cc	(revision 29038efb31bd98805b210064fad0660703b22f67)
@@ -127,5 +127,5 @@
 		}
 
-		virtual void print( std::ostream & out, Indenter indent ) const {
+		virtual void print( std::ostream & out, __attribute__((unused)) Indenter indent ) const {
 			out << "SimpleIterator(" << type << ")";
 		}
Index: src/tests/.expect/32/math.txt
===================================================================
--- src/tests/.expect/32/math.txt	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
+++ src/tests/.expect/32/math.txt	(revision 29038efb31bd98805b210064fad0660703b22f67)
@@ -22,5 +22,5 @@
 cos:0.540302 0.54030230586814 0.540302305868139717 0.83373-0.988898i 0.833730025131149-0.988897705762865i 0.833730025131149049-0.988897705762865096i
 tan:1.55741 1.5574077246549 1.55740772465490223 0.271753+1.08392i 0.271752585319512+1.08392332733869i 0.271752585319511717+1.08392332733869454i
-asin:1.5708 1.5707963267949 1.57079632679489662 0.66624+1.06128i 0.666239432492515+1.06127506190504i 0.666239432492515255+1.06127506190503565i
+asin:1.5708 1.5707963267949 1.57079632679489662 0.666239+1.06128i 0.666239432492515+1.06127506190504i 0.666239432492515255+1.06127506190503565i
 acos:0 0 0 0.904557-1.06128i 0.904556894302381-1.06127506190504i 0.904556894302381364-1.06127506190503565i
 atan:0.785398 0.785398163397448 0.78539816339744831 1.01722+0.402359i 1.01722196789785+0.402359478108525i 1.01722196789785137+0.402359478108525094i
