Index: Jenkinsfile
===================================================================
--- Jenkinsfile	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ Jenkinsfile	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -106,24 +106,4 @@
 
 def build() {
-	// build_stage('Build', true) {
-	// 	// Build outside of the src tree to ease cleaning
-	// 	dir (BuildDir) {
-	// 		//Configure the conpilation (Output is not relevant)
-	// 		//Use the current directory as the installation target so nothing escapes the sandbox
-	// 		//Also specify the compiler by hand
-	// 		targets=""
-	// 		if( Settings.RunAllTests || Settings.RunBenchmark ) {
-	// 			targets="--with-target-hosts='host:debug,host:nodebug'"
-	// 		} else {
-	// 			targets="--with-target-hosts='host:debug'"
-	// 		}
-
-	// 		sh "${SrcDir}/configure CXX=${Settings.Compiler.CXX} CC=${Settings.Compiler.CC} ${Settings.Architecture.flags} ${targets} --quiet"
-
-	// 		//Compile the project
-	// 		sh 'make -j 8 --no-print-directory'
-	// 	}
-	// }
-
 	debug = true
 	release = Settings.RunAllTests || Settings.RunBenchmark
@@ -195,5 +175,5 @@
 		dir (BuildDir) {
 			//Append bench results
-			sh "make --no-print-directory -C benchmark jenkins"
+			sh "make --no-print-directory -C benchmark jenkins arch=${Settings.Architecture.name}"
 		}
 	}
@@ -221,8 +201,12 @@
 
 		//Then publish the results
-		do_plot(Settings.RunBenchmark && Settings.Publish, 'compile'  , groupCompile    , 'Compilation')
-		do_plot(Settings.RunBenchmark && Settings.Publish, 'ctxswitch', groupConcurrency, 'Context Switching')
-		do_plot(Settings.RunBenchmark && Settings.Publish, 'mutex'    , groupConcurrency, 'Mutual Exclusion')
-		do_plot(Settings.RunBenchmark && Settings.Publish, 'signal'   , groupConcurrency, 'Internal and External Scheduling')
+		do_plot(Settings.RunBenchmark && Settings.Publish, 'compile'       , groupCompile    , 'Compilation')
+		do_plot(Settings.RunBenchmark && Settings.Publish, 'compile.diff'  , groupCompile    , 'Compilation Speed-Up')
+		do_plot(Settings.RunBenchmark && Settings.Publish, 'ctxswitch'     , groupConcurrency, 'Context Switching')
+		do_plot(Settings.RunBenchmark && Settings.Publish, 'ctxswitch.diff', groupConcurrency, 'Context Switching Speed-Up')
+		do_plot(Settings.RunBenchmark && Settings.Publish, 'mutex'         , groupConcurrency, 'Mutual Exclusion')
+		do_plot(Settings.RunBenchmark && Settings.Publish, 'mutex.diff'    , groupConcurrency, 'Mutual Exclusion Speed-Up')
+		do_plot(Settings.RunBenchmark && Settings.Publish, 'signal'        , groupConcurrency, 'Internal and External Scheduling')
+		do_plot(Settings.RunBenchmark && Settings.Publish, 'signal.diff'   , groupConcurrency, 'Internal and External Scheduling Speed-Up')
 	}
 }
Index: Makefile.in
===================================================================
--- Makefile.in	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ Makefile.in	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -281,4 +281,5 @@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
+DEMANGLER = @DEMANGLER@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
@@ -306,4 +307,5 @@
 LIBCFA_TARGET_DIRS = @LIBCFA_TARGET_DIRS@
 LIBCFA_TARGET_MAKEFILES = @LIBCFA_TARGET_MAKEFILES@
+LIBDEMANGLE = @LIBDEMANGLE@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
Index: automake/cfa.m4
===================================================================
--- automake/cfa.m4	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ automake/cfa.m4	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -66,5 +66,5 @@
 		"x86-64"     ) cannon_arch_name="x64";;
 		"x86_64"     ) cannon_arch_name="x64";;
-		"aarch64"    ) cannon_arch_name="x64";;
+		"aarch64"    ) cannon_arch_name="arm";;
 		"x86"        ) cannon_arch_name="x86";;
 		"i386"       ) cannon_arch_name="x86";;
Index: benchmark/Makefile.am
===================================================================
--- benchmark/Makefile.am	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ benchmark/Makefile.am	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -52,4 +52,5 @@
 # NEED AT LEAST 4 DATA VALUES FOR BENCHMARKS BECAUSE THE MAX AND MIN VALUES ARE REMOVED
 repeats  = 5 # 31 for benchmarks
+arch     = x64
 skipcompile = no
 TIME_FORMAT = "%E"
@@ -100,14 +101,22 @@
 @DOifskipcompile@
 	@+make compile.csv
+	@-+make compile.diff.csv
 @DOendif@
 	@+make ctxswitch.csv
+	@-+make ctxswitch.diff.csv
 	@+make mutex.csv
+	@-+make mutex.diff.csv
 	@+make signal.csv
+	@-+make signal.diff.csv
 @DOifskipcompile@
-	@cat compile.csv
+	cat compile.csv
+	-cat compile.diff.csv
 @DOendif@
-	@cat ctxswitch.csv
-	@cat mutex.csv
-	@cat signal.csv
+	cat ctxswitch.csv
+	-cat ctxswitch.diff.csv
+	cat mutex.csv
+	-cat mutex.diff.csv
+	cat signal.csv
+	-cat signal.diff.csv
 
 compile.csv:
@@ -143,4 +152,9 @@
 	@+make waitfor-cfa2.runquiet >> $@
 	@$(srcdir)/fixcsv.sh $@
+
+%.diff.csv: %.csv
+	@test -e $(srcdir)/baselines/$(arch)/$< || (echo "Error : Missing baseline for ${<}" && false)
+	@$(srcdir)/baselines/calc.py $(srcdir)/baselines/$(arch)/$(<) $(<) > $@
+
 
 ## =========================================================================================================
Index: benchmark/Makefile.in
===================================================================
--- benchmark/Makefile.in	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ benchmark/Makefile.in	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -231,4 +231,5 @@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
+DEMANGLER = @DEMANGLER@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
@@ -256,4 +257,5 @@
 LIBCFA_TARGET_DIRS = @LIBCFA_TARGET_DIRS@
 LIBCFA_TARGET_MAKEFILES = @LIBCFA_TARGET_MAKEFILES@
+LIBDEMANGLE = @LIBDEMANGLE@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
@@ -398,4 +400,5 @@
 # NEED AT LEAST 4 DATA VALUES FOR BENCHMARKS BECAUSE THE MAX AND MIN VALUES ARE REMOVED
 repeats = 5 # 31 for benchmarks
+arch = x64
 skipcompile = no
 TIME_FORMAT = "%E"
@@ -762,14 +765,22 @@
 @DOifskipcompile@
 	@+make compile.csv
+	@-+make compile.diff.csv
 @DOendif@
 	@+make ctxswitch.csv
+	@-+make ctxswitch.diff.csv
 	@+make mutex.csv
+	@-+make mutex.diff.csv
 	@+make signal.csv
+	@-+make signal.diff.csv
 @DOifskipcompile@
-	@cat compile.csv
+	cat compile.csv
+	-cat compile.diff.csv
 @DOendif@
-	@cat ctxswitch.csv
-	@cat mutex.csv
-	@cat signal.csv
+	cat ctxswitch.csv
+	-cat ctxswitch.diff.csv
+	cat mutex.csv
+	-cat mutex.diff.csv
+	cat signal.csv
+	-cat signal.diff.csv
 
 compile.csv:
@@ -806,4 +817,8 @@
 	@$(srcdir)/fixcsv.sh $@
 
+%.diff.csv: %.csv
+	@test -e $(srcdir)/baselines/$(arch)/$< || (echo "Error : Missing baseline for ${<}" && false)
+	@$(srcdir)/baselines/calc.py $(srcdir)/baselines/$(arch)/$(<) $(<) > $@
+
 loop$(EXEEXT):
 	$(BENCH_V_CC)$(COMPILE) -DBENCH_N=5000000000 $(srcdir)/loop.c
Index: benchmark/baselines/calc.py
===================================================================
--- benchmark/baselines/calc.py	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
+++ benchmark/baselines/calc.py	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -0,0 +1,27 @@
+#!/usr/bin/python3
+
+import sys
+
+if len(sys.argv) != 3:
+	print("Usage: %s baseline.csv result.csv" % sys.argv[0], file=sys.stderr)
+	exit(1)
+
+with open(sys.argv[1]) as baseline, open(sys.argv[2]) as result:
+	contentB = baseline.read().splitlines()
+	contentR = result  .read().splitlines()
+	headerB = contentB[0].split(',')
+	headerR = contentR[0].split(',')
+	valuesB = [float(v) for v in contentB[1].split(',')]
+	valuesR = [float(v) for v in contentR[1].split(',')]
+
+	dataB = {label: value for label, value in zip(headerB, valuesB)}
+	dataR = {label: value for label, value in zip(headerR, valuesR)}
+
+	if set(dataB) - set(dataR) or set(dataR) - set(dataB):
+		print("Error: baseline and result differ in number of values", file=sys.stderr)
+		exit(2)
+
+	out = {label : "{0:.3f}".format(num / dataB[label]) for label, num in dataR.items()}
+
+	print(','.join( out.keys() ))
+	print(','.join( out.values() ))
Index: benchmark/baselines/x64/compile.csv
===================================================================
--- benchmark/baselines/x64/compile.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
+++ benchmark/baselines/x64/compile.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -0,0 +1,2 @@
+attributes,typeof,array,monitor,empty,expression,io,operators
+4.575416666666667,3.378541666666667,3.571875,255.95166666666663,3.4189583333333324,3.578125,293.9122916666668,3.563541666666666
Index: benchmark/baselines/x64/ctxswitch.csv
===================================================================
--- benchmark/baselines/x64/ctxswitch.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
+++ benchmark/baselines/x64/ctxswitch.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -0,0 +1,2 @@
+coroutine,thread,generator
+31.045337499999988,76.85271458333335,2.0151035416666665
Index: benchmark/baselines/x64/mutex.csv
===================================================================
--- benchmark/baselines/x64/mutex.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
+++ benchmark/baselines/x64/mutex.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -0,0 +1,2 @@
+1-monitor,2-monitor
+40.213872916666666,70.85164583333331
Index: benchmark/baselines/x64/signal.csv
===================================================================
--- benchmark/baselines/x64/signal.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
+++ benchmark/baselines/x64/signal.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -0,0 +1,2 @@
+waitfor-2,signal-1,signal-2,waitfor-1
+393.69606249999987,325.99158333333327,409.01025000000004,319.90975000000003
Index: benchmark/baselines/x86/compile.csv
===================================================================
--- benchmark/baselines/x86/compile.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
+++ benchmark/baselines/x86/compile.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -0,0 +1,2 @@
+empty,expression,operators,typeof,array,monitor,io,attributes
+3.7012244897959197,3.8785714285714294,3.898163265306122,3.7202040816326525,3.7569387755102026,264.9081632653059,319.54408163265316,4.86795918367347
Index: benchmark/baselines/x86/ctxswitch.csv
===================================================================
--- benchmark/baselines/x86/ctxswitch.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
+++ benchmark/baselines/x86/ctxswitch.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -0,0 +1,2 @@
+coroutine,generator,thread
+33.10828367346939,3.189955102040816,112.80995918367347
Index: benchmark/baselines/x86/mutex.csv
===================================================================
--- benchmark/baselines/x86/mutex.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
+++ benchmark/baselines/x86/mutex.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -0,0 +1,2 @@
+2-monitor,1-monitor
+88.02230408163267,54.31430408163266
Index: benchmark/baselines/x86/signal.csv
===================================================================
--- benchmark/baselines/x86/signal.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
+++ benchmark/baselines/x86/signal.csv	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -0,0 +1,2 @@
+signal-2,waitfor-1,waitfor-2,signal-1
+532.5297959183672,413.3084897959184,506.7579591836735,423.78826530612247
Index: configure
===================================================================
--- configure	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ configure	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -637,4 +637,6 @@
 LIBOBJS
 CFA_BACKEND_CC
