Index: src/Common/SemanticError.cc
===================================================================
--- src/Common/SemanticError.cc	(revision 81bb114433843f3bc8e0db517f991b0cc892e8ca)
+++ src/Common/SemanticError.cc	(revision 6040e67da4f1afa6550d4e3339f24a66a4be8fc3)
@@ -68,10 +68,31 @@
 }
 
-void SemanticWarningImpl( CodeLocation location, Warning, const char * const fmt, ... ) {
-	va_list args;
-	va_start(args, fmt);
-	std::string msg = fmtToString( fmt, args );
-	va_end(args);
-	std::cerr << ErrorHelpers::bold() << location << ErrorHelpers::warning_str() << ErrorHelpers::reset_font() << msg << std::endl;
+void SemanticWarningImpl( CodeLocation location, Warning warning, const char * const fmt, ... ) {
+	Severity severity = WarningFormats[(int)warning].severity;
+	switch(severity) {
+	case Severity::Suppress :
+		break;
+	case Severity::Warn :
+		{
+			va_list args;
+			va_start(args, fmt);
+			std::string msg = fmtToString( fmt, args );
+			va_end(args);
+			std::cerr << ErrorHelpers::bold() << location << ErrorHelpers::warning_str() << ErrorHelpers::reset_font() << msg << std::endl;
+		}
+		break;
+	case Severity::Error :
+		{
+			va_list args;
+			va_start(args, fmt);
+			std::string msg = fmtToString( fmt, args );
+			va_end(args);
+			SemanticError(location, msg);
+		}
+		break;
+	case Severity::Critical :
+		assertf(false, "Critical errors not implemented yet");
+		break;
+	}
 }
 
Index: src/Common/SemanticError.h
===================================================================
--- src/Common/SemanticError.h	(revision 81bb114433843f3bc8e0db517f991b0cc892e8ca)
+++ src/Common/SemanticError.h	(revision 6040e67da4f1afa6550d4e3339f24a66a4be8fc3)
@@ -36,7 +36,20 @@
 // Warnings
 
-constexpr const char * const WarningFormats[] = {
-	"self assignment of expression: %s",
-	"rvalue to reference conversion of rvalue: %s",
+enum class Severity {
+	Suppress,
+	Warn,
+	Error,
+	Critical
+};
+
+struct WarningData {
+	const char * const name;
+	const char * const message;
+	mutable Severity severity;
+};
+
+constexpr const WarningData WarningFormats[] = {
+	{"self-assign"         , "self assignment of expression: %s"           , Severity::Warn},
+	{"reference-conversion", "rvalue to reference conversion of rvalue: %s", Severity::Warn},
 };
 
@@ -52,6 +65,10 @@
 );
 
+<<<<<<< Updated upstream
 // ## used here to allow empty __VA_ARGS__
 #define SemanticWarning(loc, id, ...) SemanticWarningImpl(loc, id, WarningFormats[(int)id], ## __VA_ARGS__)
+=======
+#define SemanticWarning(loc, id, ...) SemanticWarningImpl(loc, id, WarningFormats[(int)id].message, __VA_ARGS__)
+>>>>>>> Stashed changes
 
 void SemanticWarningImpl (CodeLocation loc, Warning warn, const char * const fmt, ...) __attribute__((format(printf, 3, 4)));
