On 18 January 2017 at 10:12, Jonathan Roelofs via cfe-commits < cfe-commits@lists.llvm.org> wrote:
> Author: jroelofs > Date: Wed Jan 18 12:12:39 2017 > New Revision: 292418 > > URL: http://llvm.org/viewvc/llvm-project?rev=292418&view=rev > Log: > Revert r286788 > > The Itanium ABI [1] specifies that __cxa_demangle accept either: > > 1) symbol names, which start with "_Z" > 2) type manglings, which do not start with "_Z" > > r286788 erroneously assumes that it should only handle symbols, so this > patch > reverts it and adds a counterexample to the testcase. > > 1: https://mentorembedded.github.io/cxx-abi/abi.html#demangler Thanks! Just FYI, the ABI document now lives here: https://itanium-cxx-abi.github.io/cxx-abi/ Reviewers: zygoloid, EricWF > > Modified: > libcxxabi/trunk/src/cxa_demangle.cpp > libcxxabi/trunk/test/test_demangle.pass.cpp > > Modified: libcxxabi/trunk/src/cxa_demangle.cpp > URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/src/ > cxa_demangle.cpp?rev=292418&r1=292417&r2=292418&view=diff > ============================================================ > ================== > --- libcxxabi/trunk/src/cxa_demangle.cpp (original) > +++ libcxxabi/trunk/src/cxa_demangle.cpp Wed Jan 18 12:12:39 2017 > @@ -4979,22 +4979,12 @@ __cxa_demangle(const char *mangled_name, > return nullptr; > } > > - size_t len = std::strlen(mangled_name); > - if (len < 2 || strncmp(mangled_name, "_Z", 2)) > - { > - if (len < 4 || strncmp(mangled_name, "___Z", 4)) > - { > - if (status) > - *status = invalid_mangled_name; > - return nullptr; > - } > - } > - > size_t internal_size = buf != nullptr ? *n : 0; > arena<bs> a; > Db db(a); > db.template_param.emplace_back(a); > int internal_status = success; > + size_t len = std::strlen(mangled_name); > demangle(mangled_name, mangled_name + len, db, > internal_status); > if (internal_status == success && db.fix_forward_references && > > Modified: libcxxabi/trunk/test/test_demangle.pass.cpp > URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/ > test_demangle.pass.cpp?rev=292418&r1=292417&r2=292418&view=diff > ============================================================ > ================== > --- libcxxabi/trunk/test/test_demangle.pass.cpp (original) > +++ libcxxabi/trunk/test/test_demangle.pass.cpp Wed Jan 18 12:12:39 2017 > @@ -29594,6 +29594,9 @@ const char* cases[][2] = > // NOTE: disable this test since it is a negative test case, you > cannot demangle a non-mangled symbol > // {"\x6D", nullptr}, // This use to crash with ASAN > {"_ZTIU4_farrVKPi", "typeinfo for int* const volatile restrict _far"}, > + > + // mangled names can include type manglings too, which don't start > with _Z: > + {"i", "int"}, > }; > > const unsigned N = sizeof(cases) / sizeof(cases[0]); > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits