Skip to content

Commit 4d6f63d

Browse files
committed
Work around a compiler segfault on SLES 15.7 aarch64
Revert "Make `Dictionary::Remove(Iterator)` return the next iterator" and change the one location that now made use of that return value to increment the iterator itself beforehand. I don't see anything that would be wrong with the previous code and I'm pretty certain this is a compiler bug. While at it, I've also removed a stray semicolon and changed the increment in the other branch to the prefix operator as the value is discarded. [35/151] Building CXX object lib/base/CMakeFiles/base.dir/base_unity.cpp.o FAILED: lib/base/CMakeFiles/base.dir/base_unity.cpp.o /usr/bin/c++ -DBOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT -DBOOST_COROUTINES_NO_DEPRECATION_WARNING -DBOOST_FILESYSTEM_NO_DEPRECATED -DOPENSSL_SUPPRESS_DEPRECATED -D_GNU_SOURCE -I/builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f -I/builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib -isystem /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/third-party/nlohmann_json -isystem /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/third-party/utf8cpp/source -isystem /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/third-party/mmatch -isystem /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/third-party/socketpair -O2 -g -Wsuggest-override -g -pthread -Winvalid-pch -O2 -g -DNDEBUG -std=c++1z -MD -MT lib/base/CMakeFiles/base.dir/base_unity.cpp.o -MF lib/base/CMakeFiles/base.dir/base_unity.cpp.o.d -o lib/base/CMakeFiles/base.dir/base_unity.cpp.o -c /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/base/base_unity.cpp In file included from /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/base/configobject.cpp:8:0, from /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/base/base_unity.cpp:9: /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/base/serializer.hpp:20:14: warning: 'virtual const char* icinga::CircularReferenceError::what() const' can be marked override [-Wsuggest-override] const char *what(void) const throw() final; ^~~~ In file included from /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/base/filelogger-ti.hpp:12:0, from /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/base/filelogger.hpp:8, from /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/base/filelogger.cpp:4, from /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/base/base_unity.cpp:25: /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/base/streamlogger.hpp:33:7: warning: 'virtual void icinga::StreamLogger::ProcessLogEntry(const icinga::LogEntry&)' can be marked override [-Wsuggest-override] void ProcessLogEntry(const LogEntry& entry) final; ^~~~~~~~~~~~~~~ /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/base/streamlogger.hpp:34:7: warning: 'virtual void icinga::StreamLogger::Flush()' can be marked override [-Wsuggest-override] void Flush() final; ^~~~~ In file included from /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/config/configitem.hpp:8:0, from /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/base/scriptutils.cpp:17, from /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/base/base_unity.cpp:56: /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/config/expression.hpp:264:19: warning: 'virtual const icinga::DebugInfo& icinga::DebuggableExpression::GetDebugInfo() const' can be marked override [-Wsuggest-override] const DebugInfo& GetDebugInfo() const final; ^~~~~~~~~~~~ In file included from /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/base/base_unity.cpp:78:0: /builds/packages/icinga2/packaging/sles/15.7/BUILD/icinga2-2.16.3+111.g8ff3d586f/lib/base/workqueue.cpp:80:1: internal compiler error: Segmentation fault } ^ Please submit a full bug report, with preprocessed source if appropriate. See <https://bugs.opensuse.org/> for instructions. This reverts commit 3cb6e5a.
1 parent 8ff3d58 commit 4d6f63d

3 files changed

Lines changed: 6 additions & 7 deletions

File tree

lib/base/dictionary.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,17 +155,16 @@ Dictionary::Iterator Dictionary::End()
155155
* Removes the item specified by the iterator from the dictionary.
156156
*
157157
* @param it The iterator.
158-
* @return an iterator to the element after the removed element.
159158
*/
160-
Dictionary::Iterator Dictionary::Remove(Dictionary::Iterator it)
159+
void Dictionary::Remove(Dictionary::Iterator it)
161160
{
162161
ASSERT(OwnsLock());
163162
std::unique_lock<std::shared_timed_mutex> lock (m_DataMutex);
164163

165164
if (m_Frozen)
166165
BOOST_THROW_EXCEPTION(std::invalid_argument("Dictionary must not be modified."));
167166

168-
return m_Data.erase(it);
167+
m_Data.erase(it);
169168
}
170169

171170
/**

lib/base/dictionary.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class Dictionary final : public Object
5656

5757
void Remove(const String& key);
5858

59-
Iterator Remove(Iterator it);
59+
void Remove(Iterator it);
6060

6161
void Clear();
6262

lib/remote/apilistener-configsync.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -580,10 +580,10 @@ void ApiListener::PruneDeletedRuntimeObjects()
580580

581581
for (auto it = deletedRuntimeObjects->Begin(); it != deletedRuntimeObjects->End();) {
582582
if (it->second < cutoff) {
583-
it = deletedRuntimeObjects->Remove(it);
583+
deletedRuntimeObjects->Remove(it++);
584584
} else {
585-
it++;
586-
};
585+
++it;
586+
}
587587
}
588588
}
589589

0 commit comments

Comments
 (0)