[cfe-dev] How to disable the generation of TypedefDecl for __builtin_va_list
Chengnian Sun via cfe-dev
cfe-dev at lists.llvm.org
Mon Feb 22 16:29:32 PST 2016
Thank you for letting me know this API. However, I have another problem:
when I have the forward declaration of vprintf (produced by the
preprocessor), the clang AST will assign the type int to va_list. Is it a
correct way to use prettyprint to dump code from AST?
=======================================
bash-3.2$ cat t1.c
int vprintf(const char * restrict, va_list) __attribute__((__format__
(__printf__, 1, 0)));
bash-3.2$ clang -Xclang -ast-dump -w -fsyntax-only t1.c
*TranslationUnitDecl* 0x10382dcc0 <<invalid sloc>> <invalid sloc>
|-*TypedefDecl* 0x10382e1c0 <<invalid sloc>> <invalid sloc> implicit*
__int128_t* '__int128'
|-*TypedefDecl* 0x10382e220 <<invalid sloc>> <invalid sloc> implicit*
__uint128_t* 'unsigned __int128'
|-*TypedefDecl* 0x10382e5b0 <<invalid sloc>> <invalid sloc> implicit*
__builtin_va_list* '__va_list_tag [1]'
|-*FunctionDecl* 0x10382e910 <t1.c:1:5> col:5 implicit* vprintf* 'int
(const char *, __va_list_tag *)' extern
| |-*ParmVarDecl* 0x103871400 <<invalid sloc>> <invalid sloc> 'const char *'
| |-*ParmVarDecl* 0x103871460 <<invalid sloc>> <invalid sloc> '__va_list_tag
*'
| `-*FormatAttr* 0x1038714d0 <col:5> Implicit printf 1 0
`-*FunctionDecl* 0x103871520 prev 0x10382e910 <col:1, col:90> col:5*
vprintf* 'int (const char *restrict, int)'
|-*ParmVarDecl* 0x10382e640 <col:13, col:24> col:34 'const char *restrict'
|-*ParmVarDecl* 0x10382e6b0 <col:36> col:36* va_list* 'int'
`-*FormatAttr* 0x1038715e0 <col:60, col:88> printf 1 0
On Mon, Feb 22, 2016 at 4:01 PM, David Majnemer <david.majnemer at gmail.com>
wrote:
>
>
> On Mon, Feb 22, 2016 at 3:46 PM, Chengnian Sun via cfe-dev <
> cfe-dev at lists.llvm.org> wrote:
>
>> I want to randomly remove the variable declaration "a" or "b" from the
>> source file. There are two ways to do this.
>> 1) I can pretty print the VarDecl of "a" and "b". However, these
>> three builtin typedefs mentioned above make the modified source file not
>> compilable, as the _builtin_va_list is not defined.
>>
>
> Why not skip things marked as implicit (clang::Decl::isImplicit) ?
>
>
>> 2) I can use rewriter to change the source file. However, as both "a"
>> and "b" are declared in one statement, removing either of them makes the
>> deletion complex.
>>
>> I think another way to do this is to separate the statement "int a, b;"
>> into "int a; int b". Any existing functionality in clang to do this?
>>
>> Thank you. Any advice is appreciated.
>>
>>
>>
>> On Mon, Feb 22, 2016 at 3:30 PM, Meador Inge <meadori at gmail.com> wrote:
>>
>>> On Mon, Feb 22, 2016 at 11:15 AM, Chengnian Sun via cfe-dev <
>>> cfe-dev at lists.llvm.org> wrote:
>>>
>>> Hi,
>>>>
>>>> I found out that for the following code (only containing two variable
>>>> declarations), clang will generate three internal typedef declarations. Is
>>>> there any way to disable the generation of the three typedef?
>>>>
>>>
>>> Not that I know of. What problem are you trying to solve by disabling
>>> them?
>>>
>>> -- Meador
>>>
>>
>>
>>
>> --
>> Best Regards.
>>
>> Chengnian SUN.
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>
>>
>
--
Best Regards.
Chengnian SUN.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160222/080b0a5c/attachment.html>
More information about the cfe-dev
mailing list