Hi,<br><br>As I understand it the specific issue we're seeing is related to what Martin described. But due to numerous bugs found when mixing objects compiled with different versions of MSVC in the past, we now are shy of doing it even if it seems to work superficially - that's no guarantee bugs won't be found down the line. We'd much prefer to stay within the realms of what Microsoft support. <br><br>Cheers,<br><br>James<br><div class="gmail_quote"><div dir="ltr">On Wed, 7 Sep 2016 at 20:53, Craig, Ben via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    <p>Note that this is intentional from the MSVC C++ library
      implementation side of things.  For major versions, no attempt is
      made to preserve library ABI compatibility.<br>
    </p>
    I am aware of a language ABI break in VC++ 2013. 
<a href="https://randomascii.wordpress.com/2013/12/01/vc-2013-class-layout-change-and-wasted-space/" target="_blank">https://randomascii.wordpress.com/2013/12/01/vc-2013-class-layout-change-and-wasted-space/</a><br>
    <br>
    I'm not currently aware of any on the VC++ 2015 side of things, but
    that doesn't mean much.</div><div bgcolor="#FFFFFF" text="#000000"><br>
    <br>
    <div>On 9/7/2016 2:34 PM, Martin O'Riordan
      via llvm-dev wrote:<br>
    </div>
    <blockquote type="cite">
      <div dir="ltr">
        <div class="gmail_default" style="font-family:georgia,serif;font-size:small">Apart from
          the obvious licencing issues, each time I have moved from one
          version of VC++ to another, the big problem I have had is not
          specifically the ABI at the register passing, stack
          organisation level, but rather the implementation details of
          the Standard C++ libraries, and in particular the STL
          containers.<br>
          <br>
        </div>
        <div class="gmail_default" style="font-family:georgia,serif;font-size:small">While the
          compiler team puts considerable effort into maintaining the
          ABI, the C++ library implementation usually changes a lot.<br>
          <br>
        </div>
        <div class="gmail_default" style="font-family:georgia,serif;font-size:small">Since this
          is largely in the form of very complex headers defining
          templates which in turn cause other helper templates to be
          used, it is here that I find things go awry.<br>
          <br>
        </div>
        <div class="gmail_default" style="font-family:georgia,serif;font-size:small">So for C++,
          a function like:<br>
          <br>
        </div>
        <div class="gmail_default" style="font-family:georgia,serif;font-size:small">
          <div style="margin-left:40px"><span style="font-family:monospace,monospace">std::list<int>
              foo();</span><br>
          </div>
          <br>
        </div>
        <div class="gmail_default" style="font-family:georgia,serif;font-size:small">seems simple
          enough, but if the caller and the callee are compiled with
          different versions, it usually won't work because of some
          artefact of the STL implementation tuning that occurs between
          versions.  In particular, this impacts things like using C++
          interfaces across DLLs and in pre-compiled libraries.<br>
          <br>
        </div>
        <div class="gmail_default" style="font-family:georgia,serif;font-size:small">I think that
          the ABI maintenance in this case tends to be for C and POD
          compatability, but not for the higher level C++ compatability
          which is unfortunate and restricts how we can use C++.<br>
          <br>
        </div>
        <div class="gmail_default" style="font-family:georgia,serif;font-size:small">Is it
          possible that it is this aspect of the version change that is
          causing your ABI difficulties?<br>
          <br>
        </div>
        <div class="gmail_default" style="font-family:georgia,serif;font-size:small;margin-left:40px">MartinO<br>
        </div>
        <div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br>
        </div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On 7 September 2016 at 20:18, Zachary
          Turner via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Can you
            elaborate on the abi incompatibility? I thought there were
            no breaks <br>
            <div class="gmail_quote">
              <div dir="ltr">On Wed, Sep 7, 2016 at 7:59 AM James Molloy
                via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>>
                wrote:<br>
              </div>
              <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
                <div dir="ltr">Hi all,
                  <div><br>
                  </div>
                  <div>Firstly sorry I'm a bit late responding on this
                    one. Internally to ARM we build LLVM for Windows.
                    Our current build cluster has only VS2013 installed
                    and as a result of this thread we've been working on
                    getting VS2015 installed. This involves a certain
                    amount of IT-wrangling as the cluster we use is
                    company-wide. There have been some hiccups regarding
                    licensing of MSVC professional (we can't use the
                    community edition for the same reasons mentioned by
                    Paul previously) but we hoped to be ready in time
                    for the 15th September switchover date.</div>
                  <div><br>
                  </div>
                  <div>It's recently been realised that VS2013 and
                    VS2015 are not ABI compatible (something that really
                    surprised me), and this means we have to synchronize
                    moving LLVM's build to VS2015 as well as upgrading a
                    third party library that we receive from the vendor
                    in compiled library form. This is not something
                    we're capable of doing by September 15th.</div>
                  <div><br>
                  </div>
                  <div>We try really hard at ARM to hide our internal
                    processes because we believe that they're on the
                    whole irrelevant to the community, however in this
                    case we'd be really stuck, unable to get production
                    builds.</div>
                  <div><br>
                  </div>
                  <div>As this is an ABI-incompatible upgrade, and it's
                    changing the informal policy on upgrades, could we
                    please have some more grace time? Ideally another
                    month, so the 15th October. If we haven't sorted it
                    by then, it's our problem.</div>
                  <div><br>
                  </div>
                  <div>Cheers,</div>
                  <div><br>
                  </div>
                  <div>James</div>
                </div>
                <br>
                <div class="gmail_quote">
                  <div dir="ltr">On Thu, 1 Sep 2016 at 21:06 Mehdi Amini
                    via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>>
                    wrote:<br>
                  </div>
                </div>
                <div class="gmail_quote">
                  <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
                    <div style="word-wrap:break-word">
                      <div>
                        <blockquote type="cite">
                          <div>On Sep 1, 2016, at 1:05 PM, Reid Kleckner
                            <<a href="mailto:rnk@google.com" target="_blank">rnk@google.com</a>>
                            wrote:</div>
                          <br>
                          <div>
                            <div dir="ltr">
                              <div class="gmail_extra">
                                <div class="gmail_quote">On Thu, Sep 1,
                                  2016 at 12:53 PM, Mehdi Amini via
                                  cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span>
                                  wrote:
                                  <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                    <div style="word-wrap:break-word">
                                      <div>
                                        <div>
                                          <div>Isn’t a big (the most)
                                            reason for supporting “old”
                                            toolchains to allow
                                            downstream users to upgrade
                                            with some flexibility?</div>
                                          <div>If I have a large
                                            codebase that is using LLVM
                                            (let say a few custom
                                            backends), and is validated
                                            with “MSVC 2013”, I can
                                            upgrade to “2015” but I will
                                            need some
                                            qualification/validation:
                                            this is not free and take
                                            some time. If you drop
                                            aggressively supports for
                                            “old” toolchain it means
                                            that I’m either stuck with
                                            an “old” LLVM or that I have
                                            to update earlier than
                                            expected.</div>
                                          <div><br>
                                          </div>
                                          <div>Isn’t this usually
                                            balanced in upstream LLVM to
                                            upgrade when there is a real
                                            *benefit* to it? </div>
                                          <div>I’m mentioning it because
                                            it seems to conflict with
                                            the "always upgrade to the
                                            newest one unless there are
                                            serious issues with it” you
                                            mentioned above.</div>
                                        </div>
                                      </div>
                                    </div>
                                  </blockquote>
                                  <div><br>
                                  </div>
                                  <div>I agree, we should raise the
                                    minimum VS version requirement when
                                    the benefits to the LLVM community
                                    outweigh the costs of switching for
                                    major LLVM contributors and users. I
                                    think we'll always make that
                                    decision in the same way: by raising
                                    it on the mailing lists and
                                    discussing the pros and cons. That's
                                    basically what David said when he
                                    kicked this whole discussion off,
                                    anyway:</div>
                                  <div><br>
                                  </div>
                                  <div>"""<span style="font-size:12.8px">But
                                      if we find ourselves in a
                                      situation where asking folks to
                                      upgrade to a compiler which has
                                      been widely deployed soothes
                                      development for the greater LLVM
                                      community, we should consider
                                      dropping support for the older
                                      versions of that compiler."""</span></div>
                                  <div><span style="font-size:12.8px"><br>
                                    </span></div>
                                  <div><span style="font-size:12.8px">I
                                      think everything is working as
                                      intended here.</span></div>
                                </div>
                              </div>
                            </div>
                          </div>
                        </blockquote>
                        <div><br>
                        </div>
                      </div>
                    </div>
                    <div style="word-wrap:break-word">
                      <div>
                        <div>Right, to be clear there is no
                          misunderstanding: I was absolutely not
                          suggesting the opposite when answering Zach..</div>
                        <div><br>
                        </div>
                        <div>— </div>
                      </div>
                    </div>
                    <div style="word-wrap:break-word">
                      <div>
                        <div>Mehdi</div>
                      </div>
                    </div>
                    <div style="word-wrap:break-word">
                      <div>
                        <div><br>
                        </div>
                        <br>
                        <blockquote type="cite">
                          <div>
                            <div dir="ltr">
                              <div class="gmail_extra">
                                <div class="gmail_quote">
                                  <div><span style="font-size:12.8px">
                                      We raised the VS 2013 upgrade
                                      issue, discussed it, determined
                                      that it was holding us back, and
                                      now we're doing the upgrade. If VS
                                      "15" brings major language
                                      compatibility improvements, I
                                      imagine we'll be having this same
                                      discussion again next year. If it
                                      doesn't, and supporting 2015 and
                                      "15" at the same time has the same
                                      cost, then we won't bother raising
                                      the floor for a while.</span></div>
                                </div>
                              </div>
                            </div>
                          </div>
                        </blockquote>
                      </div>
                    </div>
                    <div style="word-wrap:break-word"><br>
                    </div>
                  </blockquote>
                </div>
                <div class="gmail_quote">
                  <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">_______________________________________________<br>
                    cfe-dev mailing list<br>
                    <a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
                    <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
                  </blockquote>
                </div>
                _______________________________________________<br>
                cfe-dev mailing list<br>
                <a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
                <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
              </blockquote>
            </div>
            <br>
            _______________________________________________<br>
            LLVM Developers mailing list<br>
            <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
            <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
            <br>
          </blockquote>
        </div>
        <br>
      </div>
      <br>
      <fieldset></fieldset>
      <br>
      <pre>_______________________________________________
LLVM Developers mailing list
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
    <br>
    </div><div bgcolor="#FFFFFF" text="#000000"><pre cols="72">-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
</pre>
  </div>

_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>