[libcxxabi] r198643 - Implement demangling for user-defined operators.

Richard Smith richard at metafoo.co.uk
Tue Jan 7 17:43:03 PST 2014


On Mon, Jan 6, 2014 at 3:05 PM, Howard Hinnant <hhinnant at apple.com> wrote:

> Author: hhinnant
> Date: Mon Jan  6 17:05:04 2014
> New Revision: 198643
>
> URL: http://llvm.org/viewvc/llvm-project?rev=198643&view=rev
> Log:
> Implement demangling for user-defined operators.
>
> Modified:
>     libcxxabi/trunk/src/cxa_demangle.cpp
>     libcxxabi/trunk/test/test_demangle.cpp
>
> Modified: libcxxabi/trunk/src/cxa_demangle.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/src/cxa_demangle.cpp?rev=198643&r1=198642&r2=198643&view=diff
>
> ==============================================================================
> --- libcxxabi/trunk/src/cxa_demangle.cpp (original)
> +++ libcxxabi/trunk/src/cxa_demangle.cpp Mon Jan  6 17:05:04 2014
> @@ -2277,6 +2277,7 @@ parse_type(const char* first, const char
>  //                   ::= gt    # >
>  //                   ::= ix    # []
>  //                   ::= le    # <=
> +//                   ::= li <source-name>  # operator ""
>  //                   ::= ls    # <<
>  //                   ::= lS    # <<=
>  //                   ::= lt    # <
> @@ -2438,6 +2439,18 @@ parse_operator_name(const char* first, c
>                  db.names.push_back("operator<=");
>                  first += 2;
>                  break;
> +            case 'i':
> +                {
> +                    const char* t = parse_source_name(first+2, last, db);
> +                    if (t != first+2)
> +                    {
> +                        if (db.names.empty())
> +                            return first;
> +                        db.names.back().first.insert(0, "operator\"\" ");
>

It would be more correct to use "operator\"\"" here (without the trailing
space). This will generate an incorrect unmangled name for operator""if,
which can only be written without the space.


> +                        first = t;
> +                    }
> +                }
> +                break;
>              case 's':
>                  db.names.push_back("operator<<");
>                  first += 2;
>
> Modified: libcxxabi/trunk/test/test_demangle.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/test_demangle.cpp?rev=198643&r1=198642&r2=198643&view=diff
>
> ==============================================================================
> --- libcxxabi/trunk/test/test_demangle.cpp (original)
> +++ libcxxabi/trunk/test/test_demangle.cpp Mon Jan  6 17:05:04 2014
> @@ -29584,6 +29584,7 @@ const char* cases[][2] =
>      {"_Z1fPKU11objcproto1A7NSArray", "f(NSArray<A> const*)"},
>      {"_ZNK1AIJ1Z1Y1XEEcv1BIJDpPT_EEIJS2_S1_S0_EEEv", "A<Z, Y,
> X>::operator B<X*, Y*, Z*><X, Y, Z>() const"},
>
>  {"_ZNK3Ncr6Silver7Utility6detail12CallOnThreadIZ53-[DeploymentSetupController
> handleManualServerEntry:]E3$_5EclIJEEEDTclclL_ZNS2_4getTIS4_EERT_vEEspclsr3stdE7forwardIT_Efp_EEEDpOSA_",
> "decltype(-[DeploymentSetupController handleManualServerEntry:]::$_5&
> Ncr::Silver::Utility::detail::getT<-[DeploymentSetupController
> handleManualServerEntry:]::$_5>()()(std::forward<-[DeploymentSetupController
> handleManualServerEntry:]::$_5>(fp)))
> Ncr::Silver::Utility::detail::CallOnThread<-[DeploymentSetupController
> handleManualServerEntry:]::$_5>::operator()<>(-[DeploymentSetupController
> handleManualServerEntry:]::$_5&&) const"},
> +    {"_Zli2_xy", "operator\"\" _x(unsigned long long)"},
>  };
>
>  const unsigned N = sizeof(cases) / sizeof(cases[0]);
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140107/12553ad4/attachment.html>


More information about the cfe-commits mailing list