Skip to content

Commit 1372c11

Browse files
authored
Fix various nullptr errors (#29)
1 parent 4276937 commit 1372c11

File tree

3 files changed

+21
-22
lines changed

3 files changed

+21
-22
lines changed

lldb/source/ValueObject/DILParser.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2631,7 +2631,7 @@ ASTNodeUP DILParser::BuildCStyleCast(CompilerType type, ASTNodeUP rhs,
26312631

26322632
} else if (type.IsNullPtrType()) {
26332633
// Cast to nullptr type.
2634-
if (!type.IsNullPtrType() && !rhs->is_literal_zero()) {
2634+
if (!rhs_type.IsNullPtrType() && !rhs->is_literal_zero()) {
26352635
BailOut(ErrorCode::kInvalidOperandType,
26362636
llvm::formatv("C-style cast from {0} to {1} is not allowed",
26372637
rhs_type.TypeDescription(), type.TypeDescription()),

lldb/source/ValueObject/ValueObject.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1181,6 +1181,8 @@ llvm::Expected<bool> ValueObject::GetValueAsBool() {
11811181
}
11821182
if (val_type.IsArrayType())
11831183
return GetAddressOf() != 0;
1184+
if (val_type.IsNullPtrType())
1185+
return false;
11841186

11851187
return llvm::make_error<llvm::StringError>("type cannot be converted to bool",
11861188
llvm::inconvertibleErrorCode());
@@ -3685,7 +3687,7 @@ lldb::ValueObjectSP ValueObject::CreateValueObjectFromNullptr(
36853687
if (auto temp = type.GetByteSize(target.get()))
36863688
byte_size = temp.value();
36873689
lldb::DataExtractorSP data_sp = std::make_shared<DataExtractor>(
3688-
reinterpret_cast<const void *>(zero), byte_size, exe_ctx.GetByteOrder(),
3690+
reinterpret_cast<const void *>(&zero), byte_size, exe_ctx.GetByteOrder(),
36893691
exe_ctx.GetAddressByteSize());
36903692
return ValueObject::CreateValueObjectFromData(name, *data_sp, exe_ctx, type);
36913693
}

lldb/unittests/DIL/DILTests.cpp

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,20 +1429,21 @@ TEST_F(EvalTest, TestCStyleCastPointer) {
14291429
EXPECT_THAT(Eval("(int&*)ap"), IsError("'type name' declared as a pointer "
14301430
"to a reference of type 'int &'"));
14311431

1432-
GTEST_SKIP() << "Segfault when retrieving result value in the matcher";
1433-
EXPECT_THAT(Eval("(nullptr_t)nullptr"),
1432+
EXPECT_THAT(Eval("(std::__1::nullptr_t)nullptr"),
14341433
IsEqual(Is32Bit() ? "0x00000000" : "0x0000000000000000"));
1435-
EXPECT_THAT(Eval("(nullptr_t)0"),
1434+
EXPECT_THAT(Eval("(std::__1::nullptr_t)0"),
14361435
IsEqual(Is32Bit() ? "0x00000000" : "0x0000000000000000"));
14371436

1438-
EXPECT_THAT(Eval("(nullptr_t)1"),
1439-
IsError("C-style cast from 'int' to 'nullptr_t' (canonically "
1440-
"referred to as 'std::nullptr_t')"
1441-
" is not allowed"));
1442-
EXPECT_THAT(Eval("(nullptr_t)ap"),
1443-
IsError("C-style cast from 'int *' to 'nullptr_t' (canonically "
1444-
"referred to as 'std::nullptr_t')"
1445-
" is not allowed"));
1437+
EXPECT_THAT(
1438+
Eval("(nullptr_t)1"),
1439+
IsError("C-style cast from 'int' to 'std::__1::nullptr_t' (canonically "
1440+
"referred to as 'std::nullptr_t')"
1441+
" is not allowed"));
1442+
EXPECT_THAT(
1443+
Eval("(nullptr_t)ap"),
1444+
IsError("C-style cast from 'int *' to 'std::__1::nullptr_t' (canonically "
1445+
"referred to as 'std::nullptr_t')"
1446+
" is not allowed"));
14461447
}
14471448

14481449
TEST_F(EvalTest, TestCStyleCastNullptrType) {
@@ -1598,10 +1599,9 @@ TEST_F(EvalTest, TestCxxStaticCast) {
15981599
IsError("two or more data types in declaration of 'type name'"));
15991600

16001601
// Cast to nullptr.
1601-
GTEST_SKIP() << "Segfault when retrieving result value in the matcher";
1602-
EXPECT_THAT(Eval("static_cast<nullptr_t>(nullptr)"),
1602+
EXPECT_THAT(Eval("static_cast<std::__1::nullptr_t>(nullptr)"),
16031603
IsEqual(Is32Bit() ? "0x00000000" : "0x0000000000000000"));
1604-
EXPECT_THAT(Eval("static_cast<nullptr_t>(0)"),
1604+
EXPECT_THAT(Eval("static_cast<std::__1::nullptr_t>(0)"),
16051605
IsEqual(Is32Bit() ? "0x00000000" : "0x0000000000000000"));
16061606
}
16071607

@@ -2584,7 +2584,8 @@ TEST_F(EvalTest, TestTernaryOperator) {
25842584
IsEqual(Is32Bit() ? "0x0000000f" : "0x000000000000000f"));
25852585
EXPECT_THAT(Eval("true ? nullptr : (int*)15"),
25862586
IsEqual(Is32Bit() ? "0x00000000" : "0x0000000000000000"));
2587-
2587+
EXPECT_THAT(Eval("true ? 0 : nullptr"),
2588+
IsEqual(Is32Bit() ? "0x00000000" : "0x0000000000000000"));
25882589
EXPECT_THAT(Eval("true ? nullptr : 0"),
25892590
IsEqual(Is32Bit() ? "0x00000000" : "0x0000000000000000"));
25902591

@@ -2641,12 +2642,8 @@ TEST_F(EvalTest, TestTernaryOperator) {
26412642

26422643
// Use pointers and arrays in bool context.
26432644
EXPECT_THAT(Eval("pi ? 1 : 2"), IsEqual("1"));
2644-
EXPECT_THAT(Eval("arr2 ? 1 : 2"), IsEqual("1"));
2645-
2646-
GTEST_SKIP() << "Segfault when retrieving result value in the matcher";
2647-
EXPECT_THAT(Eval("true ? 0 : nullptr"),
2648-
IsEqual(Is32Bit() ? "0x00000000" : "0x0000000000000000"));
26492645
EXPECT_THAT(Eval("nullptr ? 1 : 2"), IsEqual("2"));
2646+
EXPECT_THAT(Eval("arr2 ? 1 : 2"), IsEqual("1"));
26502647
}
26512648

26522649
TEST_F(EvalTest, TestSizeOf) {

0 commit comments

Comments
 (0)