brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 139e864 Raw
76 lines · cpp
1// RUN: %clang_cc1 -std=c++11 -verify %s -Wno-tautological-compare2 3struct A { operator decltype(nullptr)(); };4struct B { operator int A::*(); };5void f(A a, B b, int A::*pi) {6  (void)(a == a);7  (void)(a != a);8  (void)(a < a); // expected-error {{invalid operands}}9  (void)(a > a); // expected-error {{invalid operands}}10  (void)(a <= a); // expected-error {{invalid operands}}11  (void)(a >= a); // expected-error {{invalid operands}}12 13  (void)(a == b);14  (void)(a != b);15  (void)(a < b); // expected-error {{invalid operands}}16  (void)(a > b); // expected-error {{invalid operands}}17  (void)(a <= b); // expected-error {{invalid operands}}18  (void)(a >= b); // expected-error {{invalid operands}}19 20  (void)(b == a);21  (void)(b != a);22  (void)(b < a); // expected-error {{invalid operands}}23  (void)(b > a); // expected-error {{invalid operands}}24  (void)(b <= a); // expected-error {{invalid operands}}25  (void)(b >= a); // expected-error {{invalid operands}}26 27  (void)(a == pi);28  (void)(a != pi);29  (void)(a < pi); // expected-error {{invalid operands}}30  (void)(a > pi); // expected-error {{invalid operands}}31  (void)(a <= pi); // expected-error {{invalid operands}}32  (void)(a >= pi); // expected-error {{invalid operands}}33 34  (void)(pi == a);35  (void)(pi != a);36  (void)(pi < a); // expected-error {{invalid operands}}37  (void)(pi > a); // expected-error {{invalid operands}}38  (void)(pi <= a); // expected-error {{invalid operands}}39  (void)(pi >= a); // expected-error {{invalid operands}}40 41  (void)(b == pi);42  (void)(b != pi);43  (void)(b < pi); // expected-error {{invalid operands}}44  (void)(b > pi); // expected-error {{invalid operands}}45  (void)(b <= pi); // expected-error {{invalid operands}}46  (void)(b >= pi); // expected-error {{invalid operands}}47 48  (void)(pi == b);49  (void)(pi != b);50  (void)(pi < b); // expected-error {{invalid operands}}51  (void)(pi > b); // expected-error {{invalid operands}}52  (void)(pi <= b); // expected-error {{invalid operands}}53  (void)(pi >= b); // expected-error {{invalid operands}}54 55  (void)(b == b);56  (void)(b != b);57  (void)(b < b); // expected-error {{invalid operands}}58  (void)(b > b); // expected-error {{invalid operands}}59  (void)(b <= b); // expected-error {{invalid operands}}60  (void)(b >= b); // expected-error {{invalid operands}}61 62  (void)(pi == pi);63  (void)(pi != pi);64  (void)(pi < pi); // expected-error {{invalid operands}}65  (void)(pi > pi); // expected-error {{invalid operands}}66  (void)(pi <= pi); // expected-error {{invalid operands}}67  (void)(pi >= pi); // expected-error {{invalid operands}}68}69 70// FIXME: This is wrong: type T = 'const volatile int * const A::* const B::*'71// would work here, and there exists a builtin candidate for that type.72struct C { operator const int *A::*B::*(); };73void g(C c, volatile int *A::*B::*p) {74  (void)(c == p); // expected-error {{invalid operands}}75}76