Make the ll parser check that arguments have valid types.
authorEli Friedman <eli.friedman@gmail.com>
Sat, 24 Jul 2010 23:00:26 +0000 (23:00 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Sat, 24 Jul 2010 23:00:26 +0000 (23:00 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109361 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AsmParser/LLParser.cpp

index 61b1ae5e97cc91a17d0a944518e569c50bef3129..19e51e32cb9905d3cc161419a4e767e78bff5c18 100644 (file)
@@ -3710,8 +3710,12 @@ bool LLParser::ParseCall(Instruction *&Inst, PerFunctionState &PFS,
       !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
     // Pull out the types of all of the arguments...
     std::vector<const Type*> ParamTypes;
-    for (unsigned i = 0, e = ArgList.size(); i != e; ++i)
+    for (unsigned i = 0, e = ArgList.size(); i != e; ++i) {
+      const Type* ArgTy = ArgList[i].V->getType();
+      if (!FunctionType::isValidArgumentType(ArgTy))
+        return Error(ArgList[i].Loc, "Invalid argument type for LLVM function");
       ParamTypes.push_back(ArgList[i].V->getType());
+    }
 
     if (!FunctionType::isValidReturnType(RetType))
       return Error(RetTypeLoc, "Invalid result type for LLVM function");