1*af0ee617SSirraide // RUN: %clang_cc1 -ast-print -verify -triple=x86_64-pc-win32 -fms-compatibility %s -o - | FileCheck %s 2*af0ee617SSirraide // RUN: %clang_cc1 -triple=x86_64-pc-win32 -fms-compatibility -emit-pch -o %t %s 3*af0ee617SSirraide // RUN: %clang_cc1 -triple=x86_64-pc-win32 -fms-compatibility -include-pch %t -verify %s -ast-print -o - | FileCheck %s 4*af0ee617SSirraide // expected-no-diagnostics 5*af0ee617SSirraide 6*af0ee617SSirraide #ifndef HEADER 7*af0ee617SSirraide #define HEADER 8*af0ee617SSirraide 9*af0ee617SSirraide struct S { GetXS10*af0ee617SSirraide int GetX() { return 42; } 11*af0ee617SSirraide __declspec(property(get=GetX)) int x; 12*af0ee617SSirraide GetYS13*af0ee617SSirraide int GetY(int i, int j) { return i+j; } 14*af0ee617SSirraide __declspec(property(get=GetY)) int y[]; 15*af0ee617SSirraide 16*af0ee617SSirraide void* operator new(__SIZE_TYPE__, int); 17*af0ee617SSirraide }; 18*af0ee617SSirraide 19*af0ee617SSirraide template <typename T> 20*af0ee617SSirraide struct TS { GetTTS21*af0ee617SSirraide T GetT() { return T(); } 22*af0ee617SSirraide __declspec(property(get=GetT)) T t; 23*af0ee617SSirraide GetRTS24*af0ee617SSirraide T GetR(T i, T j) { return i+j; } 25*af0ee617SSirraide __declspec(property(get=GetR)) T r[]; 26*af0ee617SSirraide }; 27*af0ee617SSirraide main(int argc,char ** argv)28*af0ee617SSirraideint main(int argc, char **argv) { 29*af0ee617SSirraide // CHECK: S *s; 30*af0ee617SSirraide // CHECK-NEXT: new (s->x) S; 31*af0ee617SSirraide // CHECK-NEXT: new ((s->y)[1][2]) S; 32*af0ee617SSirraide S *s; 33*af0ee617SSirraide new (s->x) S; 34*af0ee617SSirraide new ((s->y)[1][2]) S; 35*af0ee617SSirraide 36*af0ee617SSirraide // CHECK-NEXT: TS<double> *ts; 37*af0ee617SSirraide // CHECK-NEXT: new (ts->t) S; 38*af0ee617SSirraide // CHECK-NEXT: new ((ts->r)[1][2]) S; 39*af0ee617SSirraide TS<double> *ts; 40*af0ee617SSirraide new (ts->t) S; 41*af0ee617SSirraide new ((ts->r)[1][2]) S; 42*af0ee617SSirraide } 43*af0ee617SSirraide 44*af0ee617SSirraide #endif 45