From eddce74206328f213d83c9a76432645a7d3dbc22 Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Tue, 30 Aug 2016 14:08:32 -0400
Subject: [PATCH] MAINT-5232: Do less work inside typeid() calls.

clang gets nervous about expressions that call functions inside typeid(), even
though these particular typeid() calls are runtime expressions on runtime
values. Extract the offending calls to a previous statement.
---
 indra/llcommon/llsingleton.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/indra/llcommon/llsingleton.cpp b/indra/llcommon/llsingleton.cpp
index b78110296fa..8c8ded0e510 100644
--- a/indra/llcommon/llsingleton.cpp
+++ b/indra/llcommon/llsingleton.cpp
@@ -115,9 +115,10 @@ void LLSingletonBase::pop_initializing()
     }
     if (list.back() != this)
     {
+        LLSingletonBase* back(list.back());
         logerrs("Push/pop mismatch in stack of currently-initializing LLSingletons: ",
                 demangle(typeid(*this).name()).c_str(), "::getInstance() trying to pop ",
-                demangle(typeid(*list.back()).name()).c_str());
+                demangle(typeid(*back).name()).c_str());
     }
     // Here we're sure that list.back() == this. Whew, pop it.
     list.pop_back();
@@ -148,7 +149,8 @@ void LLSingletonBase::capture_dependency(EInitState initState)
             {
                 // 'found' is an iterator; *found is an LLSingletonBase*; **found
                 // is the actual LLSingletonBase instance.
-                out << demangle(typeid(**found).name()) << " -> ";
+                LLSingletonBase* foundp(*found);
+                out << demangle(typeid(*foundp).name()) << " -> ";
             }
             // We promise to capture dependencies from both the constructor
             // and the initSingleton() method, so an LLSingleton's instance
-- 
GitLab