From 3f48ab1c0560d9a0c9401990aa4c9ddfca826d0b Mon Sep 17 00:00:00 2001
From: Andrey Lihatskiy <alihatskiy@productengine.com>
Date: Thu, 23 Jul 2020 00:46:20 +0300
Subject: [PATCH] SL-13642 Get rid of that ugly ignore -Wdelete-incomplete

Get rid of that ugly '#pragma clang diagnostic ignored "-Wdelete-incomplete"' by making sure the delete always happens inside llview.cpp, where the type of LLView is known.
---
 indra/llui/llrngwriter.cpp   |  7 -------
 indra/llui/lluictrlfactory.h | 10 ++--------
 indra/llui/llview.cpp        |  5 +++++
 3 files changed, 7 insertions(+), 15 deletions(-)

diff --git a/indra/llui/llrngwriter.cpp b/indra/llui/llrngwriter.cpp
index 80e9842a9bc..4bd15614256 100644
--- a/indra/llui/llrngwriter.cpp
+++ b/indra/llui/llrngwriter.cpp
@@ -29,14 +29,7 @@
 #include "llrngwriter.h"
 #include "lluicolor.h"
 
-#ifdef __clang__
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdelete-incomplete"
 #include "lluictrlfactory.h"
-#pragma clang diagnostic pop
-#else
-#include "lluictrlfactory.h"
-#endif
 
 #include "boost/bind.hpp"
 
diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
index 0ed7fb09b31..135ed57a4fb 100644
--- a/indra/llui/lluictrlfactory.h
+++ b/indra/llui/lluictrlfactory.h
@@ -37,6 +37,7 @@
 #include "llheteromap.h"
 
 class LLView;
+void deleteView(LLView*); // Inside LLView.cpp, avoid having to potentially delete an incomplete type here.
 
 // lookup widget constructor funcs by widget name
 template <typename DERIVED_TYPE>
@@ -174,14 +175,7 @@ class LLUICtrlFactory : public LLSingleton<LLUICtrlFactory>
 				{
 					LL_WARNS() << "Widget in " << filename << " was of type " << typeid(view).name() << " instead of expected type " << typeid(T).name() << LL_ENDL;
 
-#ifdef __clang__
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdelete-incomplete"
-					delete view;
-#pragma clang diagnostic pop
-#else
-					delete view;
-#endif
+					deleteView(view);
 					view = NULL;
 				}
 			}
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 593c8b12fc8..bd213d594a9 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -86,6 +86,11 @@ template class LLView* LLView::getChild<class LLView>(
 
 static LLDefaultChildRegistry::Register<LLView> r("view");
 
+void deleteView(LLView *aView)
+{
+	delete aView;
+}
+
 namespace LLInitParam
 {
 	void TypeValues<LLView::EOrientation>::declareValues()
-- 
GitLab