1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 2b6cc91be4da4f55c7e3dca87ecfdb532b33c83caAnders Carlssontemplate<typename> struct PassRefPtr { }; 3b6cc91be4da4f55c7e3dca87ecfdb532b33c83caAnders Carlssontemplate<typename T> struct RefPtr { 4b2b5cc0cf908d516a107d373db963f692449a8a8Chandler Carruth RefPtr& operator=(const RefPtr&) { int a[sizeof(T) ? -1 : -1];} // expected-error 2 {{array with a negative size}} 5b6cc91be4da4f55c7e3dca87ecfdb532b33c83caAnders Carlsson RefPtr& operator=(const PassRefPtr<T>&); 6b6cc91be4da4f55c7e3dca87ecfdb532b33c83caAnders Carlsson}; 7b6cc91be4da4f55c7e3dca87ecfdb532b33c83caAnders Carlsson 806a9f3680d22529a2fcf20c52d71cf221d99d910Douglas Gregorstruct A { RefPtr<int> a; }; // expected-note {{instantiation of member function 'RefPtr<int>::operator=' requested here}} 906a9f3680d22529a2fcf20c52d71cf221d99d910Douglas Gregorstruct B : RefPtr<float> { }; // expected-note {{in instantiation of member function 'RefPtr<float>::operator=' requested here}} 10b6cc91be4da4f55c7e3dca87ecfdb532b33c83caAnders Carlsson 11b6cc91be4da4f55c7e3dca87ecfdb532b33c83caAnders Carlssonvoid f() { 12b6cc91be4da4f55c7e3dca87ecfdb532b33c83caAnders Carlsson A a1, a2; 1306a9f3680d22529a2fcf20c52d71cf221d99d910Douglas Gregor a1 = a2; 14b6cc91be4da4f55c7e3dca87ecfdb532b33c83caAnders Carlsson 15b6cc91be4da4f55c7e3dca87ecfdb532b33c83caAnders Carlsson B b1, b2; 16ef8225444452a1486bd721f3285301fe84643b00Stephen Hines b1 = b2; 17b6cc91be4da4f55c7e3dca87ecfdb532b33c83caAnders Carlsson} 18