Skip to content

Commit 13b249f

Browse files
jnthntatumcopybara-github
authored andcommitted
Fixes for bazel msvc build.
- update antlr patch to strip version file (may shadow std <version>) - address misc unsupported features for msvc - add basic msvc bazel config to bazelrc PiperOrigin-RevId: 850497501
1 parent 769b0b1 commit 13b249f

10 files changed

Lines changed: 93 additions & 62 deletions

File tree

.bazelrc

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
1-
build --cxxopt=-std=c++17 --host_cxxopt=-std=c++17
2-
build --cxxopt=-fsized-deallocation
1+
common --enable_platform_specific_config
2+
33
build --enable_bzlmod
4-
build --copt=-Wno-deprecated-declarations
54
build --compilation_mode=fastbuild
65

6+
build:linux --cxxopt=-std=c++17 --host_cxxopt=-std=c++17
7+
build:linux --cxxopt=-fsized-deallocation
8+
build:linux --copt=-Wno-deprecated-declarations
9+
10+
# you will typically need to spell out the compiler for local dev
11+
# BAZEL_VC=<install directory>
12+
# BAZEL_VC_FULL_VERSION=14.44.3520
13+
build:msvc --cxxopt="-std:c++20" --cxxopt="-utf-8" --host_cxxopt="-std:c++20"
14+
build:msvc --define=protobuf_allow_msvc=true
15+
build:msvc --test_tag_filters=-benchmark,-notap,-no_test_msvc
16+
build:msvc --build_tag_filters=-no_test_msvc
17+
718
test --test_output=errors
819

920
# Enable matchers in googletest

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ bazel-cel-cpp
88
clang.bazelrc
99
user.bazelrc
1010
local_tsan.bazelrc
11+
MODULE.bazel.lock

bazel/antlr.patch

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,9 @@
2222
"@com_google_absl//absl/container:flat_hash_set",
2323
"@com_google_absl//absl/synchronization",
2424
],
25-
)
25+
)
26+
27+
--- VERSION
28+
+++ /dev/null
29+
@@ -1,1 +1,0 @@
30+
-4.13.2

