Declare empty string using struct with non-constexpr ctor

Previously, the RuntimeTest.AbortFromUnattachedThread ART test
segfaulted after upgrading libc++ because the C++17 version of this
operator used dynamic initialization for `empty` while the C++20
version used static initialization:

 * C++17: var symbol and guard symbol in .bss, init on first use
 * C++20: var symbol in .rodata

The static linker combined the .rodata var symbol with the "init on
first use" that was inlined into C++17 functions, and the first use
segfaulted while writing to .rodata.

Instead, make sure the static variable's constructor is non-constexpr,
forcing dynamic initialization.

Bug: 175635923
Bug: 330974273
Test: m test-art-host-gtest
Change-Id: I30501f036198d85ac80fc99f3ab268846f731e83
1 file changed
tree: 6b6eb081bb41fcb2569d85dbe3ebff8e152889f0
  1. libunwindstack/
  2. OWNERS
  3. PREUPLOAD.cfg