+DEMANGLER
+LIBDEMANGLE
 WITH_LIBTCMALLOC_FALSE
 WITH_LIBTCMALLOC_TRUE
@@ -797,4 +799,5 @@
 with_target_hosts
 enable_gprofiler
+enable_demangler
 enable_dependency_tracking
 enable_shared
@@ -1457,4 +1460,5 @@
   --disable-silent-rules  verbose build output (undo: "make V=0")
   --enable-gprofiler     whether or not to enable gprofiler tools (if available)
+  --enable-demangler     whether or not to build the demangler (executable and library)
   --enable-dependency-tracking
                           do not reject slow dependency extractors
@@ -3401,4 +3405,12 @@
 
 
+# Check whether --enable-demangler was given.
+if test "${enable_demangler+set}" = set; then :
+  enableval=$enable_demangler; enable_demangler=$enableval
+else
+  enable_demangler=yes
+fi
+
+
 TARGET_HOSTS=${target_hosts}
 
@@ -3433,5 +3445,5 @@
 		"x86-64"     ) cannon_arch_name="x64";;
 		"x86_64"     ) cannon_arch_name="x64";;
-		"aarch64"    ) cannon_arch_name="x64";;
+		"aarch64"    ) cannon_arch_name="arm";;
 		"x86"        ) cannon_arch_name="x86";;
 		"i386"       ) cannon_arch_name="x86";;
@@ -3475,5 +3487,5 @@
 		"x86-64"     ) cannon_arch_name="x64";;
 		"x86_64"     ) cannon_arch_name="x64";;
-		"aarch64"    ) cannon_arch_name="x64";;
+		"aarch64"    ) cannon_arch_name="arm";;
 		"x86"        ) cannon_arch_name="x86";;
 		"i386"       ) cannon_arch_name="x86";;
@@ -16780,4 +16792,15 @@
 
 
+# conditionnally build the demangler
+if test "x$enable_demangler" == xyes; then
+	LIBDEMANGLE="libdemangle.a"
+	DEMANGLER="demangler"
+else
+	LIBDEMANGLE=""
+	DEMANGLER=""
+fi
+
+
+
 # Checks for header files.
 for ac_header in libintl.h malloc.h unistd.h
Index: configure.ac
===================================================================
--- configure.ac	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ configure.ac	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -133,4 +133,8 @@
 	enable_gprofiler=$enableval, enable_gprofiler=yes)
 
+AC_ARG_ENABLE(demangler,
+	[  --enable-demangler     whether or not to build the demangler (executable and library)],
+	enable_demangler=$enableval, enable_demangler=yes)
+
 AC_SUBST(TARGET_HOSTS, ${target_hosts})
 
@@ -205,4 +209,15 @@
 AM_CONDITIONAL([WITH_LIBTCMALLOC], [test "x$enable_gprofiler" = "xyes" -a "$HAVE_LIBTCMALLOC" -eq 1])
 
+# conditionnally build the demangler
+if test "x$enable_demangler" == xyes; then
+	LIBDEMANGLE="libdemangle.a"
+	DEMANGLER="demangler"
+else
+	LIBDEMANGLE=""
+	DEMANGLER=""
+fi
+AC_SUBST([LIBDEMANGLE])
+AC_SUBST([DEMANGLER])
+
 # Checks for header files.
 AC_CHECK_HEADERS([libintl.h malloc.h unistd.h], [], [echo "Error: Missing required header"; exit 1])
Index: driver/Makefile.in
===================================================================
--- driver/Makefile.in	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ driver/Makefile.in	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -218,4 +218,5 @@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
+DEMANGLER = @DEMANGLER@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
@@ -243,4 +244,5 @@
 LIBCFA_TARGET_DIRS = @LIBCFA_TARGET_DIRS@
 LIBCFA_TARGET_MAKEFILES = @LIBCFA_TARGET_MAKEFILES@
+LIBDEMANGLE = @LIBDEMANGLE@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
Index: driver/cfa.cc
===================================================================
--- driver/cfa.cc	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ driver/cfa.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -10,6 +10,6 @@
 // Created On       : Tue Aug 20 13:44:49 2002
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Feb 10 08:28:09 2019
-// Update Count     : 281
+// Last Modified On : Sat Aug 10 08:44:15 2019
+// Update Count     : 311
 //
 
@@ -20,4 +20,5 @@
 #include <string>										// STL version
 #include <string.h>										// strcmp
+#include <algorithm>									// find
 
 #include <sys/types.h>
@@ -26,4 +27,5 @@
 #include "Common/SemanticError.h"
 #include "config.h"										// configure info
+
 
 using std::cerr;
@@ -40,27 +42,17 @@
 } // prefix
 
