diff options
Diffstat (limited to 'test/CodeGen/available-externally-hidden.cpp')
-rw-r--r-- | test/CodeGen/available-externally-hidden.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/test/CodeGen/available-externally-hidden.cpp b/test/CodeGen/available-externally-hidden.cpp new file mode 100644 index 000000000000..dc13f26b7526 --- /dev/null +++ b/test/CodeGen/available-externally-hidden.cpp @@ -0,0 +1,32 @@ +// RUN: %clang_cc1 -O2 -fvisibility hidden -std=c++11 -emit-llvm -o - -triple x86_64-apple-darwin10 %s | FileCheck %s + +// Ensure that available_externally functions eliminated at -O2 are now +// declarations, and are not emitted as hidden with -fvisibility=hidden, +// but rather with default visibility. +struct Filter { + virtual void Foo(); + int a; +}; + +class Message{}; +class Sender { + public: + virtual bool Send(Message* msg) = 0; + + protected: + virtual ~Sender() {} +}; + +// CHECK: declare zeroext i1 @_ZThn16_N17SyncMessageFilter4SendEP7Message +class SyncMessageFilter : public Filter, public Sender { + public: + bool Send(Message* message) override; +}; + +class TestSyncMessageFilter : public SyncMessageFilter { +}; + +int main() { +TestSyncMessageFilter* f = new TestSyncMessageFilter; + f->Send(new Message); +} |