Subzero. Fixes valgrind errors.
Valgrind used to report errors about uninitialized variable access in
Subzero, when it was built with -O2. The problem was traced to
size_t Alignment = Var->getAlignment;
Alignment = std::max(MinAlignment, Var->getAlignment())
Apparently, the compiler will not correctly zero-extend
Var->getAlignment(), and thus Alignment's upper 32-bits would be
garbage.
BUG=
R=kschimpf@google.com, stichnot@chromium.org
Review URL: https://codereview.chromium.org/1825363003 .
diff --git a/src/IceELFObjectWriter.cpp b/src/IceELFObjectWriter.cpp
index 26e76f0..98b774b 100644
--- a/src/IceELFObjectWriter.cpp
+++ b/src/IceELFObjectWriter.cpp
@@ -388,9 +388,8 @@
// entry will be created separately.
if (!Var->hasInitializer())
continue;
- Elf64_Xword Align = Var->getAlignment();
constexpr Elf64_Xword MinAlign = 1;
- Align = std::max(Align, MinAlign);
+ const auto Align = std::max<Elf64_Xword>(MinAlign, Var->getAlignment());
Section->padToAlignment(Str, Align);
SizeT SymbolSize = Var->getNumBytes();
bool IsExternal = Var->isExternal() || Ctx.getFlags().getDisableInternal();