<div dir="auto">Let's go ahead and revert in the meantime, can totally reapply later. </div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Aug 24, 2022, 5:37 PM Matthias Braun via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">MatzeB added a comment.<br>
<br>
Hey, I started hitting assertions when creating assembly and subsequently assembling things. In my case I am building the llvm-test-suite with `-save-temps=obj` but I can reproduce with something smaller/simpler:<br>
<br>
  struct C {<br>
    C(int x) { a = x; }<br>
    int a;<br>
  };<br>
  inline C& getNullInstance() {<br>
    static C instance(42);<br>
    return instance;<br>
  }<br>
  void* used = (void*)getNullInstance;<br>
<br>
<br>
<br>
  $ CLANG=~/local/llvm-builds/e41dd0205242/bin/clang<br>
  $ $CLANG -S repro.cpp && $CLANG -c repro.s<br>
  # no error<br>
<br>
  $ CLANG=~/local/llvm-builds/73a9dfcee24d/bin/clang<br>
  $ $CLANG -S repro.cpp && $CLANG -c repro.s<br>
  clang: /tmp/tmpssp98atc/llvm-project/llvm/lib/MC/MCAssembler.cpp:767: void llvm::MCAssembler::writeSectionData(llvm::raw_ostream &, const llvm::MCSection *, const llvm::MCAsmLayout &) const: Assertion `(cast<MCAlignFragment>(F).getValueSize() == 0 || cast<MCAlignFragment>(F).getValue() == 0) && "Invalid align in virtual section!"' failed.<br>
  PLEASE submit a bug report to <a href="https://github.com/llvm/llvm-project/issues/" rel="noreferrer noreferrer" target="_blank">https://github.com/llvm/llvm-project/issues/</a> and include the crash backtrace, preprocessed source, and associated run script.<br>
  Stack dump:<br>
  0.      Program arguments: /home/matthiasb/local/llvm-builds/73a9dfcee24d/bin/clang -c repro.s<br>
   #0 0x0000000001d15c23 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/matthiasb/local/llvm-builds/73a9dfcee24d/bin/clang+0x1d15c23)<br>
   #1 0x0000000001d13a5e llvm::sys::RunSignalHandlers() (/home/matthiasb/local/llvm-builds/73a9dfcee24d/bin/clang+0x1d13a5e)<br>
   #2 0x0000000001d1502d llvm::sys::CleanupOnSignal(unsigned long) (/home/matthiasb/local/llvm-builds/73a9dfcee24d/bin/clang+0x1d1502d)<br>
   #3 0x0000000001c8a2de (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) CrashRecoveryContext.cpp:0:0<br>
   #4 0x0000000001c8a530 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0<br>
   #5 0x00007f919418dce0 __restore_rt (/lib64/libpthread.so.0+0x12ce0)<br>
   #6 0x00007f9192eb0a9f raise (/lib64/libc.so.6+0x4ea9f)<br>
   #7 0x00007f9192e83e05 abort (/lib64/libc.so.6+0x21e05)<br>
   #8 0x00007f9192e83cd9 _nl_load_domain.cold.0 (/lib64/libc.so.6+0x21cd9)<br>
   #9 0x00007f9192ea93f6 (/lib64/libc.so.6+0x473f6)<br>
  #10 0x000000000195b462 llvm::MCAssembler::writeSectionData(llvm::raw_ostream&, llvm::MCSection const*, llvm::MCAsmLayout const&) const (/home/matthiasb/local/llvm-builds/73a9dfcee24d/bin/clang+0x195b462)<br>
  #11 0x00000000019e0c0a (anonymous namespace)::ELFWriter::writeObject(llvm::MCAssembler&, llvm::MCAsmLayout const&) ELFObjectWriter.cpp:0:0<br>
  #12 0x00000000019df1f5 (anonymous namespace)::ELFSingleObjectWriter::writeObject(llvm::MCAssembler&, llvm::MCAsmLayout const&) ELFObjectWriter.cpp:0:0<br>
  #13 0x000000000195c4a6 llvm::MCAssembler::Finish() (/home/matthiasb/local/llvm-builds/73a9dfcee24d/bin/clang+0x195c4a6)<br>
  #14 0x000000000197ba46 llvm::MCELFStreamer::finishImpl() (/home/matthiasb/local/llvm-builds/73a9dfcee24d/bin/clang+0x197ba46)<br>
  #15 0x00000000019e86d1 (anonymous namespace)::AsmParser::Run(bool, bool) AsmParser.cpp:0:0<br>
  #16 0x00000000009e2244 cc1as_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/matthiasb/local/llvm-builds/73a9dfcee24d/bin/clang+0x9e2244)<br>
  #17 0x00000000009dc4c6 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0<br>
  #18 0x0000000002586082 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_1>(long) Job.cpp:0:0<br>
  #19 0x0000000001c8a159 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/home/matthiasb/local/llvm-builds/73a9dfcee24d/bin/clang+0x1c8a159)<br>
  #20 0x0000000002585ad0 clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/home/matthiasb/local/llvm-builds/73a9dfcee24d/bin/clang+0x2585ad0)<br>
  #21 0x00000000025457e8 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/home/matthiasb/local/llvm-builds/73a9dfcee24d/bin/clang+0x25457e8)<br>
  #22 0x0000000002545aee clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/home/matthiasb/local/llvm-builds/73a9dfcee24d/bin/clang+0x2545aee)<br>
  #23 0x00000000025656d0 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/home/matthiasb/local/llvm-builds/73a9dfcee24d/bin/clang+0x25656d0)<br>
  #24 0x00000000009db8d1 clang_main(int, char**) (/home/matthiasb/local/llvm-builds/73a9dfcee24d/bin/clang+0x9db8d1)<br>
  #25 0x00007f9192e9ccf3 __libc_start_main (/lib64/libc.so.6+0x3acf3)<br>
  #26 0x00000000009d8cfe _start (/home/matthiasb/local/llvm-builds/73a9dfcee24d/bin/clang+0x9d8cfe)<br>
<br>
Looking at the assembly files with this diff we start emitting `.p2align        2, 0x90` instead of just `.p2align        3` for some weak-symbol things. This subsequently triggers the compiler assertion.<br>
<br>
Once I generated the "bad" assembly it hits an assert even in clang/llvm versions before this change...<br>
<br>
<br>
Repository:<br>
  rG LLVM Github Monorepo<br>
<br>
CHANGES SINCE LAST ACTION<br>
  <a href="https://reviews.llvm.org/D131270/new/" rel="noreferrer noreferrer" target="_blank">https://reviews.llvm.org/D131270/new/</a><br>
<br>
<a href="https://reviews.llvm.org/D131270" rel="noreferrer noreferrer" target="_blank">https://reviews.llvm.org/D131270</a><br>
<br>
</blockquote></div>