aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CodeGenFunction.h
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2010-07-13 23:19:49 +0000
committerJohn McCall <rjmccall@apple.com>2010-07-13 23:19:49 +0000
commit3e29f96988b0438e42dba3790f61fb3df42d90cb (patch)
treec8c743e6ecec3e27d4230d9a01daaa6659b49b1e /lib/CodeGen/CodeGenFunction.h
parente39a3894513349908cdb3beba2614e53cb288e6c (diff)
Work around an obnoxious GCC warning by changing semantics in a hopefully-
harmless way. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@108295 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenFunction.h')
-rw-r--r--lib/CodeGen/CodeGenFunction.h19
1 files changed, 12 insertions, 7 deletions
diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h
index 90a5421c69..5ee3db08ee 100644
--- a/lib/CodeGen/CodeGenFunction.h
+++ b/lib/CodeGen/CodeGenFunction.h
@@ -125,18 +125,23 @@ public:
}
};
- /// A lazy cleanup. These will be allocated on the cleanup stack
- /// and so must be trivially copyable. We "enforce" this by
- /// providing no virtual destructor so that subclasses will be
- /// encouraged to contain no non-POD types.
+ /// A lazy cleanup. Subclasses must be POD-like: cleanups will
+ /// not be destructed, and they will be allocated on the cleanup
+ /// stack and freely copied and moved around.
///
/// LazyCleanup implementations should generally be declared in an
/// anonymous namespace.
class LazyCleanup {
- // Anchor the construction vtable.
- virtual void _anchor();
-
public:
+ // Anchor the construction vtable. We use the destructor because
+ // gcc gives an obnoxious warning if there are virtual methods
+ // with an accessible non-virtual destructor. Unfortunately,
+ // declaring this destructor makes it non-trivial, but there
+ // doesn't seem to be any other way around this warning.
+ //
+ // This destructor will never be called.
+ virtual ~LazyCleanup();
+
/// Emit the cleanup. For normal cleanups, this is run in the
/// same EH context as when the cleanup was pushed, i.e. the
/// immediately-enclosing context of the cleanup scope. For