[cfe-dev] global init-declarator list not parsed as DeclStmt

Firat Kasmis via cfe-dev cfe-dev at lists.llvm.org
Wed Apr 12 14:02:58 PDT 2017


I've posted this originally in the mailing list
http://lists.llvm.org/pipermail/cfe-dev/2015-November/046262.html but so
far, never came across a solution.

2017-04-12 22:35 GMT+02:00 via cfe-dev <cfe-dev at lists.llvm.org>:

> Did you ever find any data in clang that can be used to resolve the
> following? I've got a similar problem and the hack we're using is fragile
> and unappealing.
>
> <quote author='Brennan Vincent via cfe-dev'>
> Hi,
>
> I am trying to transform all T a, b, c = ...; to single line declarations:
>
> T a;
> T b;
> T c = ...;
>
> This works well by matching for DeclStmt and iterating through the
> DeclGroup. Unfortunately, a global declared T a, b, c = ...;  does not
> result in such a DeclStmt:
>
> <cpp>
> int alone;
> int alone2 = 3;
>
> int notalone1, notalone2 = 4;
>
> int main(void)
> {
> int lalone;
> int lalone2 = 3;
>
> int lnotalone1, lnotalone2 = 4;
>
> }
> </cpp>
>
> >> clang-check -ast-dump test.c --
> TranslationUnitDecl 0x1742960 <<invalid sloc>> <invalid sloc>
> |-TypedefDecl 0x1742e58 <<invalid sloc>> <invalid sloc> implicit __int128_t
> '__int128'
> |-TypedefDecl 0x1742eb8 <<invalid sloc>> <invalid sloc> implicit
> __uint128_t 'unsigned __int128'
> |-TypedefDecl 0x1743228 <<invalid sloc>> <invalid sloc> implicit
> __builtin_va_list '__va_list_tag [1]'
> |-VarDecl 0x1743288 </tmp/test.c:1:1, col:5> col:5 alone 'int'
> |-VarDecl 0x1743338 <line:2:1, col:14> col:5 alone2 'int' cinit
> | `-IntegerLiteral 0x1743398 <col:14> 'int' 3
> |-VarDecl 0x17433c8 <line:4:1, col:5> col:5 notalone1 'int'
> |-VarDecl 0x1743438 <col:1, col:28> col:16 notalone2 'int' cinit
> | `-IntegerLiteral 0x1743498 <col:28> 'int' 4
> `-FunctionDecl 0x1743590 <line:6:1, line:13:1> line:6:5 main 'int (void)'
>   `-CompoundStmt 0x1789d80 <line:7:1, line:13:1>
>     |-DeclStmt 0x1789b90 <line:8:2, col:12>
>     | `-VarDecl 0x1789b30 <col:2, col:6> col:6 lalone 'int'
>     |-DeclStmt 0x1789c38 <line:9:2, col:17>
>     | `-VarDecl 0x1789bb8 <col:2, col:16> col:6 lalone2 'int' cinit
>     |   `-IntegerLiteral 0x1789c18 <col:16> 'int' 3
>     `-DeclStmt 0x1789d68 <line:11:2, col:32>
>       |-VarDecl 0x1789c60 <col:2, col:6> col:6 lnotalone1 'int'
>       `-VarDecl 0x1789cd0 <col:2, col:31> col:18 lnotalone2 'int' cinit
>         `-IntegerLiteral 0x1789d30 <col:31> 'int' 4
>
> >> clang-check -version
> LLVM (http://llvm.org/):
>   LLVM version 3.7.0
>   Optimized build.
>   Built Oct 31 2015 (11:07:58).
>   Default target: x86_64-unknown-linux-gnu
>   Host CPU: ivybridge
>
> As you can see, each notalone is a VarDecl whereas VarDecl for lnotaloneX
> is grouped in a DeclStmt. Is there any other way to find all the
> init-declarator lists?
>
> Thanks!
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
> </quote>
> Quoted from:
> http://clang-developers.42468.n3.nabble.com/global-init-
> declarator-list-not-parsed-as-DeclStmt-tp4048843.html
>
>
> _____________________________________
> Sent from http://clang-developers.42468.n3.nabble.com
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170412/95360bc2/attachment.html>


More information about the cfe-dev mailing list