-enum { NumSuffixes = 2 };
-const string suffixes[NumSuffixes] = { "cfa", "hfa", };
-
-bool suffix( string arg, const char * args[], int & nargs ) {
+bool suffix( string arg ) {
+	enum { NumSuffixes = 3 };
+	static const string suffixes[NumSuffixes] = { "cfa", "hfa", "ifa" };
 	//std::cerr << arg << std::endl;
 	size_t dot = arg.find_last_of( "." );
 	//std::cerr << dot << " " << (dot != string::npos ? arg.substr( dot + 1 ) : "fred" ) << std::endl;
 	if ( dot == string::npos ) return false;
-	string sx = arg.substr( dot + 1 );
-	for ( int i = 0; i < NumSuffixes; i += 1 ) {
-		if ( sx == suffixes[i] ) {
-			args[nargs] = "-x";
-			nargs += 1;
-			args[nargs] = "c";
-			nargs += 1;
-			return true;
-		} // if
-	} // for
-	return false;
+	const string * end = suffixes + NumSuffixes;
+	return std::find( suffixes, end, arg.substr( dot + 1 ) ) != end;
 } // suffix
 
 
-void shuffle( const char *args[], int S, int E, int N ) {
+void shuffle( const char * args[], int S, int E, int N ) {
 	// S & E index 1 passed the end so adjust with -1
 	#ifdef __DEBUG_H__
@@ -75,5 +67,5 @@
 } // shuffle
 
-static inline bool dirExists(const string & path) {
+static inline bool dirExists( const string & path ) {
     struct stat info;
     if(stat( path.c_str(), &info ) != 0)
@@ -88,5 +80,5 @@
 #define str(s) #s
 
-int main( int argc, char *argv[] ) {
+int main( int argc, char * argv[] ) {
 	string Version( CFA_VERSION_LONG );					// current version number from CONFIG
 	string Major( str( CFA_VERSION_MAJOR ) ), Minor( str( CFA_VERSION_MINOR ) ), Patch( str( CFA_VERSION_PATCH ) );
@@ -104,11 +96,12 @@
 	string compiler_name;								// name of C compiler
 
+	bool x_flag = false;								// -x flag
 	bool nonoptarg = false;								// indicates non-option argument specified
 	bool link = true;									// linking as well as compiling
 	bool verbose = false;								// -v flag
-	bool quiet = false;								// -quiet flag
-	bool debug = true;								// -debug flag
-	bool nolib = false;								// -nolib flag
-	bool help = false;								// -help flag
+	bool quiet = false;									// -quiet flag
+	bool debug = true;									// -debug flag
+	bool nolib = false;									// -nolib flag
+	bool help = false;									// -help flag
 	bool CFA_flag = false;								// -CFA flag
 	bool cpp_flag = false;								// -E or -M flag, preprocessor only
@@ -116,6 +109,6 @@
 	bool noincstd_flag = false;							// -no-include-stdhdr= flag
 	bool debugging __attribute(( unused )) = false;		// -g flag
-	bool m32 = false;                                    // -m32 flag
-	bool m64 = false;                                    // -m64 flag
+	bool m32 = false;									// -m32 flag
+	bool m64 = false;									// -m64 flag
 	bool intree = false;
 
@@ -198,4 +191,18 @@
 				args[nargs] = argv[i];					// pass the argument along
 				nargs += 1;
+			} else if ( prefix( arg, "-x" ) ) {			// file suffix ?
+				string lang;
+				args[nargs] = argv[i];					// pass the argument along
+				nargs += 1;
+				if ( arg.length() == 2 ) {				// separate argument ?
+					i += 1;
+					if ( i == argc ) continue;			// next argument available ?
+					lang = argv[i];
+					args[nargs] = argv[i];				// pass the argument along
+					nargs += 1;
+				} else {
+					lang = arg.substr( 2 );
+				} // if
+				x_flag = lang != "none";
 			} else if ( prefix( arg, "-std=" ) || prefix( arg, "--std=" ) ) {
 				std_flag = true;						// -std=XX provided
@@ -283,8 +290,14 @@
 			} // if
 		} else {
-			bool cfa = suffix( arg, args, nargs );		// check suffix
+			bool cfa = suffix( arg );					// check suffix
+			if ( ! x_flag && cfa ) {					// no explicit suffix and cfa suffix ?
+				args[nargs] = "-x";
+				nargs += 1;
+				args[nargs] = "c";
+				nargs += 1;
+			} // if
 			args[nargs] = argv[i];						// concatenate file
 			nargs += 1;
-			if ( cfa ) {
+			if ( ! x_flag && cfa ) {					// no explicit suffix and cfa suffix ?
 				args[nargs] = "-x";
 				nargs += 1;
@@ -295,9 +308,4 @@
 		} // if
 	} // for
-
-    args[nargs] = "-x";									// turn off language
-    nargs += 1;
-    args[nargs] = "none";
-    nargs += 1;
 
 	#ifdef __x86_64__
Index: longrun_tests/Makefile.in
===================================================================
--- longrun_tests/Makefile.in	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ longrun_tests/Makefile.in	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -365,4 +365,5 @@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
+DEMANGLER = @DEMANGLER@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
@@ -390,4 +391,5 @@
 LIBCFA_TARGET_DIRS = @LIBCFA_TARGET_DIRS@
 LIBCFA_TARGET_MAKEFILES = @LIBCFA_TARGET_MAKEFILES@
+LIBDEMANGLE = @LIBDEMANGLE@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
Index: src/BasicTypes-gen.cc
===================================================================
--- src/BasicTypes-gen.cc	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/BasicTypes-gen.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -295,5 +295,29 @@
 	// cout << code.str();
 
-	
+
+	// TEMPORARY DURING CHANGE OVER
+	#define TypeAST TOP_SRCDIR "src/AST/Type.hpp"
+	resetInput( file, TypeAST, buffer, code, str );
+
+	if ( (start = str.find( STARTMK )) == string::npos ) Abort( "start", TypeAST );
+	start += sizeof( STARTMK );							// includes newline
+	code << str.substr( 0, start );
+
+	code << "\t" << BYMK << endl;
+	code << "\tenum Kind {" << endl;
+	for ( int r = 0; r < NUMBER_OF_BASIC_TYPES; r += 1 ) {
+		code << "\t\t" << graph[r].name << "," << endl;
+	} // for	
+	code << "\t\tNUMBER_OF_BASIC_TYPES" << endl;
+	code << "\t} kind;" << endl;
+	code << "\t";										// indentation for end marker
+
+	if ( (start = str.find( ENDMK, start + 1 )) == string::npos ) Abort( "end", TypeAST );
+	code << str.substr( start );
+
+	output( file, TypeAST, code );
+	// cout << code.str();
+
+
 	#define ConversionCost TOP_SRCDIR "src/ResolvExpr/ConversionCost.cc"
 	resetInput( file, ConversionCost, buffer, code, str );
@@ -310,8 +334,8 @@
 			code << right << setw(30) << graph[c].type << left;
 		} else if ( graph[c].rank != graph[c + 2].rank ) {
-			code << string( 10, ' ' ) << setw(25) << graph[c].type << setw(25) << graph[c + 1].type;
+			code << string( 10, ' ' ) << setw(25) << graph[c].type << graph[c + 1].type;
 			c += 1;
 		} else {
-			code << setw(20) << graph[c].type << setw(20) << graph[c + 1].type << setw(20) << graph[c + 2].type;
+			code << setw(20) << graph[c].type << setw(20) << graph[c + 1].type << graph[c + 2].type;
 			c += 2;
 		} // if
@@ -328,5 +352,5 @@
 	code << "\t" << BYMK << endl;
 	code << "\tstatic const int costMatrix[BasicType::NUMBER_OF_BASIC_TYPES][BasicType::NUMBER_OF_BASIC_TYPES] = { // path length from root to node" << endl
-		 << "\t\t/*         ";
+		 << "\t\t/*           ";
 	for ( int r = 0; r < NUMBER_OF_BASIC_TYPES; r += 1 ) { // titles
 		code << setw(5) << graph[r].abbrev;
@@ -334,5 +358,5 @@
 	code << " */" << endl;
 	for ( int r = 0; r < NUMBER_OF_BASIC_TYPES; r += 1 ) { // costs
-		code << "\t\t/*" << setw(6) << graph[r].abbrev << "*/ {";
+		code << "\t\t/* " << setw(6) << graph[r].abbrev << " */ {";
 		for ( int c = 0; c < NUMBER_OF_BASIC_TYPES; c += 1 ) {
 			code << setw(4) << costMatrix[r][c] << ",";
@@ -353,5 +377,5 @@
 	code << "\t" << BYMK << endl;
 	code << "\tstatic const int signMatrix[BasicType::NUMBER_OF_BASIC_TYPES][BasicType::NUMBER_OF_BASIC_TYPES] = { // number of sign changes in safe conversion" << endl
-		 << "\t\t/*         ";
+		 << "\t\t/*           ";
 	for ( int r = 0; r < NUMBER_OF_BASIC_TYPES; r += 1 ) { // titles
 		code << setw(5) << graph[r].abbrev;
@@ -359,5 +383,5 @@
 	code << " */" << endl;
 	for ( int r = 0; r < NUMBER_OF_BASIC_TYPES; r += 1 ) { // costs
-		code << "\t\t/*" << setw(6) << graph[r].abbrev << "*/ {";
+		code << "\t\t/* " << setw(6) << graph[r].abbrev << " */ {";
 		for ( int c = 0; c < NUMBER_OF_BASIC_TYPES; c += 1 ) {
 			code << setw(4) << signMatrix[r][c] << ",";
@@ -395,5 +419,5 @@
 	code << "*/" << endl;
 	for ( int r = 0; r < NUMBER_OF_BASIC_TYPES; r += 1 ) { // costs
-		code << "\t\t\t\t  {\n\t\t/*" << setw(6) << graph[r].abbrev << "*/";
+		code << "\t\t\t\t  {\n\t\t/* " << setw(6) << graph[r].abbrev << " */";
 		for ( int c = 0; c < NUMBER_OF_BASIC_TYPES; c += 1 ) {
 			string s = string{"BT "} + graph[commonTypeMatrix[r][c]].name;
Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/GenPoly/Box.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -725,5 +725,5 @@
 			if ( ! needsBoxing( param, arg->result, exprTyVars, env ) ) return;
 
-			if ( arg->result->get_lvalue() ) {
+			if ( arg->get_lvalue() ) {
 				// argument expression may be CFA lvalue, but not C lvalue -- apply generalizedLvalue transformations.
 				// if ( VariableExpr * varExpr = dynamic_cast< VariableExpr * >( arg ) ) {
Index: src/GenPoly/Lvalue.cc
===================================================================
--- src/GenPoly/Lvalue.cc	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/GenPoly/Lvalue.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -363,5 +363,5 @@
 			int diff = depth1 - depth2;
 
-			if ( diff > 0 && ! srcType->get_lvalue() ) {
+			if ( diff > 0 && ! castExpr->arg->get_lvalue() ) {
 				// rvalue to reference conversion -- introduce temporary
 				// know that reference depth of cast argument is 0, need to introduce n temporaries for reference depth of n, e.g.
@@ -407,5 +407,5 @@
 					ret = new AddressExpr( ret );
 				}
-				if ( srcType->get_lvalue() && ! ResolvExpr::typesCompatible( srcType, strict_dynamic_cast<ReferenceType *>( destType )->base, SymTab::Indexer() ) ) {
+				if ( castExpr->arg->get_lvalue() && ! ResolvExpr::typesCompatible( srcType, strict_dynamic_cast<ReferenceType *>( destType )->base, SymTab::Indexer() ) ) {
 					// must keep cast if cast-to type is different from the actual type
 					castExpr->arg = ret;
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/Makefile.am	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 08:51:46 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Fri Feb 15 09:44:09 2019
-## Update Count     : 97
+## Last Modified On : Mon Aug  5 12:57:46 2019
+## Update Count     : 98
 ###############################################################################
 
@@ -55,5 +55,5 @@
 $(addprefix $(srcdir)/, ResolvExpr/ConversionCost.cc ResolvExpr/CommonType.cc SymTab/ManglerCommon.cc) : $(srcdir)/SynTree/Type.h
 
-$(srcdir)/SynTree/Type.h : BasicTypes-gen.cc
+$(srcdir)/AST/Type.hpp : BasicTypes-gen.cc
 	${AM_V_GEN}${CXXCOMPILE} $< -o BasicTypes-gen -Wall -Wextra
 	@./BasicTypes-gen
@@ -62,5 +62,6 @@
 # put into lib for now
 cfa_cpplibdir = $(CFA_LIBDIR)
-cfa_cpplib_PROGRAMS = ../driver/cfa-cpp demangler
+cfa_cpplib_PROGRAMS = ../driver/cfa-cpp $(DEMANGLER)
+EXTRA_PROGRAMS = demangler
 ___driver_cfa_cpp_SOURCES = $(SRC)
 ___driver_cfa_cpp_LDADD = -ldl $(LIBPROFILER) $(LIBTCMALLOC)
@@ -74,5 +75,6 @@
 demangler_LDADD = libdemangle.a -ldl			# yywrap
 
-noinst_LIBRARIES = libdemangle.a
+noinst_LIBRARIES = $(LIBDEMANGLE)
+EXTRA_LIBRARIES = libdemangle.a
 libdemangle_a_SOURCES = $(SRCDEMANGLE)
 
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/Makefile.in	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -141,5 +141,6 @@
 build_triplet = @build@
 host_triplet = @host@
-cfa_cpplib_PROGRAMS = ../driver/cfa-cpp$(EXEEXT) demangler$(EXEEXT)
+cfa_cpplib_PROGRAMS = ../driver/cfa-cpp$(EXEEXT) $(DEMANGLER)
+EXTRA_PROGRAMS = demangler$(EXEEXT)
 subdir = src
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -230,5 +231,5 @@
 	SynTree/Initializer.$(OBJEXT) \
 	SynTree/TypeSubstitution.$(OBJEXT) SynTree/Attribute.$(OBJEXT) \
-	SynTree/DeclReplacer.$(OBJEXT)
+	SynTree/DeclReplacer.$(OBJEXT) SynTree/TopLvalue.$(OBJEXT)
 am__objects_8 = CompilationState.$(OBJEXT) $(am__objects_1) \
 	$(am__objects_2) Concurrency/Keywords.$(OBJEXT) \
@@ -427,4 +428,5 @@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
+DEMANGLER = @DEMANGLER@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
@@ -452,4 +454,5 @@
 LIBCFA_TARGET_DIRS = @LIBCFA_TARGET_DIRS@
 LIBCFA_TARGET_MAKEFILES = @LIBCFA_TARGET_MAKEFILES@
+LIBDEMANGLE = @LIBDEMANGLE@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
@@ -691,5 +694,6 @@
       SynTree/TypeSubstitution.cc \
       SynTree/Attribute.cc \
-      SynTree/DeclReplacer.cc
+      SynTree/DeclReplacer.cc \
+      SynTree/TopLvalue.cc
 
 
@@ -703,5 +707,6 @@
 demangler_SOURCES = SymTab/demangler.cc # test driver for the demangler, also useful as a sanity check that libdemangle.a is complete
 demangler_LDADD = libdemangle.a -ldl			# yywrap
-noinst_LIBRARIES = libdemangle.a
+noinst_LIBRARIES = $(LIBDEMANGLE)
+EXTRA_LIBRARIES = libdemangle.a
 libdemangle_a_SOURCES = $(SRCDEMANGLE)
 all: $(BUILT_SOURCES)
@@ -1019,4 +1024,6 @@
 SynTree/DeclReplacer.$(OBJEXT): SynTree/$(am__dirstamp) \
 	SynTree/$(DEPDIR)/$(am__dirstamp)
+SynTree/TopLvalue.$(OBJEXT): SynTree/$(am__dirstamp) \
+	SynTree/$(DEPDIR)/$(am__dirstamp)
 Tuples/$(am__dirstamp):
 	@$(MKDIR_P) Tuples
@@ -1329,4 +1336,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/ReferenceType.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/Statement.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/TopLvalue.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/TupleExpr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/TupleType.Po@am__quote@
@@ -1662,5 +1670,5 @@
 $(addprefix $(srcdir)/, ResolvExpr/ConversionCost.cc ResolvExpr/CommonType.cc SymTab/ManglerCommon.cc) : $(srcdir)/SynTree/Type.h
 
-$(srcdir)/SynTree/Type.h : BasicTypes-gen.cc
+$(srcdir)/AST/Type.hpp : BasicTypes-gen.cc
 	${AM_V_GEN}${CXXCOMPILE} $< -o BasicTypes-gen -Wall -Wextra
 	@./BasicTypes-gen
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/Parser/ExpressionNode.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Mar 10 16:10:32 2019
-// Update Count     : 976
+// Last Modified On : Sun Aug  4 20:57:55 2019
+// Update Count     : 978
 //
 
@@ -109,5 +109,5 @@
 
 Expression * build_constantInteger( string & str ) {
-	static const BasicType::Kind kind[2][7] = {
+	static const BasicType::Kind kind[2][6] = {
 		// short (h) must be before char (hh) because shorter type has the longer suffix
 		{ BasicType::ShortSignedInt, BasicType::SignedChar, BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt, BasicType::SignedInt128, },
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/Parser/lex.ll	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Thu Jul 25 22:08:32 2019
- * Update Count     : 716
+ * Last Modified On : Sun Aug  4 20:53:47 2019
+ * Update Count     : 719
  */
 
@@ -273,6 +273,7 @@
 __inline__		{ KEYWORD_RETURN(INLINE); }				// GCC
 int				{ KEYWORD_RETURN(INT); }
+int128			{ KEYWORD_RETURN(INT128); }				// CFA
 __int128		{ KEYWORD_RETURN(INT128); }				// GCC
-int128			{ KEYWORD_RETURN(INT128); }				// GCC
+__int128_t		{ KEYWORD_RETURN(INT128); }				// GCC
 __label__		{ KEYWORD_RETURN(LABEL); }				// GCC
 long			{ KEYWORD_RETURN(LONG); }
@@ -313,4 +314,5 @@
 __typeof__		{ KEYWORD_RETURN(TYPEOF); }				// GCC
 union			{ KEYWORD_RETURN(UNION); }
+__uint128_t		{ KEYWORD_RETURN(UINT128); }			// GCC
 unsigned		{ KEYWORD_RETURN(UNSIGNED); }
 __builtin_va_list { KEYWORD_RETURN(VALIST); }			// GCC
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/Parser/parser.yy	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 25 22:31:38 2019
-// Update Count     : 4359
+// Last Modified On : Sun Aug  4 21:48:23 2019
+// Update Count     : 4364
 //
 
@@ -268,5 +268,5 @@
 %token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED
 %token BOOL COMPLEX IMAGINARY							// C99
-%token INT128 uuFLOAT80 uuFLOAT128						// GCC
+%token INT128 UINT128 uuFLOAT80 uuFLOAT128				// GCC
 %token uFLOAT16 uFLOAT32 uFLOAT32X uFLOAT64 uFLOAT64X uFLOAT128 // GCC
 %token ZERO_T ONE_T										// CFA
@@ -1826,4 +1826,6 @@
 	| INT128
 		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Int128 ); }
+	| UINT128
+		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Int128 )->addType( DeclarationNode::newSignedNess( DeclarationNode::Unsigned ) ); }
 	| FLOAT
 		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Float ); }
Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -1135,5 +1135,5 @@
 	bool isLvalue( Expression *expr ) {
 		// xxx - recurse into tuples?
-		return expr->result && ( expr->result->get_lvalue() || dynamic_cast< ReferenceType * >( expr->result ) );
+		return expr->result && ( expr->get_lvalue() || dynamic_cast< ReferenceType * >( expr->result ) );
 	}
 
Index: src/ResolvExpr/CommonType.cc
===================================================================
--- src/ResolvExpr/CommonType.cc	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/ResolvExpr/CommonType.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -190,5 +190,5 @@
 				 */
 				  {
-		/*     B */                BT Bool,                BT Char,          BT SignedChar,        BT UnsignedChar,      BT ShortSignedInt,    BT ShortUnsignedInt,
+		/*      B */                BT Bool,                BT Char,          BT SignedChar,        BT UnsignedChar,      BT ShortSignedInt,    BT ShortUnsignedInt,
 				             BT SignedInt,         BT UnsignedInt,       BT LongSignedInt,     BT LongUnsignedInt,   BT LongLongSignedInt, BT LongLongUnsignedInt,
 				          BT SignedInt128,      BT UnsignedInt128,            BT uFloat16,     BT uFloat16Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -198,5 +198,5 @@
 				  },
 				  {
-		/*     C */                BT Char,                BT Char,          BT SignedChar,        BT UnsignedChar,      BT ShortSignedInt,    BT ShortUnsignedInt,
+		/*      C */                BT Char,                BT Char,          BT SignedChar,        BT UnsignedChar,      BT ShortSignedInt,    BT ShortUnsignedInt,
 				             BT SignedInt,         BT UnsignedInt,       BT LongSignedInt,     BT LongUnsignedInt,   BT LongLongSignedInt, BT LongLongUnsignedInt,
 				          BT SignedInt128,      BT UnsignedInt128,            BT uFloat16,     BT uFloat16Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -206,5 +206,5 @@
 				  },
 				  {
-		/*    SC */          BT SignedChar,          BT SignedChar,          BT SignedChar,        BT UnsignedChar,      BT ShortSignedInt,    BT ShortUnsignedInt,
+		/*     SC */          BT SignedChar,          BT SignedChar,          BT SignedChar,        BT UnsignedChar,      BT ShortSignedInt,    BT ShortUnsignedInt,
 				             BT SignedInt,         BT UnsignedInt,       BT LongSignedInt,     BT LongUnsignedInt,   BT LongLongSignedInt, BT LongLongUnsignedInt,
 				          BT SignedInt128,      BT UnsignedInt128,            BT uFloat16,     BT uFloat16Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -214,5 +214,5 @@
 				  },
 				  {
-		/*    UC */        BT UnsignedChar,        BT UnsignedChar,        BT UnsignedChar,        BT UnsignedChar,      BT ShortSignedInt,    BT ShortUnsignedInt,
+		/*     UC */        BT UnsignedChar,        BT UnsignedChar,        BT UnsignedChar,        BT UnsignedChar,      BT ShortSignedInt,    BT ShortUnsignedInt,
 				             BT SignedInt,         BT UnsignedInt,       BT LongSignedInt,     BT LongUnsignedInt,   BT LongLongSignedInt, BT LongLongUnsignedInt,
 				          BT SignedInt128,      BT UnsignedInt128,            BT uFloat16,     BT uFloat16Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -222,5 +222,5 @@
 				  },
 				  {
-		/*    SI */      BT ShortSignedInt,      BT ShortSignedInt,      BT ShortSignedInt,      BT ShortSignedInt,      BT ShortSignedInt,    BT ShortUnsignedInt,
+		/*     SI */      BT ShortSignedInt,      BT ShortSignedInt,      BT ShortSignedInt,      BT ShortSignedInt,      BT ShortSignedInt,    BT ShortUnsignedInt,
 				             BT SignedInt,         BT UnsignedInt,       BT LongSignedInt,     BT LongUnsignedInt,   BT LongLongSignedInt, BT LongLongUnsignedInt,
 				          BT SignedInt128,      BT UnsignedInt128,            BT uFloat16,     BT uFloat16Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -230,5 +230,5 @@
 				  },
 				  {
-		/*   SUI */    BT ShortUnsignedInt,    BT ShortUnsignedInt,    BT ShortUnsignedInt,    BT ShortUnsignedInt,    BT ShortUnsignedInt,    BT ShortUnsignedInt,
+		/*    SUI */    BT ShortUnsignedInt,    BT ShortUnsignedInt,    BT ShortUnsignedInt,    BT ShortUnsignedInt,    BT ShortUnsignedInt,    BT ShortUnsignedInt,
 				             BT SignedInt,         BT UnsignedInt,       BT LongSignedInt,     BT LongUnsignedInt,   BT LongLongSignedInt, BT LongLongUnsignedInt,
 				          BT SignedInt128,      BT UnsignedInt128,            BT uFloat16,     BT uFloat16Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -238,5 +238,5 @@
 				  },
 				  {
-		/*     I */           BT SignedInt,           BT SignedInt,           BT SignedInt,           BT SignedInt,           BT SignedInt,           BT SignedInt,
+		/*      I */           BT SignedInt,           BT SignedInt,           BT SignedInt,           BT SignedInt,           BT SignedInt,           BT SignedInt,
 				             BT SignedInt,         BT UnsignedInt,       BT LongSignedInt,     BT LongUnsignedInt,   BT LongLongSignedInt, BT LongLongUnsignedInt,
 				          BT SignedInt128,      BT UnsignedInt128,            BT uFloat16,     BT uFloat16Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -246,5 +246,5 @@
 				  },
 				  {
-		/*    UI */         BT UnsignedInt,         BT UnsignedInt,         BT UnsignedInt,         BT UnsignedInt,         BT UnsignedInt,         BT UnsignedInt,
+		/*     UI */         BT UnsignedInt,         BT UnsignedInt,         BT UnsignedInt,         BT UnsignedInt,         BT UnsignedInt,         BT UnsignedInt,
 				           BT UnsignedInt,         BT UnsignedInt,       BT LongSignedInt,     BT LongUnsignedInt,   BT LongLongSignedInt, BT LongLongUnsignedInt,
 				          BT SignedInt128,      BT UnsignedInt128,            BT uFloat16,     BT uFloat16Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -254,5 +254,5 @@
 				  },
 				  {
-		/*    LI */       BT LongSignedInt,       BT LongSignedInt,       BT LongSignedInt,       BT LongSignedInt,       BT LongSignedInt,       BT LongSignedInt,
+		/*     LI */       BT LongSignedInt,       BT LongSignedInt,       BT LongSignedInt,       BT LongSignedInt,       BT LongSignedInt,       BT LongSignedInt,
 				         BT LongSignedInt,       BT LongSignedInt,       BT LongSignedInt,     BT LongUnsignedInt,   BT LongLongSignedInt, BT LongLongUnsignedInt,
 				          BT SignedInt128,      BT UnsignedInt128,            BT uFloat16,     BT uFloat16Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -262,5 +262,5 @@
 				  },
 				  {
-		/*   LUI */     BT LongUnsignedInt,     BT LongUnsignedInt,     BT LongUnsignedInt,     BT LongUnsignedInt,     BT LongUnsignedInt,     BT LongUnsignedInt,
+		/*    LUI */     BT LongUnsignedInt,     BT LongUnsignedInt,     BT LongUnsignedInt,     BT LongUnsignedInt,     BT LongUnsignedInt,     BT LongUnsignedInt,
 				       BT LongUnsignedInt,     BT LongUnsignedInt,     BT LongUnsignedInt,     BT LongUnsignedInt,   BT LongLongSignedInt, BT LongLongUnsignedInt,
 				          BT SignedInt128,      BT UnsignedInt128,            BT uFloat16,     BT uFloat16Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -270,5 +270,5 @@
 				  },
 				  {
-		/*   LLI */   BT LongLongSignedInt,   BT LongLongSignedInt,   BT LongLongSignedInt,   BT LongLongSignedInt,   BT LongLongSignedInt,   BT LongLongSignedInt,
+		/*    LLI */   BT LongLongSignedInt,   BT LongLongSignedInt,   BT LongLongSignedInt,   BT LongLongSignedInt,   BT LongLongSignedInt,   BT LongLongSignedInt,
 				     BT LongLongSignedInt,   BT LongLongSignedInt,   BT LongLongSignedInt,   BT LongLongSignedInt,   BT LongLongSignedInt, BT LongLongUnsignedInt,
 				          BT SignedInt128,      BT UnsignedInt128,            BT uFloat16,     BT uFloat16Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -278,5 +278,5 @@
 				  },
 				  {
-		/*  LLUI */ BT LongLongUnsignedInt, BT LongLongUnsignedInt, BT LongLongUnsignedInt, BT LongLongUnsignedInt, BT LongLongUnsignedInt, BT LongLongUnsignedInt,
+		/*   LLUI */ BT LongLongUnsignedInt, BT LongLongUnsignedInt, BT LongLongUnsignedInt, BT LongLongUnsignedInt, BT LongLongUnsignedInt, BT LongLongUnsignedInt,
 				   BT LongLongUnsignedInt, BT LongLongUnsignedInt, BT LongLongUnsignedInt, BT LongLongUnsignedInt, BT LongLongUnsignedInt, BT LongLongUnsignedInt,
 				          BT SignedInt128,      BT UnsignedInt128,            BT uFloat16,     BT uFloat16Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -286,5 +286,5 @@
 				  },
 				  {
-		/*    IB */        BT SignedInt128,        BT SignedInt128,        BT SignedInt128,        BT SignedInt128,        BT SignedInt128,        BT SignedInt128,
+		/*     IB */        BT SignedInt128,        BT SignedInt128,        BT SignedInt128,        BT SignedInt128,        BT SignedInt128,        BT SignedInt128,
 				          BT SignedInt128,        BT SignedInt128,        BT SignedInt128,        BT SignedInt128,        BT SignedInt128,        BT SignedInt128,
 				          BT SignedInt128,      BT UnsignedInt128,            BT uFloat16,     BT uFloat16Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -294,5 +294,5 @@
 				  },
 				  {
-		/*   UIB */      BT UnsignedInt128,      BT UnsignedInt128,      BT UnsignedInt128,      BT UnsignedInt128,      BT UnsignedInt128,      BT UnsignedInt128,
+		/*    UIB */      BT UnsignedInt128,      BT UnsignedInt128,      BT UnsignedInt128,      BT UnsignedInt128,      BT UnsignedInt128,      BT UnsignedInt128,
 				        BT UnsignedInt128,      BT UnsignedInt128,      BT UnsignedInt128,      BT UnsignedInt128,      BT UnsignedInt128,      BT UnsignedInt128,
 				        BT UnsignedInt128,      BT UnsignedInt128,            BT uFloat16,     BT uFloat16Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -302,5 +302,5 @@
 				  },
 				  {
-		/*   _FH */            BT uFloat16,            BT uFloat16,            BT uFloat16,            BT uFloat16,            BT uFloat16,            BT uFloat16,
+		/*    _FH */            BT uFloat16,            BT uFloat16,            BT uFloat16,            BT uFloat16,            BT uFloat16,            BT uFloat16,
 				              BT uFloat16,            BT uFloat16,            BT uFloat16,            BT uFloat16,            BT uFloat16,            BT uFloat16,
 				              BT uFloat16,            BT uFloat16,            BT uFloat16,     BT uFloat16Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -310,5 +310,5 @@
 				  },
 				  {
-		/*   _FH */     BT uFloat16Complex,     BT uFloat16Complex,     BT uFloat16Complex,     BT uFloat16Complex,     BT uFloat16Complex,     BT uFloat16Complex,
+		/*    _FH */     BT uFloat16Complex,     BT uFloat16Complex,     BT uFloat16Complex,     BT uFloat16Complex,     BT uFloat16Complex,     BT uFloat16Complex,
 				       BT uFloat16Complex,     BT uFloat16Complex,     BT uFloat16Complex,     BT uFloat16Complex,     BT uFloat16Complex,     BT uFloat16Complex,
 				       BT uFloat16Complex,     BT uFloat16Complex,     BT uFloat16Complex,     BT uFloat16Complex,     BT uFloat32Complex,     BT uFloat32Complex,
@@ -318,5 +318,5 @@
 				  },
 				  {
-		/*    _F */            BT uFloat32,            BT uFloat32,            BT uFloat32,            BT uFloat32,            BT uFloat32,            BT uFloat32,
+		/*     _F */            BT uFloat32,            BT uFloat32,            BT uFloat32,            BT uFloat32,            BT uFloat32,            BT uFloat32,
 				              BT uFloat32,            BT uFloat32,            BT uFloat32,            BT uFloat32,            BT uFloat32,            BT uFloat32,
 				              BT uFloat32,            BT uFloat32,            BT uFloat32,     BT uFloat32Complex,            BT uFloat32,     BT uFloat32Complex,
@@ -326,5 +326,5 @@
 				  },
 				  {
-		/*   _FC */     BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,
+		/*    _FC */     BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,
 				       BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,
 				       BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,     BT uFloat32Complex,
@@ -334,5 +334,5 @@
 				  },
 				  {
-		/*     F */               BT Float,               BT Float,               BT Float,               BT Float,               BT Float,               BT Float,
+		/*      F */               BT Float,               BT Float,               BT Float,               BT Float,               BT Float,               BT Float,
 				                 BT Float,               BT Float,               BT Float,               BT Float,               BT Float,               BT Float,
 				                 BT Float,               BT Float,               BT Float,        BT FloatComplex,               BT Float,        BT FloatComplex,
@@ -342,5 +342,5 @@
 				  },
 				  {
-		/*    FC */        BT FloatComplex,        BT FloatComplex,        BT FloatComplex,        BT FloatComplex,        BT FloatComplex,        BT FloatComplex,
+		/*     FC */        BT FloatComplex,        BT FloatComplex,        BT FloatComplex,        BT FloatComplex,        BT FloatComplex,        BT FloatComplex,
 				          BT FloatComplex,        BT FloatComplex,        BT FloatComplex,        BT FloatComplex,        BT FloatComplex,        BT FloatComplex,
 				          BT FloatComplex,        BT FloatComplex,        BT FloatComplex,        BT FloatComplex,        BT FloatComplex,        BT FloatComplex,
@@ -350,5 +350,5 @@
 				  },
 				  {
-		/*   _FX */           BT uFloat32x,           BT uFloat32x,           BT uFloat32x,           BT uFloat32x,           BT uFloat32x,           BT uFloat32x,
+		/*    _FX */           BT uFloat32x,           BT uFloat32x,           BT uFloat32x,           BT uFloat32x,           BT uFloat32x,           BT uFloat32x,
 				             BT uFloat32x,           BT uFloat32x,           BT uFloat32x,           BT uFloat32x,           BT uFloat32x,           BT uFloat32x,
 				             BT uFloat32x,           BT uFloat32x,           BT uFloat32x,    BT uFloat32xComplex,           BT uFloat32x,    BT uFloat32xComplex,
@@ -358,5 +358,5 @@
 				  },
 				  {
-		/*  _FXC */    BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,
+		/*   _FXC */    BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,
 				      BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,
 				      BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,    BT uFloat32xComplex,
@@ -366,5 +366,5 @@
 				  },
 				  {
-		/*    FD */            BT uFloat64,            BT uFloat64,            BT uFloat64,            BT uFloat64,            BT uFloat64,            BT uFloat64,
+		/*     FD */            BT uFloat64,            BT uFloat64,            BT uFloat64,            BT uFloat64,            BT uFloat64,            BT uFloat64,
 				              BT uFloat64,            BT uFloat64,            BT uFloat64,            BT uFloat64,            BT uFloat64,            BT uFloat64,
 				              BT uFloat64,            BT uFloat64,            BT uFloat64,     BT uFloat64Complex,            BT uFloat64,     BT uFloat64Complex,
@@ -374,5 +374,5 @@
 				  },
 				  {
-		/*  _FDC */     BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,
+		/*   _FDC */     BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,
 				       BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,
 				       BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,     BT uFloat64Complex,
@@ -382,5 +382,5 @@
 				  },
 				  {
-		/*     D */              BT Double,              BT Double,              BT Double,              BT Double,              BT Double,              BT Double,
+		/*      D */              BT Double,              BT Double,              BT Double,              BT Double,              BT Double,              BT Double,
 				                BT Double,              BT Double,              BT Double,              BT Double,              BT Double,              BT Double,
 				                BT Double,              BT Double,              BT Double,       BT DoubleComplex,              BT Double,       BT DoubleComplex,
@@ -390,5 +390,5 @@
 				  },
 				  {
-		/*    DC */       BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,
+		/*     DC */       BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,
 				         BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,
 				         BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,       BT DoubleComplex,
@@ -398,5 +398,5 @@
 				  },
 				  {
-		/*  F80X */           BT uFloat64x,           BT uFloat64x,           BT uFloat64x,           BT uFloat64x,           BT uFloat64x,           BT uFloat64x,
+		/*   F80X */           BT uFloat64x,           BT uFloat64x,           BT uFloat64x,           BT uFloat64x,           BT uFloat64x,           BT uFloat64x,
 				             BT uFloat64x,           BT uFloat64x,           BT uFloat64x,           BT uFloat64x,           BT uFloat64x,           BT uFloat64x,
 				             BT uFloat64x,           BT uFloat64x,           BT uFloat64x,    BT uFloat64xComplex,           BT uFloat64x,    BT uFloat64xComplex,
@@ -406,5 +406,5 @@
 				  },
 				  {
-		/* _FDXC */    BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,
+		/*  _FDXC */    BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,
 				      BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,
 				      BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,    BT uFloat64xComplex,
@@ -414,5 +414,5 @@
 				  },
 				  {
-		/*   F80*/           BT uuFloat80,           BT uuFloat80,           BT uuFloat80,           BT uuFloat80,           BT uuFloat80,           BT uuFloat80,
+		/*    F80 */           BT uuFloat80,           BT uuFloat80,           BT uuFloat80,           BT uuFloat80,           BT uuFloat80,           BT uuFloat80,
 				             BT uuFloat80,           BT uuFloat80,           BT uuFloat80,           BT uuFloat80,           BT uuFloat80,           BT uuFloat80,
 				             BT uuFloat80,           BT uuFloat80,           BT uuFloat80,    BT uFloat64xComplex,           BT uuFloat80,    BT uFloat64xComplex,
@@ -422,5 +422,5 @@
 				  },
 				  {
-		/*   _FB */           BT uFloat128,           BT uFloat128,           BT uFloat128,           BT uFloat128,           BT uFloat128,           BT uFloat128,
+		/*    _FB */           BT uFloat128,           BT uFloat128,           BT uFloat128,           BT uFloat128,           BT uFloat128,           BT uFloat128,
 				             BT uFloat128,           BT uFloat128,           BT uFloat128,           BT uFloat128,           BT uFloat128,           BT uFloat128,
 				             BT uFloat128,           BT uFloat128,           BT uFloat128,    BT uFloat128Complex,           BT uFloat128,    BT uFloat128Complex,
@@ -430,5 +430,5 @@
 				  },
 				  {
-		/* _FLDC */    BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,
+		/*  _FLDC */    BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,
 				      BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,
 				      BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,    BT uFloat128Complex,
@@ -438,5 +438,5 @@
 				  },
 				  {
-		/*    FB */          BT uuFloat128,          BT uuFloat128,          BT uuFloat128,          BT uuFloat128,          BT uuFloat128,          BT uuFloat128,
+		/*     FB */          BT uuFloat128,          BT uuFloat128,          BT uuFloat128,          BT uuFloat128,          BT uuFloat128,          BT uuFloat128,
 				            BT uuFloat128,          BT uuFloat128,          BT uuFloat128,          BT uuFloat128,          BT uuFloat128,          BT uuFloat128,
 				            BT uuFloat128,          BT uuFloat128,          BT uuFloat128,    BT uFloat128Complex,          BT uuFloat128,    BT uFloat128Complex,
@@ -446,5 +446,5 @@
 				  },
 				  {
-		/*    LD */          BT LongDouble,          BT LongDouble,          BT LongDouble,          BT LongDouble,          BT LongDouble,          BT LongDouble,
+		/*     LD */          BT LongDouble,          BT LongDouble,          BT LongDouble,          BT LongDouble,          BT LongDouble,          BT LongDouble,
 				            BT LongDouble,          BT LongDouble,          BT LongDouble,          BT LongDouble,          BT LongDouble,          BT LongDouble,
 				            BT LongDouble,          BT LongDouble,          BT LongDouble,   BT LongDoubleComplex,          BT LongDouble,   BT LongDoubleComplex,
@@ -454,5 +454,5 @@
 				  },
 				  {
-		/*   LDC */   BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,
+		/*    LDC */   BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,
 				     BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,
 				     BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,   BT LongDoubleComplex,
@@ -462,5 +462,5 @@
 				  },
 				  {
-		/*  _FBX */          BT uFloat128x,          BT uFloat128x,          BT uFloat128x,          BT uFloat128x,          BT uFloat128x,          BT uFloat128x,
+		/*   _FBX */          BT uFloat128x,          BT uFloat128x,          BT uFloat128x,          BT uFloat128x,          BT uFloat128x,          BT uFloat128x,
 				            BT uFloat128x,          BT uFloat128x,          BT uFloat128x,          BT uFloat128x,          BT uFloat128x,          BT uFloat128x,
 				            BT uFloat128x,          BT uFloat128x,          BT uFloat128x,   BT uFloat128xComplex,          BT uFloat128x,   BT uFloat128xComplex,
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/ResolvExpr/ConversionCost.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -98,5 +98,5 @@
 	}
 
-	Cost convertToReferenceCost( const Type * src, const Type * dest, int diff, const SymTab::Indexer & indexer, const TypeEnvironment & env, PtrsFunction func ) {
+	static Cost convertToReferenceCost( const Type * src, const Type * dest, int diff, const SymTab::Indexer & indexer, const TypeEnvironment & env, PtrsFunction func ) {
 		PRINT( std::cerr << "convert to reference cost... diff " << diff << " " << src << " / " << dest << std::endl; )
 		if ( diff > 0 ) {
@@ -217,40 +217,40 @@
 	// GENERATED BY BasicTypes-gen.cc
 	static const int costMatrix[BasicType::NUMBER_OF_BASIC_TYPES][BasicType::NUMBER_OF_BASIC_TYPES] = { // path length from root to node
-		/*             B    C   SC   UC   SI  SUI    I   UI   LI  LUI  LLI LLUI   IB  UIB  _FH  _FH   _F  _FC    F   FC  _FX _FXC   FD _FDC    D   DC F80X_FDXC  F80  _FB_FLDC   FB   LD  LDC _FBX_FLDXC */
-		/*     B */ {   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  14,  15,  15,  16,  17,  16,  18,  17, },
-		/*     C */ {  -1,   0,   1,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  14,  15,  16,  15,  17,  16, },
-		/*    SC */ {  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  14,  15,  16,  15,  17,  16, },
-		/*    UC */ {  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  14,  15,  16,  15,  17,  16, },
-		/*    SI */ {  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  15,  14,  16,  15, },
-		/*   SUI */ {  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  15,  14,  16,  15, },
-		/*     I */ {  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  14,  13,  15,  14, },
-		/*    UI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  14,  13,  15,  14, },
-		/*    LI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  13,  12,  14,  13, },
-		/*   LUI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  13,  12,  14,  13, },
-		/*   LLI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  12,  11,  13,  12, },
-		/*  LLUI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  12,  11,  13,  12, },
-		/*    IB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  11,  10,  12,  11, },
-		/*   UIB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  11,  10,  12,  11, },
-		/*   _FH */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,  10,   9,  11,  10, },
-		/*   _FH */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,   2,  -1,   3,  -1,   4,  -1,   5,  -1,   6,  -1,  -1,   7,  -1,  -1,   8,  -1,   9, },
-		/*    _F */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   9,   8,  10,   9, },
-		/*   _FC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,   2,  -1,   3,  -1,   4,  -1,   5,  -1,  -1,   6,  -1,  -1,   7,  -1,   8, },
-		/*     F */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   8,   7,   9,   8, },
-		/*    FC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,   2,  -1,   3,  -1,   4,  -1,  -1,   5,  -1,  -1,   6,  -1,   7, },
-		/*   _FX */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   7,   6,   8,   7, },
-		/*  _FXC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,   2,  -1,   3,  -1,  -1,   4,  -1,  -1,   5,  -1,   6, },
-		/*    FD */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   6,   5,   7,   6, },
-		/*  _FDC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,   2,  -1,  -1,   3,  -1,  -1,   4,  -1,   5, },
-		/*     D */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   5,   4,   6,   5, },
-		/*    DC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,  -1,   2,  -1,  -1,   3,  -1,   4, },
-		/*  F80X */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   4,   3,   5,   4, },
-		/* _FDXC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,   1,  -1,  -1,   2,  -1,   3, },
-		/*   F80*/ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   1,   0,   1,   2,   2,   3,   3,   4,   4, },
-		/*   _FB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3, },
-		/* _FLDC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,   1,  -1,   2, },
-		/*    FB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   1,   0,   1,   2,   2,   3, },
-		/*    LD */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2, },
-		/*   LDC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1, },
-		/*  _FBX */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1, },
+		/*               B    C   SC   UC   SI  SUI    I   UI   LI  LUI  LLI LLUI   IB  UIB  _FH  _FH   _F  _FC    F   FC  _FX _FXC   FD _FDC    D   DC F80X_FDXC  F80  _FB_FLDC   FB   LD  LDC _FBX_FLDXC */
+		/*      B */ {   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  14,  15,  15,  16,  17,  16,  18,  17, },
+		/*      C */ {  -1,   0,   1,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  14,  15,  16,  15,  17,  16, },
+		/*     SC */ {  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  14,  15,  16,  15,  17,  16, },
+		/*     UC */ {  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  14,  15,  16,  15,  17,  16, },
+		/*     SI */ {  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  15,  14,  16,  15, },
+		/*    SUI */ {  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  15,  14,  16,  15, },
+		/*      I */ {  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  14,  13,  15,  14, },
+		/*     UI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  14,  13,  15,  14, },
+		/*     LI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  13,  12,  14,  13, },
+		/*    LUI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  13,  12,  14,  13, },
+		/*    LLI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  12,  11,  13,  12, },
+		/*   LLUI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  12,  11,  13,  12, },
+		/*     IB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  11,  10,  12,  11, },
+		/*    UIB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  11,  10,  12,  11, },
+		/*    _FH */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,  10,   9,  11,  10, },
+		/*    _FH */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,   2,  -1,   3,  -1,   4,  -1,   5,  -1,   6,  -1,  -1,   7,  -1,  -1,   8,  -1,   9, },
+		/*     _F */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   9,   8,  10,   9, },
+		/*    _FC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,   2,  -1,   3,  -1,   4,  -1,   5,  -1,  -1,   6,  -1,  -1,   7,  -1,   8, },
+		/*      F */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   8,   7,   9,   8, },
+		/*     FC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,   2,  -1,   3,  -1,   4,  -1,  -1,   5,  -1,  -1,   6,  -1,   7, },
+		/*    _FX */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   7,   6,   8,   7, },
+		/*   _FXC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,   2,  -1,   3,  -1,  -1,   4,  -1,  -1,   5,  -1,   6, },
+		/*     FD */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   6,   5,   7,   6, },
+		/*   _FDC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,   2,  -1,  -1,   3,  -1,  -1,   4,  -1,   5, },
+		/*      D */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   5,   4,   6,   5, },
+		/*     DC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,  -1,   2,  -1,  -1,   3,  -1,   4, },
+		/*   F80X */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   4,   3,   5,   4, },
+		/*  _FDXC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,   1,  -1,  -1,   2,  -1,   3, },
+		/*    F80 */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   1,   0,   1,   2,   2,   3,   3,   4,   4, },
+		/*    _FB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3, },
+		/*  _FLDC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,   1,  -1,   2, },
+		/*     FB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   1,   0,   1,   2,   2,   3, },
+		/*     LD */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2, },
+		/*    LDC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1, },
+		/*   _FBX */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1, },
 		/* _FLDXC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0, },
 	}; // costMatrix
@@ -265,40 +265,40 @@
 	// GENERATED BY BasicTypes-gen.cc
 	static const int signMatrix[BasicType::NUMBER_OF_BASIC_TYPES][BasicType::NUMBER_OF_BASIC_TYPES] = { // number of sign changes in safe conversion
-		/*             B    C   SC   UC   SI  SUI    I   UI   LI  LUI  LLI LLUI   IB  UIB  _FH  _FH   _F  _FC    F   FC  _FX _FXC   FD _FDC    D   DC F80X_FDXC  F80  _FB_FLDC   FB   LD  LDC _FBX_FLDXC */
-		/*     B */ {   0,   0,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*     C */ {  -1,   0,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*    SC */ {  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*    UC */ {  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*    SI */ {  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*   SUI */ {  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*     I */ {  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*    UI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*    LI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*   LUI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*   LLI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*  LLUI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*    IB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*   UIB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*   _FH */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*   _FH */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
-		/*    _F */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*   _FC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
-		/*     F */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*    FC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
-		/*   _FX */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*  _FXC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
-		/*    FD */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*  _FDC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
-		/*     D */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*    DC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
-		/*  F80X */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/* _FDXC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
-		/*   F80*/ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
-		/*   _FB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0, },
-		/* _FLDC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
-		/*    FB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0, },
-		/*    LD */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0, },
-		/*   LDC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0, },
-		/*  _FBX */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0, },
+		/*               B    C   SC   UC   SI  SUI    I   UI   LI  LUI  LLI LLUI   IB  UIB  _FH  _FH   _F  _FC    F   FC  _FX _FXC   FD _FDC    D   DC F80X_FDXC  F80  _FB_FLDC   FB   LD  LDC _FBX_FLDXC */
+		/*      B */ {   0,   0,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*      C */ {  -1,   0,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*     SC */ {  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*     UC */ {  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*     SI */ {  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*    SUI */ {  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*      I */ {  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*     UI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*     LI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*    LUI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*    LLI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*   LLUI */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*     IB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*    UIB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*    _FH */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*    _FH */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
+		/*     _F */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*    _FC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
+		/*      F */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*     FC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
+		/*    _FX */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*   _FXC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
+		/*     FD */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*   _FDC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
+		/*      D */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*     DC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
+		/*   F80X */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*  _FDXC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
+		/*    F80 */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0, },
+		/*    _FB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0, },
+		/*  _FLDC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, },
+		/*     FB */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0, },
+		/*     LD */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0, },
+		/*    LDC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0, },
+		/*   _FBX */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0, },
 		/* _FLDXC */ {  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0, },
 	}; // signMatrix
@@ -534,6 +534,6 @@
 }
 
-Cost convertToReferenceCost( const ast::Type * src, const ast::Type * dst, int diff,
-		const ast::SymbolTable & symtab, const ast::TypeEnvironment & env,
+static Cost convertToReferenceCost( const ast::Type * src, const ast::Type * dst,
+		int diff, const ast::SymbolTable & symtab, const ast::TypeEnvironment & env,
 		NumCostCalculation func ) {
 	if ( 0 < diff ) {
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/SymTab/Validate.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 21:50:04 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Aug 28 13:47:23 2017
-// Update Count     : 359
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Aug  7 6:42:00 2019
+// Update Count     : 360
 //
 
@@ -81,4 +81,5 @@
 #include "SynTree/Label.h"             // for operator==, Label
 #include "SynTree/Mutator.h"           // for Mutator
+#include "SynTree/TopLvalue.h"         // for assertTopLvalue, clearInnerLvalue
 #include "SynTree/Type.h"              // for Type, TypeInstType, EnumInstType
 #include "SynTree/TypeSubstitution.h"  // for TypeSubstitution
@@ -308,4 +309,5 @@
 		PassVisitor<FixQualifiedTypes> fixQual;
 
+		assertTopLvalue( translationUnit );
 		{
 			Stats::Heap::newPass("validate-A");
@@ -316,20 +318,27 @@
 			acceptAll( translationUnit, epc ); // must happen before VerifyCtorDtorAssign, because void return objects should not exist; before LinkReferenceToTypes_old because it is an indexer and needs correct types for mangling
 		}
+		assertTopLvalue( translationUnit );
 		{
 			Stats::Heap::newPass("validate-B");
 			Stats::Time::BlockGuard guard("validate-B");
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Link Reference To Types", [&]() {
 				acceptAll( translationUnit, lrt ); // must happen before autogen, because sized flag needs to propagate to generated functions
 			});
+			clearInnerLvalue( translationUnit );
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Fix Qualified Types", [&]() {
 				mutateAll( translationUnit, fixQual ); // must happen after LinkReferenceToTypes_old, because aggregate members are accessed
 			});
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Hoist Structs", [&]() {
 				HoistStruct::hoistStruct( translationUnit ); // must happen after EliminateTypedef, so that aggregate typedefs occur in the correct order
 			});
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Eliminate Typedefs", [&]() {
 				EliminateTypedef::eliminateTypedef( translationUnit ); //
 			});
 		}
+		assertTopLvalue( translationUnit );
 		{
 			Stats::Heap::newPass("validate-C");
@@ -340,55 +349,77 @@
 			InitTweak::fixReturnStatements( translationUnit ); // must happen before autogen
 		}
+		assertTopLvalue( translationUnit );
 		{
 			Stats::Heap::newPass("validate-D");
 			Stats::Time::BlockGuard guard("validate-D");
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Apply Concurrent Keywords", [&]() {
 				Concurrency::applyKeywords( translationUnit );
 			});
