diff --git a/oneflow/core/common/cached_object_msg_allocator.h b/oneflow/core/common/cached_object_msg_allocator.h
index 150674dad9c4a8303b740e24500f4a80d7cd65e4..af444f35a684452b1934440205048a92c3fadbeb 100644
--- a/oneflow/core/common/cached_object_msg_allocator.h
+++ b/oneflow/core/common/cached_object_msg_allocator.h
@@ -34,7 +34,7 @@ struct ObjMsgMemBlock final {
 
   template<typename Enabled = void>
   static constexpr int MemPtrOffset() {
-    return (int)(long long)&((ObjMsgMemBlock*)nullptr)->mem_ptr_[0];
+    return offsetof(ObjMsgMemBlock, mem_ptr_);
   }
 
   ObjMsgChunk* chunk_;
diff --git a/oneflow/core/common/shared_or_plain.h b/oneflow/core/common/shared_or_plain.h
index a326582368bef9cfb62ef8816049aa10b236aa6d..b76c8654aaee25875940f3988c31653000d70bdc 100644
--- a/oneflow/core/common/shared_or_plain.h
+++ b/oneflow/core/common/shared_or_plain.h
@@ -57,6 +57,7 @@ class SharedOrPlain final {
 template<typename S, typename P>
 SharedOrPlain<S, P>::SharedOrPlain(const SharedOrPlain& rhs) {
   if (rhs.IsPlain()) {
+#pragma GCC diagnostic ignored "-Wclass-memaccess"
     std::memcpy(this, &rhs, sizeof(*this));
   } else {
     shared_ptr_ = rhs.shared_ptr_;