summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2014-12-19 23:35:11 +0000
committerHans Wennborg <hans@hanshq.net>2014-12-19 23:35:11 +0000
commit0c0a8c868ca59d4f8a13edf29beea593fca2ff4f (patch)
tree5d1b6a8db9230aa70ca6b65bb2ad8d855d447679
parent013ddaf18c2d89d5a0aa39bafde0a23912e01a36 (diff)
downloadbcm5719-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.cpp5
-rw-r--r--clang/test/CodeGenCXX/pr21989.cc9
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.
OpenPOWER on IntegriCloud