[lldb-dev] Passing std::atomics by value

Zachary Turner via lldb-dev lldb-dev at lists.llvm.org
Fri Aug 26 10:51:05 PDT 2016


I recently updated to Visual Studio 2015 Update 3, which has improved its
diagnostics.  As a result of this, LLDB is uncompilable due to a slew of
errors of the following nature:

D:\src\llvm\tools\lldb\include\lldb/Target/Process.h(3256): error C2719:
'default_stop_addr': formal parameter with requested alignment of 8 won't
be aligned

The issue comes down to the fact that lldb::Address contains a
std::atomic<uint64_t>, and is being passed by value pervasively throughout
the codebase.  There is no way to guarantee that this value is 8 byte
aligned.  This has always been a bug, but until now the compiler just
hasn't been reporting it.

Someone correct me if I'm wrong, but I believe this is a problem on any
32-bit platform, and MSVC is just the only one erroring.

I'm not really sure what to do about this.  Passing std::atomic<uint64>'s
by value seems wrong to me.

Looking at the code, I don't even know why it needs to be atomic.  It's not
even being used safely.  We'll have a single function write the value and
later read the value, even though it could have been used in the meantime.
Maybe what is really intended is a mutex.  Or maybe it doesn't need to be
atomic in the first place.

Does anyone have a suggestion on what to do about this?  I'm currently
blocked on this as I can't compile LLDB.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20160826/4cba1e36/attachment.html>


More information about the lldb-dev mailing list