[libcxxabi] r292418 - Revert r286788

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 18 10:26:39 PST 2017


On 18 January 2017 at 10:12, Jonathan Roelofs via cfe-commits <
cfe-commits at 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 at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170118/0939d5d0/attachment-0001.html>


More information about the cfe-commits mailing list