[libcxx-commits] [PATCH] D76816: Correctly handle using foo = std::foo inside namespaces.
Sterling Augustine via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Mar 25 18:26:00 PDT 2020
saugustine created this revision.
Herald added subscribers: libcxx-commits, broadwaylamb.
Herald added a project: libc++.
Herald added a reviewer: libc++.
saugustine added a reviewer: EricWF.
The gdb pretty printer misprints variables declared via
using declarations of the form:
namespace foo {
using string_view = std::string_view;
string_view bar;
}
This change fixes that, by deferring the decision to ignore
types not inside std until after desugaring.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D76816
Files:
libcxx/test/pretty_printers/gdb_pretty_printer_test.sh.cpp
libcxx/utils/gdb/libcxx/printers.py
Index: libcxx/utils/gdb/libcxx/printers.py
===================================================================
--- libcxx/utils/gdb/libcxx/printers.py
+++ libcxx/utils/gdb/libcxx/printers.py
@@ -982,10 +982,10 @@
# Don't attempt types known to be inside libstdcxx.
typename = val.type.name or val.type.tag or str(val.type)
match = re.match("^std::(__.*?)::", typename)
- if match is None or match.group(1) in ["__cxx1998",
- "__debug",
- "__7",
- "__g"]:
+ if match is not None and match.group(1) in ["__cxx1998",
+ "__debug",
+ "__7",
+ "__g"]:
return None
# Handle any using declarations or other typedefs.
Index: libcxx/test/pretty_printers/gdb_pretty_printer_test.sh.cpp
===================================================================
--- libcxx/test/pretty_printers/gdb_pretty_printer_test.sh.cpp
+++ libcxx/test/pretty_printers/gdb_pretty_printer_test.sh.cpp
@@ -153,6 +153,16 @@
"\"mehmet bizim dostumuz agzi kirik testimiz\"");
}
+namespace a_namespace {
+// To test name-lookup in the presence of using inside a namespace. Inside this
+// namespace, unqualified string_view variables will appear in the debug info as
+// "a_namespace::string_view, rather than "std::string_view".
+//
+// There is nothing special here about string_view; it's just the data structure
+// where lookup with using inside a namespace wasn't always working.
+
+using string_view = std::string_view;
+
void string_view_test() {
std::string_view i_am_empty;
ComparePrettyPrintToChars(i_am_empty, "std::string_view of length 0: \"\"");
@@ -166,6 +176,12 @@
std::string_view wonderful(&char_arr[7], 9);
ComparePrettyPrintToChars(
wonderful, "std::string_view of length 9: \"wonderful\"");
+
+ const char char_arr1[] = "namespace_stringview";
+ string_view namespace_stringview(&char_arr1[10], 10);
+ ComparePrettyPrintToChars(
+ namespace_stringview, "std::string_view of length 10: \"stringview\"");
+}
}
void u16string_test() {
@@ -628,7 +644,7 @@
framework_self_test();
string_test();
- string_view_test();
+ a_namespace::string_view_test();
u32string_test();
tuple_test();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D76816.252718.patch
Type: text/x-patch
Size: 2502 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20200326/666a5904/attachment.bin>
More information about the libcxx-commits
mailing list