]> granicus.if.org Git - clang/commitdiff
This code works around what appears to be a bug in another part of clang.
authorReed Kotler <rkotler@mips.com>
Mon, 18 Mar 2013 22:18:00 +0000 (22:18 +0000)
committerReed Kotler <rkotler@mips.com>
Mon, 18 Mar 2013 22:18:00 +0000 (22:18 +0000)
I have filed http://llvm.org/bugs/show_bug.cgi?id=15538 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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177329 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/TargetInfo.cpp

index 556999f61b3ea100d9e9ca493177d65951e13b08..193121b2deb15cd214f64af92f8b90a1451c8456 100644 (file)
@@ -4323,7 +4323,8 @@ public:
                            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");
     }