From 506313c1cd76b512e04e66054861b57f5db46414 Mon Sep 17 00:00:00 2001 From: Teresa Johnson Date: Wed, 1 May 2019 16:26:59 +0000 Subject: [PATCH] [ThinLTO] Fix unreachable code when parsing summary entries. Summary: Early returns were causing some code to be skipped. This was missed since the summary entries are typically at the end of the llvm assembly file. Fixes PR41663. Reviewers: RKSimon, wristow Subscribers: mehdi_amini, inglorion, eraman, steven_wu, dexonsmith, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D61355 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@359697 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AsmParser/LLParser.cpp | 14 +++++++++----- test/Assembler/thinlto-summary.ll | 4 ++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index f14ef36afb0..ebb174d39c6 100644 --- a/lib/AsmParser/LLParser.cpp +++ b/lib/AsmParser/LLParser.cpp @@ -821,19 +821,23 @@ bool LLParser::ParseSummaryEntry() { if (!Index) return SkipModuleSummaryEntry(); + bool result = false; switch (Lex.getKind()) { case lltok::kw_gv: - return ParseGVEntry(SummaryID); + result = ParseGVEntry(SummaryID); + break; case lltok::kw_module: - return ParseModuleEntry(SummaryID); + result = ParseModuleEntry(SummaryID); + break; case lltok::kw_typeid: - return ParseTypeIdEntry(SummaryID); + result = ParseTypeIdEntry(SummaryID); break; default: - return Error(Lex.getLoc(), "unexpected summary kind"); + result = Error(Lex.getLoc(), "unexpected summary kind"); + break; } Lex.setIgnoreColonInIdentifiers(false); - return false; + return result; } static bool isValidVisibilityForLinkage(unsigned V, unsigned L) { diff --git a/test/Assembler/thinlto-summary.ll b/test/Assembler/thinlto-summary.ll index 4d1c0dd74d2..fd64172208d 100644 --- a/test/Assembler/thinlto-summary.ll +++ b/test/Assembler/thinlto-summary.ll @@ -94,3 +94,7 @@ ; CHECK: ^26 = typeid: (name: "_ZTS1A", summary: (typeTestRes: (kind: allOnes, sizeM1BitWidth: 7), wpdResolutions: ((offset: 0, wpdRes: (kind: branchFunnel)), (offset: 8, wpdRes: (kind: singleImpl, singleImplName: "_ZN1A1nEi")), (offset: 16, wpdRes: (kind: indir, resByArg: (args: (1, 2), byArg: (kind: indir, byte: 2, bit: 3), args: (3), byArg: (kind: uniformRetVal, info: 1), args: (4), byArg: (kind: uniqueRetVal, info: 1), args: (5), byArg: (kind: virtualConstProp))))))) ; guid = 7004155349499253778 ; CHECK: ^27 = typeid: (name: "_ZTS1D", summary: (typeTestRes: (kind: byteArray, sizeM1BitWidth: 0))) ; guid = 9614786172484273522 ; CHECK: ^28 = typeid: (name: "_ZTS1E", summary: (typeTestRes: (kind: unsat, sizeM1BitWidth: 0))) ; guid = 17437243864166745132 + +; Make sure parsing of a non-summary entry containing a ":" does not fail +; after summary parsing, which handles colons differently. +!0 = !DIFile(filename: "thinlto-summary.ll", directory: "", source: "") -- 2.40.0