From 36c49e3f258dced101949edabd72e9bc3f1dedc4 Mon Sep 17 00:00:00 2001 From: dim Date: Fri, 17 Sep 2010 15:54:40 +0000 Subject: Vendor import of clang r114020 (from the release_28 branch): http://llvm.org/svn/llvm-project/cfe/branches/release_28@114020 Approved by: rpaulo (mentor) --- test/SemaCXX/MicrosoftExtensions.cpp | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 test/SemaCXX/MicrosoftExtensions.cpp (limited to 'test/SemaCXX/MicrosoftExtensions.cpp') diff --git a/test/SemaCXX/MicrosoftExtensions.cpp b/test/SemaCXX/MicrosoftExtensions.cpp new file mode 100644 index 0000000..fb3107f --- /dev/null +++ b/test/SemaCXX/MicrosoftExtensions.cpp @@ -0,0 +1,44 @@ +// RUN: %clang_cc1 %s -fsyntax-only -verify -fms-extensions -fexceptions + + +// ::type_info is predeclared with forward class declartion +void f(const type_info &a); + +// The following three are all equivalent when ms-extensions are on +void foo() throw(int); +void foo() throw(int, long); +void foo() throw(...); +void foo(); // expected-note {{previous declaration}} + +// Only nothrow specification is treated specially. +void foo() throw(); // expected-error {{exception specification in declaration does not match previous declaration}} + +// throw(...) +void r3(); +void r3() throw(...); + +void r6() throw(...); +void r6() throw(int); // okay + +struct Base { + virtual void f2(); + virtual void f3() throw(...); +}; + +struct Derived : Base { + virtual void f2() throw(...); + virtual void f3(); +}; + +// __stdcall handling +struct M { + int __stdcall addP(); + float __stdcall subtractP(); +}; + +template void h1(T (__stdcall M::* const )()) { } + +void m1() { + h1(&M::addP); + h1(&M::subtractP); +} -- cgit v1.1