diff options
Diffstat (limited to 'llvm/lib/AsmParser')
| -rw-r--r-- | llvm/lib/AsmParser/llvmAsmParser.y | 9 | 
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/AsmParser/llvmAsmParser.y b/llvm/lib/AsmParser/llvmAsmParser.y index f59475cd130..46dd988bd34 100644 --- a/llvm/lib/AsmParser/llvmAsmParser.y +++ b/llvm/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;    }  | 

