150
|
1 // RUN: %clang_cc1 -fsyntax-only -verify -fms-extensions %s
|
|
2
|
|
3 extern "C++" struct __declspec(uuid("00000000-0000-0000-C000-000000000046")) IUnknown {
|
|
4 void foo();
|
|
5 // Definitions aren't allowed, unless they are a template.
|
|
6 template<typename T>
|
|
7 void bar(T t){}
|
|
8 };
|
|
9
|
|
10 struct IPropertyPageBase : public IUnknown {};
|
|
11 struct IPropertyPage : public IPropertyPageBase {};
|
|
12 __interface ISfFileIOPropertyPage : public IPropertyPage {};
|
|
13
|
|
14
|
|
15 namespace NS {
|
|
16 struct __declspec(uuid("00000000-0000-0000-C000-000000000046")) IUnknown {};
|
|
17 // expected-error@+1 {{interface type cannot inherit from}}
|
|
18 __interface IPropertyPageBase : public IUnknown {};
|
|
19 }
|
|
20
|
|
21 namespace NS2 {
|
|
22 extern "C++" struct __declspec(uuid("00000000-0000-0000-C000-000000000046")) IUnknown {};
|
|
23 // expected-error@+1 {{interface type cannot inherit from}}
|
|
24 __interface IPropertyPageBase : public IUnknown{};
|
|
25 }
|
|
26
|
|
27 // expected-error@+1 {{interface type cannot inherit from}}
|
|
28 __interface IPropertyPageBase2 : public NS::IUnknown {};
|
|
29
|
|
30 __interface temp_iface {};
|
|
31 struct bad_base : temp_iface {};
|
|
32 // expected-error@+1 {{interface type cannot inherit from}}
|
|
33 __interface bad_inherit : public bad_base{};
|
|
34
|
|
35 struct mult_inher_base : temp_iface, IUnknown {};
|
|
36 // expected-error@+1 {{interface type cannot inherit from}}
|
|
37 __interface bad_inherit2 : public mult_inher_base{};
|
|
38
|
|
39 struct PageBase : public IUnknown {};
|
|
40 struct Page3 : public PageBase {};
|
|
41 struct Page4 : public PageBase {};
|
|
42 __interface PropertyPage : public Page4 {};
|
|
43
|
|
44 struct Page5 : public Page3, Page4{};
|
|
45 // expected-error@+1 {{interface type cannot inherit from}}
|
|
46 __interface PropertyPage2 : public Page5 {};
|
|
47
|
|
48 __interface IF1 {};
|
|
49 __interface PP : IUnknown, IF1{};
|
|
50 __interface PP2 : PP, Page3, Page4{};
|