Index: src/SymTab/Demangle.cc
===================================================================
--- src/SymTab/Demangle.cc	(revision 0d41b2e19de49d4b3c93a0edb0c94e41b1fa2dea)
+++ src/SymTab/Demangle.cc	(revision c649d2ca01cbdb7314ff65ad9c6c915eaf2010c5)
@@ -9,7 +9,7 @@
 // Author           : Rob Schluntz
 // Created On       : Thu Jul 19 12:52:41 2018
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jan 11 21:28:27 2021
-// Update Count     : 11
+// Last Modified By : Andrew Beach
+// Last Modified On : Mon Nov  6 15:59:00 2023
+// Update Count     : 12
 //
 
@@ -18,4 +18,5 @@
 
 #include "CodeGen/GenType.h"
+#include "CodeGen/OperatorTable.h"
 #include "Common/PassVisitor.h"
 #include "Common/utility.h"								// isPrefix
@@ -605,4 +606,6 @@
 				Type * type = nullptr;
 				if (! view.parse(name, type)) return mangleName;
+				auto info = CodeGen::operatorLookupByOutput(name);
+				if (info) name = info->inputName;
 				std::unique_ptr<Type> manager(type);
 				return genDemangleType(type, name);
Index: src/SymTab/Demangle.h
===================================================================
--- src/SymTab/Demangle.h	(revision 0d41b2e19de49d4b3c93a0edb0c94e41b1fa2dea)
+++ src/SymTab/Demangle.h	(revision c649d2ca01cbdb7314ff65ad9c6c915eaf2010c5)
@@ -10,6 +10,6 @@
 // Created On       : Fri May 13 10:11:00 2022
 // Last Modified By : Andrew Beach
-// Last Modified On : Fri May 13 10:30:00 2022
-// Update Count     : 0
+// Last Modified On : Mon Nov  6 15:48:00 2023
+// Update Count     : 1
 //
 
@@ -17,4 +17,6 @@
 
 extern "C" {
+	/// Main interface to the demangler as a utility.
+	/// Caller must free the returned string.
 	char * cforall_demangle(const char *, int);
 }
Index: src/SymTab/demangler.cc
===================================================================
--- src/SymTab/demangler.cc	(revision 0d41b2e19de49d4b3c93a0edb0c94e41b1fa2dea)
+++ src/SymTab/demangler.cc	(revision c649d2ca01cbdb7314ff65ad9c6c915eaf2010c5)
@@ -2,19 +2,24 @@
 #include <iostream>
 #include <fstream>
-using namespace std;
 
-void f(const std::string & mangleName) {
+void demangleAndPrint(const std::string & mangleName) {
 	char * demangleName = cforall_demangle(mangleName.c_str(), 0);
-	cout << mangleName << " => " << std::flush << demangleName << endl;
+	std::cout << mangleName << " => " << demangleName << std::endl;
 	free(demangleName);
 }
 
-int main() {
-	ifstream in("in-demangle.txt");
+int main(int argc, char * argv[]) {
+	char const * fileName = (1 < argc) ? argv[1] : "in-demangle.txt";
+	std::ifstream in(fileName);
+
 	std::string line;
-	while (getline(in, line)) {
-		if (line.empty()) { cout << "=================================" << endl; continue; }
-		else if (line[0] == '#') continue;
-		f(line);
+	while (std::getline(in, line)) {
+		if (line.empty()) {
+			std::cout << "=================================" << std::endl;
+		} else if (line[0] == '#') {
+			continue;
+		} else {
+			demangleAndPrint(line);
+		}
 	}
 }
Index: tests/in-demangle.txt
===================================================================
--- tests/in-demangle.txt	(revision c649d2ca01cbdb7314ff65ad9c6c915eaf2010c5)
+++ tests/in-demangle.txt	(revision c649d2ca01cbdb7314ff65ad9c6c915eaf2010c5)
@@ -0,0 +1,10 @@
+# Tests for the Demangler
+#
+# A simple unmangled name:
+main
+# Demangle the function names:
+_X4readFS8ifstream_S8ifstreamPcm__1
+_X22this_exception_contextFPS19exception_context_t___1
+_X6printfFi_PKc__1
+# Demangle an operator:
+_X19_operator_subassignFi_ii_intrinsic___1