common/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -846,6 +846,7 @@ cc_test(
846846
"arena_string_test.cc",
847847
"arena_string_view_test.cc",
848848
],
849+
tags = ["no_test_msvc"],
849850
deps = [
850851
":arena_string",
851852
"//internal:testing",
@@ -875,6 +876,7 @@ cc_library(
875876
cc_test(
876877
name = "arena_string_pool_test",
877878
srcs = ["arena_string_pool_test.cc"],
879+
tags = ["no_test_msvc"],
878880
deps = [
879881
":arena_string_pool",
880882
"//internal:testing",

common/value.cc

Lines changed: 60 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1123,37 +1123,34 @@ absl::StatusOr<RepeatedFieldAccessor> RepeatedFieldAccessorFor(
11231123

11241124
namespace {
11251125

1126-
// WellKnownTypesValueVisitor is the base visitor for `well_known_types::Value`
1127-
// which handles the primitive values which require no special handling based on
1128-
// allocators.
1129-
struct WellKnownTypesValueVisitor {
1130-
Value operator()(std::nullptr_t) const { return NullValue(); }
1126+
// Overloads for `well_known_types::Value` which handles the primitive values
1127+
// which require no special handling based on allocators.
1128+
Value VistWellKnownTypeValue(std::nullptr_t) { return NullValue(); }
11311129

1132-
Value operator()(bool value) const { return BoolValue(value); }
1130+
Value VistWellKnownTypeValue(bool value) { return BoolValue(value); }
11331131

1134-
Value operator()(int32_t value) const { return IntValue(value); }
1132+
Value VistWellKnownTypeValue(int32_t value) { return IntValue(value); }
11351133

1136-
Value operator()(int64_t value) const { return IntValue(value); }
1134+
Value VistWellKnownTypeValue(int64_t value) { return IntValue(value); }
11371135

1138-
Value operator()(uint32_t value) const { return UintValue(value); }
1136+
Value VistWellKnownTypeValue(uint32_t value) { return UintValue(value); }
11391137

1140-
Value operator()(uint64_t value) const { return UintValue(value); }
1138+
Value VistWellKnownTypeValue(uint64_t value) { return UintValue(value); }
11411139

1142-
Value operator()(float value) const { return DoubleValue(value); }
1140+
Value VistWellKnownTypeValue(float value) { return DoubleValue(value); }
11431141

1144-
Value operator()(double value) const { return DoubleValue(value); }
1142+
Value VistWellKnownTypeValue(double value) { return DoubleValue(value); }
11451143

1146-
Value operator()(absl::Duration value) const { return DurationValue(value); }
1144+
Value VistWellKnownTypeValue(absl::Duration value) {
1145+
return DurationValue(value);
1146+
}
11471147

1148-
Value operator()(absl::Time value) const { return TimestampValue(value); }
1149-
};
1148+
Value VistWellKnownTypeValue(absl::Time value) { return TimestampValue(value); }
11501149

1151-
struct OwningWellKnownTypesValueVisitor : public WellKnownTypesValueVisitor {
1150+
struct OwningWellKnownTypesValueVisitor {
11521151
google::protobuf::Arena* absl_nullable arena;
11531152
std::string* absl_nonnull scratch;
11541153

1155-
using WellKnownTypesValueVisitor::operator();
1156-
11571154
Value operator()(well_known_types::BytesValue&& value) const {
11581155
return absl::visit(absl::Overload(
11591156
[&](absl::string_view string) -> BytesValue {
@@ -1242,15 +1239,18 @@ struct OwningWellKnownTypesValueVisitor : public WellKnownTypesValueVisitor {
12421239
}
12431240
return ParsedMessageValue(value.release(), arena);
12441241
}
1242+
1243+
template <typename T>
1244+
Value operator()(T t) const {
1245+
return VistWellKnownTypeValue(t);
1246+
}
12451247
};
12461248

1247-
struct BorrowingWellKnownTypesValueVisitor : public WellKnownTypesValueVisitor {
1249+
struct BorrowingWellKnownTypesValueVisitor {
12481250
const google::protobuf::Message* absl_nonnull message;
12491251
google::protobuf::Arena* absl_nonnull arena;
12501252
std::string* absl_nonnull scratch;
12511253

1252-
using WellKnownTypesValueVisitor::operator();
1253-
12541254
Value operator()(well_known_types::BytesValue&& value) const {
12551255
return absl::visit(
12561256
absl::Overload(
@@ -1332,6 +1332,11 @@ struct BorrowingWellKnownTypesValueVisitor : public WellKnownTypesValueVisitor {
13321332
}
13331333
return ParsedMessageValue(value.release(), arena);
13341334
}
1335+
1336+
template <typename T>
1337+
Value operator()(T t) const {
1338+
return VistWellKnownTypeValue(t);
1339+
}
13351340
};
13361341

13371342
} // namespace
@@ -1354,13 +1359,13 @@ Value Value::FromMessage(
13541359
return ErrorValue(std::move(status_or_adapted).status());
13551360
}
13561361
return absl::visit(
1357-
absl::Overload(
1358-
OwningWellKnownTypesValueVisitor{.arena = arena, .scratch = &scratch},
1359-
[&](absl::monostate) -> Value {
1360-
auto* cloned = message.New(arena);
1361-
cloned->CopyFrom(message);
1362-
return ParsedMessageValue(cloned, arena);
1363-
}),
1362+
absl::Overload(OwningWellKnownTypesValueVisitor{
1363+
/* .arena = */ arena, /* .scratch = */ &scratch},
1364+
[&](absl::monostate) -> Value {
1365+
auto* cloned = message.New(arena);
1366+
cloned->CopyFrom(message);
1367+
return ParsedMessageValue(cloned, arena);
1368+
}),
13641369
std::move(status_or_adapted).value());
13651370
}
13661371

@@ -1382,13 +1387,13 @@ Value Value::FromMessage(
13821387
return ErrorValue(std::move(status_or_adapted).status());
13831388
}
13841389
return absl::visit(
1385-
absl::Overload(
1386-
OwningWellKnownTypesValueVisitor{.arena = arena, .scratch = &scratch},
1387-
[&](absl::monostate) -> Value {
1388-
auto* cloned = message.New(arena);
1389-
cloned->GetReflection()->Swap(cloned, &message);
1390-
return ParsedMessageValue(cloned, arena);
1391-
}),
1390+
absl::Overload(OwningWellKnownTypesValueVisitor{
1391+
/* .arena = */ arena, /* .scratch = */ &scratch},
1392+
[&](absl::monostate) -> Value {
1393+
auto* cloned = message.New(arena);
1394+
cloned->GetReflection()->Swap(cloned, &message);
1395+
return ParsedMessageValue(cloned, arena);
1396+
}),
13921397
std::move(status_or_adapted).value());
13931398
}
13941399

@@ -1412,17 +1417,17 @@ Value Value::WrapMessage(
14121417
return ErrorValue(std::move(adapted_value).status());
14131418
}
14141419
return absl::visit(
1415-
absl::Overload(
1416-
BorrowingWellKnownTypesValueVisitor{
1417-
.message = message, .arena = arena, .scratch = &scratch},
1418-
[&](absl::monostate) -> Value {
1419-
if (message->GetArena() != arena) {
1420-
auto* cloned = message->New(arena);
1421-
cloned->CopyFrom(*message);
1422-
return ParsedMessageValue(cloned, arena);
1423-
}
1424-
return ParsedMessageValue(message, arena);
1425-
}),
1420+
absl::Overload(BorrowingWellKnownTypesValueVisitor{
1421+
/* .message = */ message, /* .arena = */ arena,
1422+
/* .scratch = */ &scratch},
1423+
[&](absl::monostate) -> Value {
1424+
if (message->GetArena() != arena) {
1425+
auto* cloned = message->New(arena);
1426+
cloned->CopyFrom(*message);
1427+
return ParsedMessageValue(cloned, arena);
1428+
}
1429+
return ParsedMessageValue(message, arena);
1430+
}),
14261431
std::move(adapted_value).value());
14271432
}
14281433

@@ -1446,15 +1451,15 @@ Value Value::WrapMessageUnsafe(
14461451
return ErrorValue(std::move(adapted_value).status());
14471452
}
14481453
return absl::visit(
1449-
absl::Overload(
1450-
BorrowingWellKnownTypesValueVisitor{
1451-
.message = message, .arena = arena, .scratch = &scratch},
1452-
[&](absl::monostate) -> Value {
1453-
if (message->GetArena() != arena) {
1454-
return UnsafeParsedMessageValue(message);
1455-
}
1456-
return ParsedMessageValue(message, arena);
1457-
}),
1454+
absl::Overload(BorrowingWellKnownTypesValueVisitor{
1455+
/* .message = */ message, /* .arena = */ arena,
1456+
/* .scratch = */ &scratch},
1457+
[&](absl::monostate) -> Value {
1458+
if (message->GetArena() != arena) {
1459+
return UnsafeParsedMessageValue(message);
1460+
}
1461+
return ParsedMessageValue(message, arena);
1462+
}),
14581463
std::move(adapted_value).value());
14591464
}
14601465

common/values/error_value.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,9 @@ class ABSL_ATTRIBUTE_TRIVIAL_ABI ErrorValue final
132132

133133
ErrorValue(google::protobuf::Arena* absl_nonnull arena,
134134
const absl::Status* absl_nonnull status)
135-
: arena_(arena), status_{.ptr = status} {}
135+
: arena_(arena) {
136+
status_.ptr = status;
137+
}
136138

137139
void CopyConstruct(const ErrorValue& other) {
138140
arena_ = other.arena_;

internal/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ cc_library(
3535
cc_test(
3636
name = "align_test",
3737
srcs = ["align_test.cc"],
38+
tags = ["no_test_msvc"],
3839
deps = [
3940
":align",
4041
":testing",
@@ -783,6 +784,7 @@ cc_library(
783784
cc_test(
784785
name = "message_equality_test",
785786
srcs = ["message_equality_test.cc"],
787+
tags = ["no_test_msvc"],
786788
deps = [
787789
":message_equality",
788790
":message_type_name",

internal/json.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -864,7 +864,7 @@ class MessageToJsonState {
864864
case FieldDescriptor::TYPE_GROUP:
865865
ABSL_FALLTHROUGH_INTENDED;
866866
case FieldDescriptor::TYPE_MESSAGE:
867-
return ToJson(reflection->GetMessage(message, field), result);
867+
return ToJson((reflection->GetMessage)(message, field), result);
868868
case FieldDescriptor::TYPE_BYTES:
869869
BytesValueToJson(
870870
well_known_types::GetBytesField(message, field, scratch_), result);

parser/BUILD

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ cc_library(
3030
copts = [
3131
"-fexceptions",
3232
],
33+
defines = [
34+
"ANTLR4CPP_STATIC",
35+
],
3336
deps = [
3437
":macro",
3538
":macro_expr_factory",

parser/parser_test.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1485,7 +1485,7 @@ TEST_P(ExpressionTest, Parse) {
14851485
macros.push_back(cel::OptFlatMapMacro());
14861486
auto result = EnrichedParse(test_info.I, macros, "<input>", options);
14871487
if (test_info.E.empty()) {
1488-
EXPECT_THAT(result, IsOk());
1488+
ASSERT_THAT(result, IsOk());
14891489
} else {
14901490
EXPECT_THAT(result, Not(IsOk()));
14911491
EXPECT_EQ(test_info.E, result.status().message());

0 commit comments

Comments
 (0)