Index: src/SymTab/ManglerCommon.cc
===================================================================
--- src/SymTab/ManglerCommon.cc	(revision e1f7eefc84701acc2af857cd1c484e5650e81cba)
+++ src/SymTab/ManglerCommon.cc	(revision 2782f38a71eacbc10ee2e26fb9a636cb17b6ccd4)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 21:44:03 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 22 09:45:30 2017
-// Update Count     : 15
+// Last Modified On : Fri Feb  8 09:02:18 2019
+// Update Count     : 22
 //
 
@@ -22,5 +22,5 @@
 		namespace Encoding {
 			const std::string manglePrefix = "_X";
-
+#if 0
 			const std::string basicTypes[] = {
 				"b",  // Bool
@@ -43,7 +43,7 @@
 				"Ce", // LongDoubleComplex
 				// Note: imaginary is not an overloadable type in C++
-				"If", // FloatImaginary
-				"Id", // DoubleImaginary
-				"Ie", // LongDoubleImaginary
+				// "If", // FloatImaginary
+				// "Id", // DoubleImaginary
+				// "Ie", // LongDoubleImaginary
 				"n",  // SignedInt128
 				"o",  // UnsignedInt128
@@ -63,4 +63,59 @@
 				"Each basic type kind should have a corresponding mangler letter"
 			);
+#endif
+			// ****************************************************************************
+			// NOTES ON MANGLING:
+			// * Itanium spec says that Float80 encodes to "e" (like LongDouble), but the distinct lengths cause resolution problems.
+			// * Float128 is supposed to encode to "g", but I wanted it to mangle equal to LongDouble.
+			// * Mangling for non-standard complex types is by best guess
+			// * _FloatN is supposed to encode as "DF"N"_"; modified for same reason as above.
+			// * unused mangling identifiers:
+			//   - "z" ellipsis
+			//   - "Dd" IEEE 754r 64-bit decimal floating point (borrowed for _Float32x)
+			//   - "De" IEEE 754r 128-bit decimal floating point
+			//   - "Df" IEEE 754r 32-bit decimal floating point
+			//   - "Dh" IEEE 754r 16-bit decimal floating point (borrowed for _Float16)
+			//   - "DF"N"_" ISO/IEC TS 18661 N-bit binary floating point (_FloatN)
+			//   - "Di" char32_t
+			//   - "Ds" char16_t
+			// ****************************************************************************
+			const std::string basicTypes[BasicType::NUMBER_OF_BASIC_TYPES] = {
+				"b",        // _Bool
+				"c",        // Char
+				"a",        // SignedChar
+				"h",        // UnsignedChar
+				"s",        // ShortSignedInt
+				"t",        // ShortUnsignedInt
+				"i",        // SignedInt
+				"j",        // UnsignedInt
+				"l",        // LongSignedInt
+				"m",        // LongUnsignedInt
+				"x",        // LongLongSignedInt
+				"y",        // LongLongUnsignedInt
+				"n",        // SignedInt128
+				"o",        // UnsignedInt128
+				"DF16_",    // _Float16
+				"CDF16_",   // _Float16Complex
+				"DF32_",    // _Float32
+				"CDF32_",   // _Float32Complex
+				"f",        // Float
+				"Cf",       // FloatComplex
+				"DF32x_",   // _Float32x
+				"CDF32x_",  // _Float32xComplex
+				"DF64_",    // _Float64
+				"CDF64_",   // _Float64Complex
+				"d",        // Double
+				"Cd",       // DoubleComplex
+				"DF64x_",   // _Float64x
+				"CDF64x_",  // _Float64xComplex
+				"Dq",       // __float80
+				"DF128_",   // _Float128
+				"CDF128_",  // _Float128Complex
+				"g",        // __float128
+				"e",        // LongDouble
+				"Ce",       // LongDoubleComplex
+				"DF128x_",  // _Float128x
+				"CDF128x_", // _Float128xComplex
+			};
 
 			const std::map<int, std::string> qualifiers = {
