diff options
author | John McCall <rjmccall@apple.com> | 2010-07-13 23:19:49 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-07-13 23:19:49 +0000 |
commit | 3e29f96988b0438e42dba3790f61fb3df42d90cb (patch) | |
tree | c8c743e6ecec3e27d4230d9a01daaa6659b49b1e /lib/CodeGen/CodeGenFunction.h | |
parent | e39a3894513349908cdb3beba2614e53cb288e6c (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.h | 19 |
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 |