Skip to content
Snippets Groups Projects
Commit 6c6fba88 authored by Sterling Augustine's avatar Sterling Augustine
Browse files

Correctly handle using foo = std::foo inside namespaces.

Summary:
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.

Reviewers: #libc!

Subscribers: broadwaylamb, libcxx-commits

Tags: #libc

Differential Revision: https://reviews.llvm.org/D76816
parent b727aabc
No related branches found
No related tags found
No related merge requests found
...@@ -153,6 +153,16 @@ void string_test() { ...@@ -153,6 +153,16 @@ void string_test() {
"\"mehmet bizim dostumuz agzi kirik testimiz\""); "\"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() { void string_view_test() {
std::string_view i_am_empty; std::string_view i_am_empty;
ComparePrettyPrintToChars(i_am_empty, "std::string_view of length 0: \"\""); ComparePrettyPrintToChars(i_am_empty, "std::string_view of length 0: \"\"");
...@@ -166,6 +176,12 @@ void string_view_test() { ...@@ -166,6 +176,12 @@ void string_view_test() {
std::string_view wonderful(&char_arr[7], 9); std::string_view wonderful(&char_arr[7], 9);
ComparePrettyPrintToChars( ComparePrettyPrintToChars(
wonderful, "std::string_view of length 9: \"wonderful\""); 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() { void u16string_test() {
...@@ -628,7 +644,7 @@ int main(int argc, char* argv[]) { ...@@ -628,7 +644,7 @@ int main(int argc, char* argv[]) {
framework_self_test(); framework_self_test();
string_test(); string_test();
string_view_test(); a_namespace::string_view_test();
u32string_test(); u32string_test();
tuple_test(); tuple_test();
......
...@@ -982,10 +982,10 @@ class LibcxxPrettyPrinter(object): ...@@ -982,10 +982,10 @@ class LibcxxPrettyPrinter(object):
# Don't attempt types known to be inside libstdcxx. # Don't attempt types known to be inside libstdcxx.
typename = val.type.name or val.type.tag or str(val.type) typename = val.type.name or val.type.tag or str(val.type)
match = re.match("^std::(__.*?)::", typename) match = re.match("^std::(__.*?)::", typename)
if match is None or match.group(1) in ["__cxx1998", if match is not None and match.group(1) in ["__cxx1998",
"__debug", "__debug",
"__7", "__7",
"__g"]: "__g"]:
return None return None
# Handle any using declarations or other typedefs. # Handle any using declarations or other typedefs.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment