patch: add mangling for attribute enable_if

Nick Lewycky nicholas at mxc.ca
Sun Mar 9 10:28:32 PDT 2014


The attached mangle-enable_if-1.patch adds a mangling for 
__attribute__((enable_if(expr, string-literal))) to clang.

demangle-enable_if-1.patch adds support to libcxxabi's demangler. This 
patch I'm not very confident in. libcxxabi's cxa_demangle lacks comments 
and assertions, leaving its design criteria a mystery. I think the 
functions return 'first' in case of error. I added a vector<> inside the 
demangler, I don't know whether that's OK because it means doing 
allocation. I don't know what the two strings in the pair in db.names 
are for, but the first one appears to be the demangling so I put it 
there. I don't understand what the members in 'db' are for, since they 
aren't commented (db.tag_templates?). The code is cargo culted from 
parse_template_args and simplified down by making wild assumptions 
(db.tag_templates is always false!) and constant folding.

Also the demangler seems pretty buggy. It wraps expressions in extra 
parentheses which don't correspond to pi .. E expressions (if you were 
to remangle it, you'd get the extra pi .. E). A mangling for "&function" 
ends up demangling "&(function())" which has different semantic meaning. 
  I'm assuming these problems are pre-existing. While "_Z3foo" demangles 
to "foo" and "_Z3foov" demangles to "foo()", the same things with an 
attribute demangle to include parens. For example, "_Z3fooUa3bar" and 
"_Z3fooUa3barv" both demangle to "foo() __attribute__((bar))", never 
"foo __attribute__((bar))".

Finally, I've never even compiled the change to the tests. I have tested 
those exact manglings and seen what cxa_demangle does to them, but it 
was easier to write a standalone tool than to deal with "testit".

Please review!

Nick
-------------- next part --------------
A non-text attachment was scrubbed...
Name: mangle-enable_if-1.patch
Type: text/x-diff
Size: 2201 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140309/94ee55bd/attachment.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: demangle-enable_if-1.patch
Type: text/x-diff
Size: 5771 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140309/94ee55bd/attachment-0001.patch>


More information about the cfe-commits mailing list