<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 03/18/2013 03:42 PM, Rafael
      EspĂ­ndola wrote:<br>
    </div>
    <blockquote
cite="mid:CAG3jReLDvkNvCo5T6RZgvGzwnPWtMDBYazABdnUXELs4yEHCmw@mail.gmail.com"
      type="cite">
      <blockquote type="cite">
        <pre wrap="">This code works around what appears to be a bug in another part of clang.
I have filed <a class="moz-txt-link-freetext" href="http://llvm.org/bugs/show_bug.cgi?id=15538">http://llvm.org/bugs/show_bug.cgi?id=15538</a> against clang.
This code is safer anyway because "cast" assumes you really know that
it's okay to make the cast. In this case isa should not be false and
dyn_cast should not return null as far as I understand. But everything
else is valid so I did not want to revert my previous patch for attributes
mips16/nomips16 or use an llvm_unreachable here which would make a number
of our tests fail for mips.
</pre>
      </blockquote>
      <pre wrap="">
I don't think this is a reasonable change. If there is a bug somewhere
else, it should be fixed. This change just hides it. It doesn't even
include a testcase. Please revert. If some other patch caused problem,
revert it too.

Cheers,
Rafael
</pre>
    </blockquote>
    Hi Rafael,<br>
    <br>
    I don't think I should have to revert this patch.<br>
    <br>
    I'm not even sure if there is another bug.<br>
    <br>
    I don't know the code that is calling this. It's just my opinion
    that there is some other issue.<br>
    <br>
    The other code is this .cpp is doing the same casting that I was
    doing; that is where I got the code from. Originally I copied
    exactly what the x86 was doing but on checkin was told to change it
    to it's current form by Bill Wendling. This current form already
    appears exactly as my code does for some other targets so they have
    the same problem potentially.<br>
    <br>
    Everything works for mips now.<br>
    <br>
    Someone that knows clang can explain how FD is a function
    declaration but GV is not a Function.<br>
    Why is that my responsibility to sort that out?<br>
    <br>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <pre style="white-space: pre-wrap; color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">                            CodeGen::CodeGenModule &CGM) const {
     const FunctionDecl *FD = dyn_cast<FunctionDecl>(D);
     if (!FD) return;
-    llvm::Function *Fn = cast<llvm::Function>(GV);
+    llvm::Function *Fn = dyn_cast<llvm::Function>(GV);
+    if (!Fn) return; // should not happen
     if (FD->hasAttr<Mips16Attr>()) {
       Fn->addFnAttr("mips16");

This code is need for the mips test-suite to not regress and for my attribute work to continue.

Reed

</pre>
    <br>
  </body>
</html>