For PR1328:
authorReid Spencer <rspencer@reidspencer.com>
Mon, 16 Apr 2007 06:55:42 +0000 (06:55 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Mon, 16 Apr 2007 06:55:42 +0000 (06:55 +0000)
Use the new parameter on Function::getIntrinsicID to identify cases where
a function is being called with an "llvm." name but it isn't actually an
intrinsic. In such cases generate an error.

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

lib/AsmParser/llvmAsmParser.y

index 9aa81ea8dcc6c8e6ce5247b9bf56f80a13e80874..88cc7d30dde38a8e499d60d0c82f95595168e49c 100644 (file)
@@ -2821,6 +2821,14 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef {
     Value *V = getVal(PFTy, $4);   // Get the function we're calling...
     CHECK_FOR_ERROR
 
+    // Check for call to invalid intrinsic to avoid crashing later.
+    if (Function *theF = dyn_cast<Function>(V)) {
+      if (theF->hasName() && 0 == strncmp(theF->getName().c_str(), "llvm.", 5)&&
+        !theF->getIntrinsicID(true))
+        GEN_ERROR("Call to invalid LLVM intrinsic function '" +
+                  theF->getName() + "'");
+    }
+
     // Check the arguments 
     ValueList Args;
     if ($6->empty()) {                                   // Has no arguments?