From 8e39f76b10abc906284ddb51185313ad0e0e535b Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Thu, 10 Oct 2019 12:43:12 +0200 Subject: [PATCH 1/4] work around slice_test compiler bug --- test/core/slice/slice_test.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/core/slice/slice_test.cc b/test/core/slice/slice_test.cc index fedda5f493f..08ed389265a 100644 --- a/test/core/slice/slice_test.cc +++ b/test/core/slice/slice_test.cc @@ -243,7 +243,13 @@ static void test_slice_interning(void) { grpc_init(); grpc_slice src1 = grpc_slice_from_copied_string("hello123456789123456789"); grpc_slice src2 = grpc_slice_from_copied_string("hello123456789123456789"); + + // Do not remove the log line. It actually supresses a compiler bug in windows + // bazel opt build. See https://github.com/grpc/grpc/issues/20519 + gpr_log(GPR_DEBUG, "src1 start ptr: %p, src2 start ptr: %p", + GRPC_SLICE_START_PTR(src1), GRPC_SLICE_START_PTR(src2)); GPR_ASSERT(GRPC_SLICE_START_PTR(src1) != GRPC_SLICE_START_PTR(src2)); + grpc_slice interned1 = grpc_slice_intern(src1); grpc_slice interned2 = grpc_slice_intern(src2); GPR_ASSERT(GRPC_SLICE_START_PTR(interned1) == From 932ce81228bab2eb879b18ae61452c2830e977d8 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Thu, 10 Oct 2019 12:43:12 +0200 Subject: [PATCH 2/4] workaround_slice_test_compiler_bug --- test/core/slice/slice_test.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/core/slice/slice_test.cc b/test/core/slice/slice_test.cc index 08ed389265a..b4a2a2a63d5 100644 --- a/test/core/slice/slice_test.cc +++ b/test/core/slice/slice_test.cc @@ -244,10 +244,9 @@ static void test_slice_interning(void) { grpc_slice src1 = grpc_slice_from_copied_string("hello123456789123456789"); grpc_slice src2 = grpc_slice_from_copied_string("hello123456789123456789"); - // Do not remove the log line. It actually supresses a compiler bug in windows + // Do not remote the log line. It actually supresses a compiler bug in windows // bazel opt build. See https://github.com/grpc/grpc/issues/20519 - gpr_log(GPR_DEBUG, "src1 start ptr: %p, src2 start ptr: %p", - GRPC_SLICE_START_PTR(src1), GRPC_SLICE_START_PTR(src2)); + gpr_log(GPR_DEBUG, "src1 start ptr: %p, src2 start ptr: %p", GRPC_SLICE_START_PTR(src1), GRPC_SLICE_START_PTR(src2)); GPR_ASSERT(GRPC_SLICE_START_PTR(src1) != GRPC_SLICE_START_PTR(src2)); grpc_slice interned1 = grpc_slice_intern(src1); From 260dc18f47b748d8e1d9d15ed5b1f6cc51b6476d Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Tue, 15 Oct 2019 15:56:37 +0200 Subject: [PATCH 3/4] a cleaner workaround --- test/core/slice/slice_test.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/test/core/slice/slice_test.cc b/test/core/slice/slice_test.cc index b4a2a2a63d5..e451f85ab4a 100644 --- a/test/core/slice/slice_test.cc +++ b/test/core/slice/slice_test.cc @@ -241,12 +241,13 @@ static void test_slice_interning(void) { LOG_TEST_NAME("test_slice_interning"); grpc_init(); - grpc_slice src1 = grpc_slice_from_copied_string("hello123456789123456789"); - grpc_slice src2 = grpc_slice_from_copied_string("hello123456789123456789"); + grpc_slice src1 = grpc_slice_from_copied_string("hello1234567891234567891"); + grpc_slice src2 = grpc_slice_from_copied_string("hello1234567891234567891"); - // Do not remote the log line. It actually supresses a compiler bug in windows - // bazel opt build. See https://github.com/grpc/grpc/issues/20519 - gpr_log(GPR_DEBUG, "src1 start ptr: %p, src2 start ptr: %p", GRPC_SLICE_START_PTR(src1), GRPC_SLICE_START_PTR(src2)); + // make sure slices are refcounted to guarantee slices' start ptrs are + // distinct (even on windows opt 64bit build). + // See https://github.com/grpc/grpc/issues/20519 + GPR_ASSERT(src1.refcount); GPR_ASSERT(GRPC_SLICE_START_PTR(src1) != GRPC_SLICE_START_PTR(src2)); grpc_slice interned1 = grpc_slice_intern(src1); From 18fb48de597e01a2566f94150f3a9439f5473654 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Tue, 15 Oct 2019 21:12:14 +0200 Subject: [PATCH 4/4] use even better workaround --- test/core/slice/slice_test.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/core/slice/slice_test.cc b/test/core/slice/slice_test.cc index e451f85ab4a..92ff8d768c4 100644 --- a/test/core/slice/slice_test.cc +++ b/test/core/slice/slice_test.cc @@ -241,13 +241,13 @@ static void test_slice_interning(void) { LOG_TEST_NAME("test_slice_interning"); grpc_init(); - grpc_slice src1 = grpc_slice_from_copied_string("hello1234567891234567891"); - grpc_slice src2 = grpc_slice_from_copied_string("hello1234567891234567891"); + grpc_slice src1 = grpc_slice_from_copied_string("hello123456789123456789"); + grpc_slice src2 = grpc_slice_from_copied_string("hello123456789123456789"); - // make sure slices are refcounted to guarantee slices' start ptrs are - // distinct (even on windows opt 64bit build). + // Explicitly checking that the slices are at different addresses prevents + // failure with windows opt 64bit build. // See https://github.com/grpc/grpc/issues/20519 - GPR_ASSERT(src1.refcount); + GPR_ASSERT(&src1 != &src2); GPR_ASSERT(GRPC_SLICE_START_PTR(src1) != GRPC_SLICE_START_PTR(src2)); grpc_slice interned1 = grpc_slice_intern(src1);