diff options
author | Hans Wennborg <hans@hanshq.net> | 2014-12-19 23:35:11 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2014-12-19 23:35:11 +0000 |
commit | 0c0a8c868ca59d4f8a13edf29beea593fca2ff4f (patch) | |
tree | 5d1b6a8db9230aa70ca6b65bb2ad8d855d447679 | |
parent | 013ddaf18c2d89d5a0aa39bafde0a23912e01a36 (diff) | |
download | bcm5719-llvm-0c0a8c868ca59d4f8a13edf29beea593fca2ff4f.tar.gz bcm5719-llvm-0c0a8c868ca59d4f8a13edf29beea593fca2ff4f.zip |
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.
llvm-svn: 224649
-rw-r--r-- | clang/lib/CodeGen/ModuleBuilder.cpp | 5 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/pr21989.cc | 9 |
2 files changed, 12 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/ModuleBuilder.cpp b/clang/lib/CodeGen/ModuleBuilder.cpp index bf89a2f0325..37b175f5d6d 100644 --- a/clang/lib/CodeGen/ModuleBuilder.cpp +++ b/clang/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/clang/test/CodeGenCXX/pr21989.cc b/clang/test/CodeGenCXX/pr21989.cc new file mode 100644 index 00000000000..0b9bccbe925 --- /dev/null +++ b/clang/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. |