diff --git a/lib/AsmParser/Lexer.l b/lib/AsmParser/Lexer.l index 7a56fcc8964..e124d24c141 100644 --- a/lib/AsmParser/Lexer.l +++ b/lib/AsmParser/Lexer.l @@ -174,6 +174,7 @@ appending { return APPENDING; } uninitialized { return EXTERNAL; } /* Deprecated, turn into external */ external { return EXTERNAL; } implementation { return IMPLEMENTATION; } +zeroinitializer { return ZEROINITIALIZER; } \.\.\. { return DOTDOTDOT; } null { return NULL_TOK; } to { return TO; } diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y index ca5b48d01fb..233d9ea6baa 100644 --- a/lib/AsmParser/llvmAsmParser.y +++ b/lib/AsmParser/llvmAsmParser.y @@ -702,7 +702,8 @@ Module *RunVMAsmParser(const std::string &Filename, FILE *F) { %type OptVAR_ID OptAssign FuncName -%token IMPLEMENTATION TRUE FALSE BEGINTOK ENDTOK DECLARE GLOBAL CONSTANT +%token IMPLEMENTATION ZEROINITIALIZER TRUE FALSE BEGINTOK ENDTOK +%token DECLARE GLOBAL CONSTANT %token TO EXCEPT DOTDOTDOT NULL_TOK CONST INTERNAL LINKONCE APPENDING %token OPAQUE NOT EXTERNAL TARGET ENDIAN POINTERSIZE LITTLE BIG @@ -1039,6 +1040,10 @@ ConstVal: Types '[' ConstVector ']' { // Nonempty unsized arr ThrowException("Mismatched types for constant expression!"); $$ = $2; delete $1; + } + | Types ZEROINITIALIZER { + $$ = Constant::getNullValue($1->get()); + delete $1; }; ConstVal : SIntType EINT64VAL { // integral constants