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