[cfe-commits] Patches for clang -ast-print

Eli Friedman eli.friedman at gmail.com
Mon Nov 26 16:24:02 PST 2012


On Mon, Nov 26, 2012 at 3:09 PM, Jordan Rose <jordan_rose at apple.com> wrote:
>
> On Nov 26, 2012, at 14:11 , Eli Friedman <eli.friedman at gmail.com> wrote:
>
>> On Sat, Nov 17, 2012 at 10:47 AM, Grzegorz Jablonski <grzejabl at gmail.com> wrote:
>>> On 11/10/2012 12:35 AM, Eli Friedman wrote:
>>>>
>>>> On Wed, Oct 31, 2012 at 9:27 AM, Jordan Rose <jordan_rose at apple.com>
>>>> wrote:
>>>>>
>>>>> [...]
>>>>>
>>>>> If you're okay with adding a PrintImplicitNodes bit to PrintingPolicy
>>>>> that
>>>>> would be good enough for us. Otherwise we'll have to think of something
>>>>> else.
>>>>
>>>> This seems okay to me.  Grzegorz?
>>>
>>> Patch attached.
>>
>> Sorry about the delayed review.
>>
>> It doesn't look like your patch sets the PrintImplicitNodes bit
>> correctly in all the cases we care about; for example, the following
>> testcase:
>>
>> struct MyClass10
>> {
>>    operator const char *() { return "str"; }
>> };
>>
>> void test10(const char *str)
>> {
>>    MyClass10* m;
>>    extern int x;
>>    extern decltype(test10(*m)) x;
>> }
>>
>> currently gives:
>>
>> <stdin>:10:33: error: redefinition of 'x' with a different type:
>> 'decltype(test10(*m.operator const char *()))' (aka 'void') vs 'int'
>>    extern decltype(test10(*m)) x;
>>                                ^
>> <stdin>:9:16: note: previous definition is here
>>    extern int x;
>>               ^
>
> I wonder if PrintImplicitNodes should default to 'false'; dumpers can take the extra time to set it to 'true', but the default behavior will be more user-friendly that way.

This seems reasonable to me.

> It's a conservative change, though; does that mean we're getting it wrong currently?

Yes.

-Eli



More information about the cfe-commits mailing list