[cfe-dev] Why is "..." printed 'After' the arg name in TypePrinter?

Aaron Ballman aaron at aaronballman.com
Mon Sep 15 06:09:31 PDT 2014


On Mon, Sep 15, 2014 at 5:45 AM, Vassil Vassilev
<vasil.georgiev.vasilev at cern.ch> wrote:
> On 08/01/2014 03:58 PM, Aaron Ballman wrote:
>>
>> On Fri, Aug 1, 2014 at 9:34 AM, Aaron Ballman <aaron at aaronballman.com>
>> wrote:
>>>
>>> On Fri, Aug 1, 2014 at 9:26 AM, Vassil Vassilev
>>> <vasil.georgiev.vasilev at cern.ch> wrote:
>>>>
>>>> Hi,
>>>>    Thanks for fixing this issue:
>>>>    There seem to be another issue with recent clang when printing:
>>>>    cat T.h
>>>>    typedef struct { } __pthread_unwind_buf_t __attribute__
>>>> ((__aligned__));
>>>>
>>>>    clang -cc1  -x c++ -fsyntax-only T.h -ast-print
>>>> struct {
>>>> } typedef __pthread_unwind_buf_t __attribute__((aligned(clang:
>>>>
>>>> /home/vvassilev/workspace/llvm-github/obj/tools/clang/lib/AST/../../include/clang/AST/AttrImpl.inc:294:
>>>> virtual void clang::AlignedAttr::printPretty(llvm::raw_ostream &, const
>>>> clang::PrintingPolicy &) const: Assertion `isalignmentExpr &&
>>>> alignmentExpr
>>>> != nullptr' failed.
>>>
>>> This is a problem with the way we tablegen attribute helper methods.
>>> I'll look into it, thank you for bringing it to my attention!
>>
>> This should be resolved in r214513.
>
> (Sorry for reusing the thread)
> template<typename, unsigned = 0>
> struct __attribute__((type_visibility("default"))) extent;
>
> gets printed as:
>
> template<typename, unsigned = 0>
> struct __attribute__((type_visibility(0))) extent;
>
> (and it doesn't compiler because a string is expected) Is that by design or
> a bug?

That seems like a bug to me. Enumerations print their integral value,
not their enumerator identifier, which is what causes the issue. It
shouldn't be too hard to fix, I'll look into it today.

Thanks!

~Aaron



More information about the cfe-dev mailing list