From 8e451fa7c491b87f4e757c33a666ef8b447c8d7d Mon Sep 17 00:00:00 2001 From: Jason Erb Date: Mon, 20 Sep 2021 19:48:29 -0400 Subject: [PATCH] Protobuf: Fix for C5041 for VC++ >= 15.5 (#8979) * Protobuf: Fix for C5041 for VC++ > 15.5 Introduced in 15.5: https://docs.microsoft.com/en-us/cpp/overview/cpp-conformance-improvements-2017?view=msvc-160#inline-variables 15.5 is 1912: https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=msvc-160 Issue: #8978 * Fix comment wording for #8978 --- src/google/protobuf/compiler/cpp/cpp_enum.cc | 6 ++--- .../protobuf/compiler/cpp/cpp_extension.cc | 2 +- src/google/protobuf/compiler/plugin.pb.cc | 4 ++-- src/google/protobuf/descriptor.cc | 2 +- src/google/protobuf/descriptor.pb.cc | 24 +++++++++---------- src/google/protobuf/extension_set.cc | 2 ++ src/google/protobuf/type.pb.cc | 8 +++---- src/google/protobuf/wire_format_lite.cc | 2 +- 8 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/google/protobuf/compiler/cpp/cpp_enum.cc b/src/google/protobuf/compiler/cpp/cpp_enum.cc index c9b9c20b9c..6ae5cf4250 100644 --- a/src/google/protobuf/compiler/cpp/cpp_enum.cc +++ b/src/google/protobuf/compiler/cpp/cpp_enum.cc @@ -409,10 +409,10 @@ void EnumGenerator::GenerateMethods(int idx, io::Printer* printer) { std::string parent = ClassName(descriptor_->containing_type(), false); // Before C++17, we must define the static constants which were // declared in the header, to give the linker a place to put them. - // But pre-2015 MSVC++ insists that we not. + // But MSVC++ pre-2015 and post-2017 (version 15.5+) insists that we not. format( "#if (__cplusplus < 201703) && " - "(!defined(_MSC_VER) || _MSC_VER >= 1900)\n"); + "(!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))\n"); for (int i = 0; i < descriptor_->value_count(); i++) { format("constexpr $classname$ $1$::$2$;\n", parent, @@ -428,7 +428,7 @@ void EnumGenerator::GenerateMethods(int idx, io::Printer* printer) { format( "#endif // (__cplusplus < 201703) && " - "(!defined(_MSC_VER) || _MSC_VER >= 1900)\n"); + "(!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))\n"); } } diff --git a/src/google/protobuf/compiler/cpp/cpp_extension.cc b/src/google/protobuf/compiler/cpp/cpp_extension.cc index 647528552a..8604da5f27 100644 --- a/src/google/protobuf/compiler/cpp/cpp_extension.cc +++ b/src/google/protobuf/compiler/cpp/cpp_extension.cc @@ -158,7 +158,7 @@ void ExtensionGenerator::GenerateDefinition(io::Printer* printer) { // Likewise, class members need to declare the field constant variable. if (IsScoped()) { format( - "#if !defined(_MSC_VER) || _MSC_VER >= 1900\n" + "#if !defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)\n" "const int $scope$$constant_name$;\n" "#endif\n"); } diff --git a/src/google/protobuf/compiler/plugin.pb.cc b/src/google/protobuf/compiler/plugin.pb.cc index c4849ad0f7..af2d1de5d6 100644 --- a/src/google/protobuf/compiler/plugin.pb.cc +++ b/src/google/protobuf/compiler/plugin.pb.cc @@ -207,13 +207,13 @@ bool CodeGeneratorResponse_Feature_IsValid(int value) { } } -#if (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) constexpr CodeGeneratorResponse_Feature CodeGeneratorResponse::FEATURE_NONE; constexpr CodeGeneratorResponse_Feature CodeGeneratorResponse::FEATURE_PROTO3_OPTIONAL; constexpr CodeGeneratorResponse_Feature CodeGeneratorResponse::Feature_MIN; constexpr CodeGeneratorResponse_Feature CodeGeneratorResponse::Feature_MAX; constexpr int CodeGeneratorResponse::Feature_ARRAYSIZE; -#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) // =================================================================== diff --git a/src/google/protobuf/descriptor.cc b/src/google/protobuf/descriptor.cc index 46e89871be..00e3e15c03 100644 --- a/src/google/protobuf/descriptor.cc +++ b/src/google/protobuf/descriptor.cc @@ -344,7 +344,7 @@ const char* FileDescriptor::SyntaxName(FileDescriptor::Syntax syntax) { static const char* const kNonLinkedWeakMessageReplacementName = "google.protobuf.Empty"; -#if !defined(_MSC_VER) || _MSC_VER >= 1900 +#if !defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912) const int FieldDescriptor::kMaxNumber; const int FieldDescriptor::kFirstReservedNumber; const int FieldDescriptor::kLastReservedNumber; diff --git a/src/google/protobuf/descriptor.pb.cc b/src/google/protobuf/descriptor.pb.cc index 2f7f95192e..1e6a472ea6 100644 --- a/src/google/protobuf/descriptor.pb.cc +++ b/src/google/protobuf/descriptor.pb.cc @@ -1120,7 +1120,7 @@ bool FieldDescriptorProto_Type_IsValid(int value) { } } -#if (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) constexpr FieldDescriptorProto_Type FieldDescriptorProto::TYPE_DOUBLE; constexpr FieldDescriptorProto_Type FieldDescriptorProto::TYPE_FLOAT; constexpr FieldDescriptorProto_Type FieldDescriptorProto::TYPE_INT64; @@ -1142,7 +1142,7 @@ constexpr FieldDescriptorProto_Type FieldDescriptorProto::TYPE_SINT64; constexpr FieldDescriptorProto_Type FieldDescriptorProto::Type_MIN; constexpr FieldDescriptorProto_Type FieldDescriptorProto::Type_MAX; constexpr int FieldDescriptorProto::Type_ARRAYSIZE; -#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FieldDescriptorProto_Label_descriptor() { ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto); return file_level_enum_descriptors_google_2fprotobuf_2fdescriptor_2eproto[1]; @@ -1158,14 +1158,14 @@ bool FieldDescriptorProto_Label_IsValid(int value) { } } -#if (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) constexpr FieldDescriptorProto_Label FieldDescriptorProto::LABEL_OPTIONAL; constexpr FieldDescriptorProto_Label FieldDescriptorProto::LABEL_REQUIRED; constexpr FieldDescriptorProto_Label FieldDescriptorProto::LABEL_REPEATED; constexpr FieldDescriptorProto_Label FieldDescriptorProto::Label_MIN; constexpr FieldDescriptorProto_Label FieldDescriptorProto::Label_MAX; constexpr int FieldDescriptorProto::Label_ARRAYSIZE; -#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FileOptions_OptimizeMode_descriptor() { ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto); return file_level_enum_descriptors_google_2fprotobuf_2fdescriptor_2eproto[2]; @@ -1181,14 +1181,14 @@ bool FileOptions_OptimizeMode_IsValid(int value) { } } -#if (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) constexpr FileOptions_OptimizeMode FileOptions::SPEED; constexpr FileOptions_OptimizeMode FileOptions::CODE_SIZE; constexpr FileOptions_OptimizeMode FileOptions::LITE_RUNTIME; constexpr FileOptions_OptimizeMode FileOptions::OptimizeMode_MIN; constexpr FileOptions_OptimizeMode FileOptions::OptimizeMode_MAX; constexpr int FileOptions::OptimizeMode_ARRAYSIZE; -#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FieldOptions_CType_descriptor() { ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto); return file_level_enum_descriptors_google_2fprotobuf_2fdescriptor_2eproto[3]; @@ -1204,14 +1204,14 @@ bool FieldOptions_CType_IsValid(int value) { } } -#if (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) constexpr FieldOptions_CType FieldOptions::STRING; constexpr FieldOptions_CType FieldOptions::CORD; constexpr FieldOptions_CType FieldOptions::STRING_PIECE; constexpr FieldOptions_CType FieldOptions::CType_MIN; constexpr FieldOptions_CType FieldOptions::CType_MAX; constexpr int FieldOptions::CType_ARRAYSIZE; -#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* FieldOptions_JSType_descriptor() { ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto); return file_level_enum_descriptors_google_2fprotobuf_2fdescriptor_2eproto[4]; @@ -1227,14 +1227,14 @@ bool FieldOptions_JSType_IsValid(int value) { } } -#if (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) constexpr FieldOptions_JSType FieldOptions::JS_NORMAL; constexpr FieldOptions_JSType FieldOptions::JS_STRING; constexpr FieldOptions_JSType FieldOptions::JS_NUMBER; constexpr FieldOptions_JSType FieldOptions::JSType_MIN; constexpr FieldOptions_JSType FieldOptions::JSType_MAX; constexpr int FieldOptions::JSType_ARRAYSIZE; -#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* MethodOptions_IdempotencyLevel_descriptor() { ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2fdescriptor_2eproto); return file_level_enum_descriptors_google_2fprotobuf_2fdescriptor_2eproto[5]; @@ -1250,14 +1250,14 @@ bool MethodOptions_IdempotencyLevel_IsValid(int value) { } } -#if (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) constexpr MethodOptions_IdempotencyLevel MethodOptions::IDEMPOTENCY_UNKNOWN; constexpr MethodOptions_IdempotencyLevel MethodOptions::NO_SIDE_EFFECTS; constexpr MethodOptions_IdempotencyLevel MethodOptions::IDEMPOTENT; constexpr MethodOptions_IdempotencyLevel MethodOptions::IdempotencyLevel_MIN; constexpr MethodOptions_IdempotencyLevel MethodOptions::IdempotencyLevel_MAX; constexpr int MethodOptions::IdempotencyLevel_ARRAYSIZE; -#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) // =================================================================== diff --git a/src/google/protobuf/extension_set.cc b/src/google/protobuf/extension_set.cc index df95bc0ee0..bbb7ae1f8c 100644 --- a/src/google/protobuf/extension_set.cc +++ b/src/google/protobuf/extension_set.cc @@ -1968,8 +1968,10 @@ void ExtensionSet::GrowCapacity(size_t minimum_new_capacity) { map_ = new_map; } +#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) // static constexpr uint16_t ExtensionSet::kMaximumFlatCapacity; +#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) void ExtensionSet::Erase(int key) { if (PROTOBUF_PREDICT_FALSE(is_large())) { diff --git a/src/google/protobuf/type.pb.cc b/src/google/protobuf/type.pb.cc index ffa3b20264..88fa46c111 100644 --- a/src/google/protobuf/type.pb.cc +++ b/src/google/protobuf/type.pb.cc @@ -272,7 +272,7 @@ bool Field_Kind_IsValid(int value) { } } -#if (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) constexpr Field_Kind Field::TYPE_UNKNOWN; constexpr Field_Kind Field::TYPE_DOUBLE; constexpr Field_Kind Field::TYPE_FLOAT; @@ -295,7 +295,7 @@ constexpr Field_Kind Field::TYPE_SINT64; constexpr Field_Kind Field::Kind_MIN; constexpr Field_Kind Field::Kind_MAX; constexpr int Field::Kind_ARRAYSIZE; -#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Field_Cardinality_descriptor() { ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2ftype_2eproto); return file_level_enum_descriptors_google_2fprotobuf_2ftype_2eproto[1]; @@ -312,7 +312,7 @@ bool Field_Cardinality_IsValid(int value) { } } -#if (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) constexpr Field_Cardinality Field::CARDINALITY_UNKNOWN; constexpr Field_Cardinality Field::CARDINALITY_OPTIONAL; constexpr Field_Cardinality Field::CARDINALITY_REQUIRED; @@ -320,7 +320,7 @@ constexpr Field_Cardinality Field::CARDINALITY_REPEATED; constexpr Field_Cardinality Field::Cardinality_MIN; constexpr Field_Cardinality Field::Cardinality_MAX; constexpr int Field::Cardinality_ARRAYSIZE; -#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || _MSC_VER >= 1900) +#endif // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912)) const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Syntax_descriptor() { ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_google_2fprotobuf_2ftype_2eproto); return file_level_enum_descriptors_google_2fprotobuf_2ftype_2eproto[2]; diff --git a/src/google/protobuf/wire_format_lite.cc b/src/google/protobuf/wire_format_lite.cc index ab8cbac1d7..5a2ee29124 100644 --- a/src/google/protobuf/wire_format_lite.cc +++ b/src/google/protobuf/wire_format_lite.cc @@ -53,7 +53,7 @@ namespace google { namespace protobuf { namespace internal { -#if !defined(_MSC_VER) || _MSC_VER >= 1900 +#if !defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912) // Old version of MSVC doesn't like definitions of inline constants, GCC // requires them. const int WireFormatLite::kMessageSetItemStartTag;