--- old/src/share/vm/utilities/globalDefinitions.cpp 2020-01-27 23:21:07.000000000 -0800 +++ new/src/share/vm/utilities/globalDefinitions.cpp 2020-01-27 23:21:06.000000000 -0800 @@ -357,6 +357,30 @@ } #ifndef PRODUCT +struct T { + int val; + T(int a): val(a){} +}; + +int test_swap(){ + T a(1), b(2); + int ia, ib; + + swap(a, b); + assert(a.val == 2 && b.val == 1, "wrong result!"); + + T * pa = &a; + T * pb = &b; + swap(pa, pb); + assert(pa->val == 1 && pa == &b, "wrong result for pointer!"); + assert(pb->val == 2 && pb == &a, "wrong result for pointer!"); + assert(a.val == 2 && b.val == 1, "objects are corrupted"); + + ia = 1; + ib = 2; + swap(ia, ib); + assert(ia == 2 && ib == 1, "wrong result!"); +} void GlobalDefinitions::test_globals() { intptr_t page_sizes[] = { os::vm_page_size(), 4096, 8192, 65536, 2*1024*1024 }; @@ -382,6 +406,8 @@ assert(clamp_address_in_page(a_page - 2*page_size - 1, a_page, page_size) == a_page, "incorrect"); assert(clamp_address_in_page(a_page - 5*page_size - 1, a_page, page_size) == a_page, "incorrect"); } + + test_swap(); } #define EXPECT_EQ(expected, actual) \