aboutsummaryrefslogtreecommitdiff
path: root/test/SemaCXX/conditional-expr.cpp
diff options
context:
space:
mode:
authorSebastian Redl <sebastian.redl@getdesigned.at>2009-04-19 21:15:26 +0000
committerSebastian Redl <sebastian.redl@getdesigned.at>2009-04-19 21:15:26 +0000
commit9bebfadb807aba0bc272197aff1cb4b2284c00a6 (patch)
tree011bd0387fce55454ae1e0866b9e34e7a7c7aa32 /test/SemaCXX/conditional-expr.cpp
parentaf7cdf45da4925f788e87a4c318ee67404646088 (diff)
Bring member pointer operands of the conditional operator to a common type. We're getting there ...
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69548 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/SemaCXX/conditional-expr.cpp')
-rw-r--r--test/SemaCXX/conditional-expr.cpp22
1 files changed, 17 insertions, 5 deletions
diff --git a/test/SemaCXX/conditional-expr.cpp b/test/SemaCXX/conditional-expr.cpp
index aa71f60dc1..0366e67a1b 100644
--- a/test/SemaCXX/conditional-expr.cpp
+++ b/test/SemaCXX/conditional-expr.cpp
@@ -38,6 +38,14 @@ struct BadDerived : BadBase {};
struct Fields {
int i1, i2, b1 : 3, b2 : 3;
};
+struct MixedFields {
+ int i;
+ volatile int vi;
+ const int ci;
+ const volatile int cvi;
+};
+struct MixedFieldsDerived : MixedFields {
+};
enum Enum { EVal };
@@ -148,11 +156,15 @@ void test()
d1 = i1 ? 4.0 : 'c';
Base *pb = i1 ? (Base*)0 : (Derived*)0;
pb = i1 ? (Derived*)0 : (Base*)0;
- // FIXME: member pointer conversions don't work yet.
- //pfm = i1 ? &Base::fn1 : &Derived::fn2;
- //pfm = i1 ? &Derived::fn2 : &Base::fn1;
- //pfm = i1 ? &Derived::fn2 : 0;
- //pfm = i1 ? 0 : &Derived::fn2;
+ pfm = i1 ? &Base::fn1 : &Derived::fn2;
+ pfm = i1 ? &Derived::fn2 : &Base::fn1;
+ pfm = i1 ? &Derived::fn2 : 0;
+ pfm = i1 ? 0 : &Derived::fn2;
+ const int (MixedFieldsDerived::*mp1) =
+ i1 ? &MixedFields::ci : &MixedFieldsDerived::i;
+ const volatile int (MixedFields::*mp2) =
+ i1 ? &MixedFields::ci : &MixedFields::cvi;
+ i1 ? &MixedFields::ci : &MixedFields::vi; // expected-error {{incompatible operand types}}
// Conversion of primitives does not result in an lvalue.
&(i1 ? i1 : d1); // expected-error {{address expression must be an lvalue or a function designator}}