From 59265c5c860e55bfe9a4ea1e9281266797845207 Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Fri, 19 Dec 2014 23:35:11 +0000 Subject: [PATCH] Tweak the assert in ModuleBuilder from r224533 (PR21989) Turns out there will be left-over deferred inline methods if there have been errors, because in that case HandleTopLevelDecl bails out early. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224649 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/ModuleBuilder.cpp | 5 +++-- test/CodeGenCXX/pr21989.cc | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 test/CodeGenCXX/pr21989.cc diff --git a/lib/CodeGen/ModuleBuilder.cpp b/lib/CodeGen/ModuleBuilder.cpp index bf89a2f032..37b175f5d6 100644 --- a/lib/CodeGen/ModuleBuilder.cpp +++ b/lib/CodeGen/ModuleBuilder.cpp @@ -64,8 +64,9 @@ namespace { M(new llvm::Module(ModuleName, C)) {} virtual ~CodeGeneratorImpl() { - assert(DeferredInlineMethodDefinitions.empty() && - "Leftover inline method definitions!"); + // There should normally not be any leftover inline method definitions. + assert(DeferredInlineMethodDefinitions.empty() || + Diags.hasErrorOccurred()); } llvm::Module* GetModule() override { diff --git a/test/CodeGenCXX/pr21989.cc b/test/CodeGenCXX/pr21989.cc new file mode 100644 index 0000000000..0b9bccbe92 --- /dev/null +++ b/test/CodeGenCXX/pr21989.cc @@ -0,0 +1,9 @@ +// REQUIRES: asserts +// RUN: not %clang_cc1 -emit-llvm -triple %itanium_abi_triple -o - %s 2>&1 | FileCheck %s + +struct { + void __attribute__((used)) f() {} +}; +// CHECK: 2 errors generated. + +// Emit the errors, but don't assert. -- 2.40.0