diff options
author | Sebastian Redl <sebastian.redl@getdesigned.at> | 2009-04-19 21:15:26 +0000 |
---|---|---|
committer | Sebastian Redl <sebastian.redl@getdesigned.at> | 2009-04-19 21:15:26 +0000 |
commit | 9bebfadb807aba0bc272197aff1cb4b2284c00a6 (patch) | |
tree | 011bd0387fce55454ae1e0866b9e34e7a7c7aa32 /test/SemaCXX/conditional-expr.cpp | |
parent | af7cdf45da4925f788e87a4c318ee67404646088 (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.cpp | 22 |
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}} |