+			clearInnerLvalue( translationUnit );
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Forall Pointer Decay", [&]() {
 				acceptAll( translationUnit, fpd ); // must happen before autogenerateRoutines, after Concurrency::applyKeywords because uniqueIds must be set on declaration before resolution
 			});
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Hoist Control Declarations", [&]() {
 				ControlStruct::hoistControlDecls( translationUnit );  // hoist initialization out of for statements; must happen before autogenerateRoutines
 			});
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Generate Autogen routines", [&]() {
 				autogenerateRoutines( translationUnit ); // moved up, used to be below compoundLiteral - currently needs EnumAndPointerDecay_old
 			});
-		}
+			clearInnerLvalue( translationUnit );
+		}
+		assertTopLvalue( translationUnit );
 		{
 			Stats::Heap::newPass("validate-E");
 			Stats::Time::BlockGuard guard("validate-E");
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Implement Mutex Func", [&]() {
 				Concurrency::implementMutexFuncs( translationUnit );
 			});
+			clearInnerLvalue( translationUnit );
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Implement Thread Start", [&]() {
 				Concurrency::implementThreadStarter( translationUnit );
 			});
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Compound Literal", [&]() {
 				mutateAll( translationUnit, compoundliteral );
 			});
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Resolve With Expressions", [&]() {
 				ResolvExpr::resolveWithExprs( translationUnit ); // must happen before FixObjectType because user-code is resolved and may contain with variables
 			});
