[PATCH] D113570: [clang] Do not crash in APValue::prettyPrint() on forward-decl structs.
Adam Czachorowski via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 10 07:30:43 PST 2021
adamcz created this revision.
adamcz added a reviewer: hokein.
Herald added subscribers: usaxena95, kadircet, arphaman.
adamcz requested review of this revision.
Herald added projects: clang, clang-tools-extra.
Herald added a subscriber: cfe-commits.
The call to getTypeSizeInChars() is replaced with
getTypeSizeInCharsIfKnown(), which does not crash on forward declared
structs. This only affects printing.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D113570
Files:
clang-tools-extra/clangd/unittests/HoverTests.cpp
clang/lib/AST/APValue.cpp
Index: clang/lib/AST/APValue.cpp
===================================================================
--- clang/lib/AST/APValue.cpp
+++ clang/lib/AST/APValue.cpp
@@ -700,7 +700,9 @@
if (!hasLValuePath()) {
// No lvalue path: just print the offset.
CharUnits O = getLValueOffset();
- CharUnits S = Ctx ? Ctx->getTypeSizeInChars(InnerTy) : CharUnits::Zero();
+ CharUnits S = Ctx ? Ctx->getTypeSizeInCharsIfKnown(InnerTy).getValueOr(
+ CharUnits::Zero())
+ : CharUnits::Zero();
if (!O.isZero()) {
if (IsReference)
Out << "*(";
Index: clang-tools-extra/clangd/unittests/HoverTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/HoverTests.cpp
+++ clang-tools-extra/clangd/unittests/HoverTests.cpp
@@ -2963,6 +2963,20 @@
EXPECT_EQ(HI->Documentation, "Foo bar baz");
}
+TEST(Hover, ForwardStructNoCrash) {
+ Annotations T(R"cpp(
+ struct Foo;
+ int bar;
+ auto baz = (Fo^o*)&bar;
+ )cpp");
+
+ TestTU TU = TestTU::withCode(T.code());
+ auto AST = TU.build();
+ auto HI = getHover(AST, T.point(), format::getLLVMStyle(), nullptr);
+ ASSERT_TRUE(HI);
+ EXPECT_EQ(*HI->Value, "&bar");
+}
+
} // namespace
} // namespace clangd
} // namespace clang
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D113570.386160.patch
Type: text/x-patch
Size: 1331 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211110/3c33402f/attachment.bin>
More information about the cfe-commits
mailing list