From: Hans Wennborg Date: Fri, 19 Dec 2014 23:35:11 +0000 (+0000) Subject: Tweak the assert in ModuleBuilder from r224533 (PR21989) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=59265c5c860e55bfe9a4ea1e9281266797845207;p=clang 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 --- 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.