diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -8040,12 +8040,10 @@ // Have a list of summaries if (ParseToken(lltok::kw_summaries, "expected 'summaries' here") || - ParseToken(lltok::colon, "expected ':' here")) + ParseToken(lltok::colon, "expected ':' here") || + ParseToken(lltok::lparen, "expected '(' here")) return true; - do { - if (ParseToken(lltok::lparen, "expected '(' here")) - return true; switch (Lex.getKind()) { case lltok::kw_function: if (ParseFunctionSummary(Name, GUID, ID)) @@ -8062,11 +8060,10 @@ default: return Error(Lex.getLoc(), "expected summary type"); } - if (ParseToken(lltok::rparen, "expected ')' here")) - return true; } while (EatIfPresent(lltok::comma)); - if (ParseToken(lltok::rparen, "expected ')' here")) + if (ParseToken(lltok::rparen, "expected ')' here") || + ParseToken(lltok::rparen, "expected ')' here")) return true; return false; diff --git a/llvm/test/Assembler/thinlto-multiple-summaries-for-guid.ll b/llvm/test/Assembler/thinlto-multiple-summaries-for-guid.ll new file mode 100644 --- /dev/null +++ b/llvm/test/Assembler/thinlto-multiple-summaries-for-guid.ll @@ -0,0 +1,12 @@ +; Checks that llvm-as/llvm-dis correctly assembles/disassembles index with +; multiple summaries with single GUID. +; RUN: llvm-as %s -o - | llvm-dis -o - | FileCheck %s + +source_filename = "index.bc" + +^0 = module: (path: "main.bc", hash: (3499594384, 1671013073, 3271036935, 1830411232, 59290952)) +; CHECK: ^0 = module: (path: "main.bc", hash: (3499594384, 1671013073, 3271036935, 1830411232, 59290952)) +^1 = module: (path: "[Regular LTO]", hash: (0, 0, 0, 0, 0)) +; CHECK-NEXT: ^1 = module: (path: "[Regular LTO]", hash: (0, 0, 0, 0, 0)) +^2 = gv: (guid: 13351721993301222997, summaries: (function: (module: ^0, flags: (linkage: linkonce_odr, notEligibleToImport: 0, live: 1, dsoLocal: 1, canAutoHide: 1), insts: 1), function: (module: ^1, flags: (linkage: available_externally, notEligibleToImport: 1, live: 1, dsoLocal: 1, canAutoHide: 0), insts: 1))) +; CHECK-NEXT: ^2 = gv: (guid: 13351721993301222997, summaries: (function: (module: ^0, flags: (linkage: linkonce_odr, notEligibleToImport: 0, live: 1, dsoLocal: 1, canAutoHide: 1), insts: 1), function: (module: ^1, flags: (linkage: available_externally, notEligibleToImport: 1, live: 1, dsoLocal: 1, canAutoHide: 0), insts: 1)))