]> granicus.if.org Git - clang/commitdiff
Tweak the assert in ModuleBuilder from r224533 (PR21989)
authorHans Wennborg <hans@hanshq.net>
Fri, 19 Dec 2014 23:35:11 +0000 (23:35 +0000)
committerHans Wennborg <hans@hanshq.net>
Fri, 19 Dec 2014 23:35:11 +0000 (23:35 +0000)
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
test/CodeGenCXX/pr21989.cc [new file with mode: 0644]

index bf89a2f0325987b88321a0ca2d62abe15ea336cb..37b175f5d6d95d775dd21eb1aa411bd74f9da9cd 100644 (file)
@@ -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 (file)
index 0000000..0b9bccb
--- /dev/null
@@ -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.