-		}
+			clearInnerLvalue( translationUnit );
+		}
+		assertTopLvalue( translationUnit );
 		{
 			Stats::Heap::newPass("validate-F");
 			Stats::Time::BlockGuard guard("validate-F");
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Fix Object Type", [&]() {
 				FixObjectType::fix( translationUnit );
 			});
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Array Length", [&]() {
 				ArrayLength::computeLength( translationUnit );
 			});
+			clearInnerLvalue( translationUnit );
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Find Special Declarations", [&]() {
 				Validate::findSpecialDecls( translationUnit );
 			});
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Fix Label Address", [&]() {
 				mutateAll( translationUnit, labelAddrFixer );
 			});
+			assertTopLvalue( translationUnit );
 			Stats::Time::TimeBlock("Handle Attributes", [&]() {
 				Validate::handleAttributes( translationUnit );
 			});
 		}
+		assertTopLvalue( translationUnit );
 	}
 
Index: src/SynTree/AddressExpr.cc
===================================================================
--- src/SynTree/AddressExpr.cc	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/SynTree/AddressExpr.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -42,5 +42,5 @@
 AddressExpr::AddressExpr( Expression *arg ) : Expression(), arg( arg ) {
 	if ( arg->result ) {
-		if ( arg->result->get_lvalue() ) {
+		if ( arg->get_lvalue() ) {
 			// lvalue, retains all layers of reference and gains a pointer inside the references
 			set_result( addrType( arg->result ) );
Index: src/SynTree/BasicType.cc
===================================================================
--- src/SynTree/BasicType.cc	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/SynTree/BasicType.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jan 31 21:37:36 2019
-// Update Count     : 12
+// Last Modified On : Sun Aug  4 21:07:44 2019
+// Update Count     : 13
 //
 
@@ -31,39 +31,4 @@
 bool BasicType::isInteger() const {
 	return kind <= UnsignedInt128;
-#if 0
-	switch ( kind ) {
-	  case Bool:
-	  case Char:
-	  case SignedChar:
-	  case UnsignedChar:
-	  case ShortSignedInt:
-	  case ShortUnsignedInt:
-	  case SignedInt:
-	  case UnsignedInt:
-	  case LongSignedInt:
-	  case LongUnsignedInt:
-	  case LongLongSignedInt:
-	  case LongLongUnsignedInt:
-	  case SignedInt128:
-	  case UnsignedInt128:
-		return true;
-	  case Float:
-	  case Double:
-	  case LongDouble:
-	  case FloatComplex:
-	  case DoubleComplex:
-	  case LongDoubleComplex:
-	  case FloatImaginary:
-	  case DoubleImaginary:
-	  case LongDoubleImaginary:
-	  case Float80:
-	  case Float128:
-		return false;
-	  case NUMBER_OF_BASIC_TYPES:
-		assert( false );
-	} // switch
-	assert( false );
-	return false;
-#endif
 }
 
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/SynTree/Expression.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 25 22:21:48 2019
-// Update Count     : 61
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Aug  7 17:03:00 2019
+// Update Count     : 62
 //
 
@@ -61,4 +61,8 @@
 	delete env;
 	delete result;
+}
+
+bool Expression::get_lvalue() const {
+	return result->get_lvalue();
 }
 
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/SynTree/Expression.h	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 25 22:21:44 2019
-// Update Count     : 50
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Aug  7 16:56:00 2019
+// Update Count     : 51
 //
 
@@ -71,4 +71,5 @@
 	const Type * get_result() const { return result; }
 	void set_result( Type * newValue ) { result = newValue; }
+	bool get_lvalue() const;
 
 	TypeSubstitution * get_env() const { return env; }
Index: src/SynTree/TopLvalue.cc
===================================================================
--- src/SynTree/TopLvalue.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
+++ src/SynTree/TopLvalue.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -0,0 +1,132 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// TopLvalue.cc -- Check and force that lvalue is only at the top of types.
+//
+// Author           : Andrew Beach
+// Created On       : Wed Jul 31 15:49:00 2019
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Aug  7 15:36:00 2019
+// Update Count     : 0
+//
+
+#include <iostream>
+
+#include "Common/PassVisitor.h"
+
+namespace {
+	class TopLvalue : public WithGuards {
+		bool inType = false;
+	public:
+		void previsit( const BaseSyntaxNode * ) {
+			if ( inType ) {
+				GuardValue( inType );
+				inType = false;
+			}
+		}
+
+		void previsit( const Type * type ) {
+			if ( inType ) {
+				assert( !type->get_lvalue() );
+			} else {
+				GuardValue( inType );
+				inType = true;
+			}
+		}
+
+	};
+
+	class ClearLvalue : public WithGuards {
+		bool inType = false;
+	public:
+		void previsit( BaseSyntaxNode * ) {
+			if ( inType ) {
+				GuardValue( inType );
+				inType = false;
+			}
+		}
+
+		void previsit( Type * type ) {
+			if ( !inType ) {
+				GuardValue( inType );
+				inType = true;
+			} else if ( type->get_lvalue() ) {
+				type->set_lvalue( false );
+			}
+		}
+	};
+
+	class TopLvaluePrint : public WithGuards, public WithShortCircuiting {
+		bool failed = false;
+		bool inType = false;
+		bool typeTop = false;
+	public:
+		bool failedAny = false;
+		void previsit() {
+			if ( failed ) {
+				visit_children = false;
+			} else if ( typeTop ) {
+				GuardValue( typeTop );
+				typeTop = false;
+			}
+		}
+
+		void previsit( const BaseSyntaxNode * ) {
+			previsit();
+			if ( inType ) {
+				GuardValue( inType );
+				inType = false;
+			}
+		}
+
+		void previsit( const Type * type ) {
+			previsit();
+			if ( inType ) {
+				if ( type->get_lvalue() ) {
+					failed = true;
+					failedAny = true;
+					visit_children = false;
+					std::cout << type->location << std::endl;
+				}
+				//assert( !type->get_lvalue() );
+			} else {
+				GuardValue( inType );
+				inType = true;
+				typeTop = true;
+			}
+		}
+
+		void postvisit( const Type * type ) {
+			if ( typeTop ) {
+				if ( failed ) {
+					std::cout << type->location << std::endl;
+					type->print( std::cout );
+					//assert( !failed );
+					failed = false;
+				}
+				typeTop = false;
+			}
+		}
+	};
+}
+
+void assertTopLvalue( const std::list< Declaration * > & translationUnit ) {
+	PassVisitor< TopLvaluePrint > visitor;
+	acceptAll( translationUnit, visitor );
+	assert( !visitor.pass.failedAny );
+}
+
+void clearInnerLvalue( std::list< Declaration * > & translationUnit ) {
+	PassVisitor< ClearLvalue > visitor;
+	acceptAll( translationUnit, visitor );
+}
+
+
+// Local Variables: //
+// tab-width: 4 //
+// mode: c++ //
+// compile-command: "make install" //
+// End: //
Index: src/SynTree/TopLvalue.h
===================================================================
--- src/SynTree/TopLvalue.h	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
+++ src/SynTree/TopLvalue.h	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -0,0 +1,34 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// TopLvalue.h -- Check and force that lvalue is only at the top of types.
+//
+// Author           : Andrew Beach
+// Created On       : Wed Jul 31 16:04:00 2019
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Aug  7 15:26:00 2019
+// Update Count     : 0
+//
+
+#include <list>
+class Declaration;
+
+void assertTopLvalue( const std::list< Declaration * > & translationUnit );
+/* Assert that all lvalue qualifiers are set on the top level.
+ *
+ * Does not return if the test fails.
+ */
+
+void clearInnerLvalue( std::list< Declaration * > & translationUnit );
+/* Make all types that are not at the top level rvalues (not-lvalues).
+ */
+
+// Local Variables: //
+// tab-width: 4 //
+// mode: c++ //
+// compile-command: "make install" //
+// End: //
+
Index: src/SynTree/Type.cc
===================================================================
--- src/SynTree/Type.cc	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/SynTree/Type.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Andrew Beach
-// Last Modified On : Fri Jul 12 15:48:00 2019
-// Update Count     : 44
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sun Aug  4 21:05:07 2019
+// Update Count     : 45
 //
 #include "Type.h"
@@ -24,46 +24,5 @@
 using namespace std;
 
-const char *BasicType::typeNames[] = {
-#if 0
-	"_Bool",
-	"char",
-	"signed char",
-	"unsigned char",
-	"signed short int",
-	"unsigned short int",
-	"signed int",
-	"unsigned int",
-	"signed long int",
-	"unsigned long int",
-	"signed long long int",
-	"unsigned long long int",
-	"float",
-	"double",
-	"long double",
-	"float _Complex",
-	"double _Complex",
-	"long double _Complex",
-	"float _Imaginary",
-	"double _Imaginary",
-	"long double _Imaginary",
-	"__int128",
-	"unsigned __int128",
-	"__float80",
-	"__float128",
-	"_Float16",
-	"_Float32",
-	"_Float32x",
-	"_Float64",
-	"_Float64x",
-	"_Float128",
-	"_Float128x",
-	"_Float16 _Complex",
-	"_Float32 _Complex",
-	"_Float32x _Complex",
-	"_Float64 _Complex",
-	"_Float64x _Complex",
-	"_Float128 _Complex",
-	"_Float128x _Complex",
-#endif
+const char * BasicType::typeNames[] = {
 	"_Bool",
 	"char",
@@ -107,5 +66,5 @@
 };
 static_assert(
-	sizeof(BasicType::typeNames)/sizeof(BasicType::typeNames[0]) == BasicType::NUMBER_OF_BASIC_TYPES,
+	sizeof(BasicType::typeNames) / sizeof(BasicType::typeNames[0]) == BasicType::NUMBER_OF_BASIC_TYPES,
 	"Each basic type name should have a corresponding kind enum value"
 );
@@ -152,5 +111,5 @@
 TypeSubstitution Type::genericSubstitution() const { assertf( false, "Non-aggregate type: %s", toCString( this ) ); }
 
-void Type::print( std::ostream &os, Indenter indent ) const {
+void Type::print( std::ostream & os, Indenter indent ) const {
 	if ( ! forall.empty() ) {
 		os << "forall" << std::endl;
Index: src/SynTree/module.mk
===================================================================
--- src/SynTree/module.mk	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/SynTree/module.mk	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -49,5 +49,6 @@
       SynTree/TypeSubstitution.cc \
       SynTree/Attribute.cc \
-      SynTree/DeclReplacer.cc
+      SynTree/DeclReplacer.cc \
+      SynTree/TopLvalue.cc
 
 SRC += $(SRC_SYNTREE)
Index: src/main.cc
===================================================================
--- src/main.cc	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ src/main.cc	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -59,8 +59,10 @@
 #include "ResolvExpr/Resolver.h"            // for resolve
 #include "SymTab/Validate.h"                // for validate
+#include "SynTree/TopLvalue.h"              // for assertTopLvalue, clearInn...
 #include "SynTree/Declaration.h"            // for Declaration
 #include "SynTree/Visitor.h"                // for acceptAll
 #include "Tuples/Tuples.h"                  // for expandMemberTuples, expan...
 #include "Virtual/ExpandCasts.h"            // for expandCasts
+
 
 using namespace std;
@@ -257,4 +259,8 @@
 		Stats::Time::StopBlock();
 
+		//std::cerr << "Post-Parse Check" << std::endl;
+		clearInnerLvalue( translationUnit );
+		assertTopLvalue( translationUnit );
+
 		// add the assignment statement after the initialization of a type parameter
 		PASS( "Validate", SymTab::validate( translationUnit, symtabp ) );
@@ -275,8 +281,13 @@
 		} // if
 
+		assertTopLvalue( translationUnit );
 		PASS( "Fix Labels", ControlStruct::fixLabels( translationUnit ) );
+		assertTopLvalue( translationUnit );
 		PASS( "Fix Names", CodeGen::fixNames( translationUnit ) );
+		assertTopLvalue( translationUnit );
 		PASS( "Gen Init", InitTweak::genInit( translationUnit ) );
+		assertTopLvalue( translationUnit );
 		PASS( "Expand Member Tuples" , Tuples::expandMemberTuples( translationUnit ) );
+		assertTopLvalue( translationUnit );
 		if ( libcfap ) {
 			// generate the bodies of cfa library functions
@@ -302,4 +313,6 @@
 		} // if
 
+		assertTopLvalue( translationUnit );
+
 		PASS( "Resolve", ResolvExpr::resolve( translationUnit ) );
 		if ( exprp ) {
@@ -308,6 +321,11 @@
 		} // if
 
+		clearInnerLvalue( translationUnit );
+		assertTopLvalue( translationUnit );
+
 		// fix ObjectDecl - replaces ConstructorInit nodes
 		PASS( "Fix Init", InitTweak::fix( translationUnit, buildingLibrary() ) );
+		clearInnerLvalue( translationUnit );
+		assertTopLvalue( translationUnit );
 		if ( ctorinitp ) {
 			dump ( translationUnit );
@@ -316,12 +334,19 @@
 
 		PASS( "Expand Unique Expr", Tuples::expandUniqueExpr( translationUnit ) ); // xxx - is this the right place for this? want to expand ASAP so tha, sequent passes don't need to worry about double-visiting a unique expr - needs to go after InitTweak::fix so that copy constructed return declarations are reused
+		assertTopLvalue( translationUnit );
 
 		PASS( "Translate EHM" , ControlStruct::translateEHM( translationUnit ) );
+		assertTopLvalue( translationUnit );
 
 		PASS( "Gen Waitfor" , Concurrency::generateWaitFor( translationUnit ) );
+		clearInnerLvalue( translationUnit );
+		assertTopLvalue( translationUnit );
 
 		PASS( "Convert Specializations",  GenPoly::convertSpecializations( translationUnit ) ); // needs to happen before tuple types are expanded
+		clearInnerLvalue( translationUnit );
+		assertTopLvalue( translationUnit );
 
 		PASS( "Expand Tuples", Tuples::expandTuples( translationUnit ) ); // xxx - is this the right place for this?
+		assertTopLvalue( translationUnit );
 
 		if ( tuplep ) {
@@ -331,4 +356,5 @@
 
 		PASS( "Virtual Expand Casts", Virtual::expandCasts( translationUnit ) ); // Must come after translateEHM
+		assertTopLvalue( translationUnit );
 
 		PASS( "Instantiate Generics", GenPoly::instantiateGeneric( translationUnit ) );
@@ -337,6 +363,9 @@
 			return EXIT_SUCCESS;
 		} // if
+		clearInnerLvalue( translationUnit );
+		assertTopLvalue( translationUnit );
 		PASS( "Convert L-Value", GenPoly::convertLvalue( translationUnit ) );
-
+		clearInnerLvalue( translationUnit );
+		assertTopLvalue( translationUnit );
 
 		if ( bboxp ) {
@@ -345,4 +374,6 @@
 		} // if
 		PASS( "Box", GenPoly::box( translationUnit ) );
+		clearInnerLvalue( translationUnit );
+		assertTopLvalue( translationUnit );
 
 		if ( bcodegenp ) {
@@ -356,4 +387,5 @@
 
 		CodeTools::fillLocations( translationUnit );
+		assertTopLvalue( translationUnit );
 		PASS( "Code Gen", CodeGen::generate( translationUnit, *output, ! genproto, prettycodegenp, true, linemarks ) );
 
Index: tests/.expect/gccExtensions.x64.txt
===================================================================
--- tests/.expect/gccExtensions.x64.txt	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ tests/.expect/gccExtensions.x64.txt	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -291,9 +291,26 @@
     signed int _X2m2A0A0i_2[((unsigned long int )10)][((unsigned long int )10)];
     signed int _X2m3A0A0i_2[((unsigned long int )10)][((unsigned long int )10)];
-    {
-        ((void)(_X12_retval_maini_1=0) /* ?{} */);
-    }
-
-    return _X12_retval_maini_1;
+    void _X4f128Fv_n__2(__int128 _X1in_2);
+    void _X4f128Fv_o__2(unsigned __int128 __anonymous_object0);
+    __int128 _X6i128_0n_2;
+    {
+        ((void)_X4f128Fv_n__2(_X6i128_0n_2));
+    }
+
+    unsigned __int128 _X6i128_1o_2;
+    {
+        ((void)_X4f128Fv_o__2(_X6i128_1o_2));
+    }
+
+    __int128 _X6i128_2n_2;
+    {
+        ((void)_X4f128Fv_n__2(_X6i128_2n_2));
+    }
+
+    unsigned __int128 _X6i128_3o_2;
+    {
+        ((void)_X4f128Fv_o__2(_X6i128_3o_2));
+    }
+
     {
         ((void)(_X12_retval_maini_1=0) /* ?{} */);
Index: tests/.expect/gccExtensions.x86.txt
===================================================================
--- tests/.expect/gccExtensions.x86.txt	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ tests/.expect/gccExtensions.x86.txt	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -296,9 +296,4 @@
 
     return _X12_retval_maini_1;
-    {
-        ((void)(_X12_retval_maini_1=0) /* ?{} */);
-    }
-
-    return _X12_retval_maini_1;
 }
 static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return _X4mainFi_iPPKc__1((signed int )argc, (const char **)argv); }
Index: tests/Makefile.in
===================================================================
--- tests/Makefile.in	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ tests/Makefile.in	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -235,4 +235,5 @@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
+DEMANGLER = @DEMANGLER@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
@@ -260,4 +261,5 @@
 LIBCFA_TARGET_DIRS = @LIBCFA_TARGET_DIRS@
 LIBCFA_TARGET_MAKEFILES = @LIBCFA_TARGET_MAKEFILES@
+LIBDEMANGLE = @LIBDEMANGLE@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
Index: tests/gccExtensions.cfa
===================================================================
--- tests/gccExtensions.cfa	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ tests/gccExtensions.cfa	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -10,6 +10,6 @@
 // Created On       : Sun Aug 14 17:28:17 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:54:20 2018
-// Update Count     : 11
+// Last Modified On : Mon Aug  5 18:04:37 2019
+// Update Count     : 28
 // 
 
@@ -50,9 +50,9 @@
 
   L1: L2:
-	asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5"
-			   : /* No outputs. */
-			   : "r"(src), "r"(&dst)
-			   : "r5", "memory"
-			   : L1, L2 );
+  	asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5"
+  			   : /* No outputs. */
+  			   : "r"(src), "r"(&dst)
+  			   : "r5", "memory"
+  			   : L1, L2 );
 
 	// alternative type/qualifer names
@@ -110,10 +110,24 @@
 	struct __attribute(()) s4 { int i; } x2, y2 __attribute(());
 
-	int m1 [10] __attribute(());
-	int m2 [10][10] __attribute(());
+	int m1[10] __attribute(());
+	int m2[10][10] __attribute(());
 	int __attribute(()) m3 [10][10];
 //	int ( __attribute(()) m4 [10] )[10];
 
-	return 0;
+	// int128
+
+#if defined( __SIZEOF_INT128__ )
+	void f128( __int128 i );
+	void f128( __uint128_t );
+
+	__int128 i128_0;
+	f128( i128_0 );
+	unsigned __int128 i128_1;
+	f128( i128_1 );
+	__int128_t i128_2;
+	f128( i128_2 );
+	__uint128_t i128_3;
+	f128( i128_3 );
+#endif
 }
 
Index: tests/pybin/settings.py
===================================================================
--- tests/pybin/settings.py	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ tests/pybin/settings.py	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -19,15 +19,15 @@
 class Architecture:
 	KnownArchitectures = {
-		'x64'			: 'x64',
-		'x86-64'		: 'x64',
-		'x86_64'		: 'x64',
-		'aarch64'		: 'x64',
-		'x86'			: 'x86',
+		'x64'		: 'x64',
+		'x86-64'	: 'x64',
+		'x86_64'	: 'x64',
+		'x86'		: 'x86',
+		'aarch64'	: 'arm',
 		'i386'		: 'x86',
 		'i486'		: 'x86',
 		'i686'		: 'x86',
 		'Intel 80386'	: 'x86',
-		'arm'			: 'arm',
-		'ARM'			: 'arm',
+		'arm'		: 'arm',
+		'ARM'		: 'arm',
 	}
 
Index: tools/Makefile.in
===================================================================
--- tools/Makefile.in	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ tools/Makefile.in	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -225,4 +225,5 @@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
+DEMANGLER = @DEMANGLER@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
@@ -250,4 +251,5 @@
 LIBCFA_TARGET_DIRS = @LIBCFA_TARGET_DIRS@
 LIBCFA_TARGET_MAKEFILES = @LIBCFA_TARGET_MAKEFILES@
+LIBDEMANGLE = @LIBDEMANGLE@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
Index: tools/baseline.py
===================================================================
--- tools/baseline.py	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
+++ tools/baseline.py	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -0,0 +1,45 @@
+#!/usr/bin/python3
+
+import sys
+
+import urllib.request
+import re
+import json
+
+if len(sys.argv) != 3 :
+ 	sys.exit("Expected architecture and file name as arguments")
+
+build_cache = {}
+
+def build(number):
+	if number in build_cache:
+		return build_cache[number]
+
+	url = "https://cforall.uwaterloo.ca/jenkins/job/Cforall/job/master/%s/api/json?" % number
+	f = urllib.request.urlopen(url)
+	j = json.loads(f.read().decode("utf-8"))
+	res = re.search("([^:]+):(x86|x64)", j['description'])
+
+	build_cache.update({number : (res.group(1), res.group(2))})
+	return build_cache[number]
+
+content = {}
+try:
+	with open(sys.argv[2]) as f:
+		f.readline()
+		f.readline()
+
+		for l in f:
+			data = [d.replace('"', '') for d in l.split(',')]
+			number = data[2]
+			_, arch = build(number)
+			if arch == sys.argv[1]:
+				if not data[1] in content:
+					content.update({data[1] : []})
+
+				content[data[1]].append(float(data[0]))
+except IOError as e:
+	sys.exit(e.strerror)
+
+print(','.join(content.keys()))
+print(','.join([str(sum(vals) / len(vals)) for vals in content.values()]))
Index: tools/prettyprinter/Makefile.in
===================================================================
--- tools/prettyprinter/Makefile.in	(revision cc4218fdc8c0ca1549a8cbd4549cb4c57e892d2c)
+++ tools/prettyprinter/Makefile.in	(revision b3976bffdbe2eaf5064329ae5c0c09b3c7a4bb36)
@@ -254,4 +254,5 @@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
+DEMANGLER = @DEMANGLER@
 DEPDIR = @DEPDIR@
 DLLTOOL = @DLLTOOL@
@@ -279,4 +280,5 @@
 LIBCFA_TARGET_DIRS = @LIBCFA_TARGET_DIRS@
 LIBCFA_TARGET_MAKEFILES = @LIBCFA_TARGET_MAKEFILES@
+LIBDEMANGLE = @LIBDEMANGLE@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
