New version of test_implicit_interoperable_for_real_embeddable: the

variable a and b cannot be volatile, but they can be initialized from
volatile values. Again, the goal is to prevent constant propagation.
This commit is contained in:
Laurent Rineau 2011-03-02 09:59:27 +00:00
parent c35fe2fdd0
commit ab296856c7
1 changed files with 19 additions and 12 deletions

View File

@ -46,12 +46,15 @@ void test_implicit_interoperable_for_real_embeddable (CGAL::Tag_false){}
template <typename A, typename B> template <typename A, typename B>
void test_implicit_interoperable_for_real_embeddable (CGAL::Tag_true){ void test_implicit_interoperable_for_real_embeddable (CGAL::Tag_true){
// two sided test for interoperability with int // two sided test for interoperability with int
volatile A a; A a;
volatile B b; B b;
// These variables are volatile because the MSVC optimizer (at least VC9
// and VC10) has problems with the following code with /O2 and /fp:strict volatile int value_a = -5;
// (it does constant propagation but produces erroneous assembler code). volatile int value_b = -5;
// Volatile prevents the constant propagation. // MSVC optimizer (at least VC9 and VC10) has problems with the following
// code with /O2 and /fp:strict (it does constant propagation but
// produces erroneous assembler code). Using volatile variables prevents
// the constant propagation.
/* /*
int main(){ int main(){
int i = 3; int i = 3;
@ -61,8 +64,8 @@ void test_implicit_interoperable_for_real_embeddable (CGAL::Tag_true){
} }
*/ */
a = A(-5); a = A(value_a);
b = B(-2); b = B(value_b);
// a < b // a < b
assert (!(a == b)); assert (!(a == b));
assert ( (a != b)); assert ( (a != b));
@ -78,9 +81,11 @@ void test_implicit_interoperable_for_real_embeddable (CGAL::Tag_true){
assert ( (b > a)); assert ( (b > a));
assert ( (b >= a)); assert ( (b >= a));
value_a = 5;
value_b = 2;
// a > b // a > b
a = A(5); a = A(value_a);
b = B(2); b = B(value_b);
assert (!(a == b)); assert (!(a == b));
assert ( (a != b)); assert ( (a != b));
assert (!(a < b)); assert (!(a < b));
@ -96,8 +101,10 @@ void test_implicit_interoperable_for_real_embeddable (CGAL::Tag_true){
assert (!(b >= a)); assert (!(b >= a));
// a == b // a == b
a = A(3); value_a = 3;
b = B(3); value_b = 3;
a = A(value_a);
b = B(value_b);
assert ( (a == b)); assert ( (a == b));
assert (!(a != b)); assert (!(a != b));
assert (!(a < b)); assert (!(a < b));