aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Lenharth <andrewl@lenharth.org>2005-06-19 03:53:56 +0000
committerAndrew Lenharth <andrewl@lenharth.org>2005-06-19 03:53:56 +0000
commite78f50deea1d1fea9b122ebe5e68ab5fbe7bb173 (patch)
tree78df0794dd1b27130813a17b3b3dd765237d2fa3
parent825e6f4d9bfaacdb006876fa1a3a250a0b026a6a (diff)
add a check for the mixing of vaarg and vanext with va_arg
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22260 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/AsmParser/llvmAsmParser.y9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y
index f59475cd13..46dd988bd3 100644
--- a/lib/AsmParser/llvmAsmParser.y
+++ b/lib/AsmParser/llvmAsmParser.y
@@ -48,6 +48,7 @@ static Module *ParserResult;
#define YYERROR_VERBOSE 1
static bool ObsoleteVarArgs;
+static bool NewVarArgs;
static BasicBlock* CurBB;
@@ -728,6 +729,7 @@ static PATypeHolder HandleUpRefs(const Type *ty) {
llvmAsmlineno = 1; // Reset the current line number...
ObsoleteVarArgs = false;
+ NewVarArgs = false;
CurModule.CurrentModule = M;
yyparse(); // Parse the file, potentially throwing exception
@@ -735,6 +737,12 @@ static PATypeHolder HandleUpRefs(const Type *ty) {
Module *Result = ParserResult;
ParserResult = 0;
+ if (ObsoleteVarArgs && NewVarArgs)
+ {
+ std::cerr << "This file is corrupt in that it uses both new and old style varargs\n";
+ abort();
+ }
+
if(ObsoleteVarArgs) {
if(Function* F = Result->getNamedFunction("llvm.va_start")) {
assert(F->arg_size() == 0 && "Obsolete va_start takes 0 argument!");
@@ -2041,6 +2049,7 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef {
$$ = new SelectInst($2, $4, $6);
}
| VAARG ResolvedVal ',' Types {
+ NewVarArgs = true;
$$ = new VAArgInst($2, *$4);
delete $4;
}