<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 25/11/14 00:52, Richard Smith wrote:<br>
    </div>
    <blockquote
cite="mid:CAOfiQqm+yNfKiM0Lfg4k0yfZ4Yg8k+wRCJZJYVaKvnoWSE9CgA@mail.gmail.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <div dir="ltr"><span style="color:rgb(0,0,0);font-family:'Courier
          New',Courier,monospace;font-size:14px;white-space:pre-wrap">+
          }
          + else if
          (!isUnresolvedExceptionSpec(FPT->getExceptionSpecType())
          &&</span>
        <div><span style="color:rgb(0,0,0);font-family:'Courier
            New',Courier,monospace;font-size:14px;white-space:pre-wrap"><br>
          </span></div>
        Per the LLVM coding style, put the close brace and the 'else' on
        the same line.
        <div><br>
          <div><span style="color:rgb(0,0,0);font-family:'Courier
              New',Courier,monospace;font-size:14px;white-space:pre-wrap">+
              isUnresolvedExceptionSpec(PrevFPT->getExceptionSpecType()))
              {
              + // Happens in cases where module A contains only a fwd
              decl and module B
              + // contains the definition.</span></div>
          <div><span style="color:rgb(0,0,0);font-family:'Courier
              New',Courier,monospace;font-size:14px;white-space:pre-wrap"><br>
            </span></div>
          There are other conditions here; I don't think this comment is
          particularly helpful. Just remove it?</div>
        <div><br>
          <div><span style="color:rgb(0,0,0);font-family:'Courier
              New',Courier,monospace;font-size:14px;white-space:pre-wrap">+
              FunctionProtoType::ExtProtoInfo EPI =
              FPT->getExtProtoInfo();
              + while (PrevFD) {
              + Reader.Context.adjustExceptionSpec(PrevFD,
              EPI.ExceptionSpec);
              + PrevFD = PrevFD->getPreviousDecl();</span></div>
          <div><span style="color:rgb(0,0,0);font-family:'Courier
              New',Courier,monospace;font-size:14px;white-space:pre-wrap"><br>
            </span></div>
          Please use a separate variable for this loop rather than
          reusing PrevFD. It's only by coincidence that this code is at
          the end of the function; it shouldn't be changing
          function-scope state like this.</div>
      </div>
    </blockquote>
    All good points, thanks!<br>
    <blockquote
cite="mid:CAOfiQqm+yNfKiM0Lfg4k0yfZ4Yg8k+wRCJZJYVaKvnoWSE9CgA@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div><br>
        </div>
        <div>It seems like it should be possible to produce a testcase
          for this. You'd need something like:</div>
        <div><br>
        </div>
        <div>A.h:</div>
        <div><br>
        </div>
        <div>struct A { A(); } b{}, c(b);  // computed exception spec
          for copy ctor and move ctor<br>
        </div>
        <div><br>
        </div>
        <div>B.h:</div>
        <div><br>
        </div>
        <div>
          <div>struct A { A(); } a{};  // EST_Unevaluated for copy ctor
            and move ctor</div>
          <div><br>
          </div>
        </div>
        <div>... then import A and B, and do something that assumes that
          every declaration has an exception specification if any
          declaration does.</div>
      </div>
    </blockquote>
    Thanks for the pointer. I managed to reproduce the behavior, i.e
    unevaluated exception spec as a first/canonical redecl (see the new
    attached patch). However this test doesn't trigger the original
    issue (and thus not testing anything :( )
    <a class="moz-txt-link-freetext" href="http://llvm.org/bugs/show_bug.cgi?id=21687">http://llvm.org/bugs/show_bug.cgi?id=21687</a><br>
    There the setup is more difficult, because I need to generate a
    unevaluated exception spec dtor as a first redecl and go through
    clang::FunctionProtoType::isNothrow to get the assertion. To make
    things worse, this base dtor must be emitted as an alias. Could you
    help me out?<br>
    Vassil<br>
    <blockquote
cite="mid:CAOfiQqm+yNfKiM0Lfg4k0yfZ4Yg8k+wRCJZJYVaKvnoWSE9CgA@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div>
            <div class="gmail_extra"><br>
              <div class="gmail_quote">On Mon, Nov 24, 2014 at 11:09 AM,
                Vassil Vassilev <span dir="ltr"><<a
                    moz-do-not-send="true"
                    href="mailto:vvasilev@cern.ch" target="_blank">vvasilev@cern.ch</a>></span>
                wrote:<br>
                <blockquote class="gmail_quote" style="margin:0px 0px
                  0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
                  <div bgcolor="#FFFFFF" text="#000000">
                    <div>Sorry for the delay. Attaching the new version.<span
                        class=""><font color="#888888"><br>
                          Vassil</font></span>
                      <div>
                        <div class="h5"><br>
                          On 14/11/14 02:47, Richard Smith wrote:<br>
                        </div>
                      </div>
                    </div>
                    <div>
                      <div class="h5">
                        <blockquote type="cite">
                          <div dir="ltr">
                            <div>+    }</div>
                            <div>+    else { //
                              FPT->getExceptionSpecType() is resolved
                              and the other is not</div>
                            <div><br>
                            </div>
                            <div>You're not checking for this condition;
                              the code here is getting run even if both
                              or neither are unresolved.</div>
                            <div><br>
                            </div>
                            <div>The patch needs rebasing (we have a new
                              helper function in ASTContext to update
                              the exception specification of a
                              declaration), but looks like the right
                              direction.</div>
                          </div>
                          <div class="gmail_extra"><br>
                            <div class="gmail_quote">On Thu, Nov 6, 2014
                              at 4:23 AM, Vassil Vassilev <span
                                dir="ltr"><<a moz-do-not-send="true"
href="mailto:vasil.georgiev.vasilev@cern.ch" target="_blank">vasil.georgiev.vasilev@cern.ch</a>></span>
                              wrote:<br>
                              <blockquote class="gmail_quote"
                                style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hi

                                Richard,<br>
                                  I am attaching the patch we discussed
                                at the dev meeting. Still haven't found
                                small reproducer...<br>
                                  The issue appears to stem from the
                                fact that module A contains only a
                                forward declaration of a function and it
                                exception spec cannot be computed. In
                                module B is the definition with computed
                                exception spec, which gets deserialized
                                after the one in module A. This patch
                                teaches the ASTDeclReader to update all
                                the exception specs of the previous
                                decls to the current one.<br>
                                <br>
                                  Could you review, please?<br>
                                Many thanks,<br>
                                Vassil</blockquote>
                            </div>
                          </div>
                        </blockquote>
                        <br>
                      </div>
                    </div>
                  </div>
                  <br>
                  _______________________________________________<br>
                  cfe-commits mailing list<br>
                  <a moz-do-not-send="true"
                    href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
                  <a moz-do-not-send="true"
                    href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits"
                    target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
                  <br>
                </blockquote>
              </div>
              <br>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    <br>
    <pre class="moz-signature" cols="72">-- 
--------------------------------------------
Q: Why is this email five sentences or less?
A: <a class="moz-txt-link-freetext" href="http://five.sentenc.es">http://five.sentenc.es</a>
</pre>
  </body>
</html>