1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11 22ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanian 32ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanianstruct A { 42ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanian operator int&(); 5a9cca896d5f3e871d92d4448e2fe1668c43230a8Fariborz Jahanian operator long*& (); 62ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanian}; 72ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanian 82ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanianstruct B { 92ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanian operator long&(); 10a9cca896d5f3e871d92d4448e2fe1668c43230a8Fariborz Jahanian operator int*& (); 112ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanian}; 122ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanian 132ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanianstruct C : B, A { }; 142ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanian 152ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanianvoid test(C c) { 162ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanian ++c; // expected-error {{use of overloaded operator '++' is ambiguous}}\ 17866b2744ffe66294c8791cc8407b918f3bb81b2cFariborz Jahanian // expected-note {{built-in candidate operator++(int &)}} \ 18866b2744ffe66294c8791cc8407b918f3bb81b2cFariborz Jahanian // expected-note {{built-in candidate operator++(long &)}} \ 19866b2744ffe66294c8791cc8407b918f3bb81b2cFariborz Jahanian // expected-note {{built-in candidate operator++(long *&)}} \ 20866b2744ffe66294c8791cc8407b918f3bb81b2cFariborz Jahanian // expected-note {{built-in candidate operator++(int *&)}} 212ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanian} 222ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanian 23a9cca896d5f3e871d92d4448e2fe1668c43230a8Fariborz Jahanianstruct A1 { operator volatile int&(); }; 24a9cca896d5f3e871d92d4448e2fe1668c43230a8Fariborz Jahanian 25a9cca896d5f3e871d92d4448e2fe1668c43230a8Fariborz Jahanianstruct B1 { operator volatile long&(); }; 26a9cca896d5f3e871d92d4448e2fe1668c43230a8Fariborz Jahanian 27a9cca896d5f3e871d92d4448e2fe1668c43230a8Fariborz Jahanianstruct C1 : B1, A1 { }; 28a9cca896d5f3e871d92d4448e2fe1668c43230a8Fariborz Jahanian 29a9cca896d5f3e871d92d4448e2fe1668c43230a8Fariborz Jahanianvoid test(C1 c) { 30a9cca896d5f3e871d92d4448e2fe1668c43230a8Fariborz Jahanian ++c; // expected-error {{use of overloaded operator '++' is ambiguous}} \ 3158f9e13e87e57236fee4b914eea9be6f92a1c345Chris Lattner // expected-note {{built-in candidate operator++(volatile int &)}} \ 3258f9e13e87e57236fee4b914eea9be6f92a1c345Chris Lattner // expected-note {{built-in candidate operator++(volatile long &)}} 33a9cca896d5f3e871d92d4448e2fe1668c43230a8Fariborz Jahanian} 342ebe7ebb1d6149a1845dd3169009f99b78e91bc9Fariborz Jahanian 35