Menu

clang import

2020-01-11
2020-01-27
  • Daniel Marjamäki

    In my opinion, the clang import is very promising. It's far from complete but it's possible to test it now.

    So feel free to test the "--clang" option.

    If you write something like for instance:

    cppcheck --clang --debug lib/settings.cpp
    

    then the output might contain some ?UnhandledId? tokens. That will be fixed ... Let me know if you see some other kind of garbage (wrong variable names, bad operators, etc).

    And Cppcheck should not crash when --clang is used.

    I have used clang 7.0.1-8 during the development and I expect there are minor differences with other Clang versions.

     
  • fuzzel

    fuzzel - 2020-01-11

    Hmm for me it does nothing. It just prints Checking lib/settings.cpp... and then nothing happens. I tried clang v7.0.1 and v9.0

     
  • Daniel Marjamäki

    strange. I don't know how that can happen.. if something fails then as far as I see you should see some error message on the screen. Can you see if clangimport::parseClangAstDump is called?

     
  • Daniel Marjamäki

    Maybe it's some dump format mismatch.. Could you show me some ast dump. Put this in a file 1.c:

    int x = 3;
    

    And then, what is the output of this comand:

    clang -cc1 -ast-dump 1.c
    
     
  • fuzzel

    fuzzel - 2020-01-12

    The problem is not the ast itself but the actual clang command. cppcheck --clang --debug lib/settings.cppunder Windows gives me the follwing cmd string that is passed to execudeCommand():
    clang++ -cc1 -ast-dump -internal-isystem "d:\\Tools\\LLVM\\lib\\clang\\9.0.0\\include" -internal-isystem "D:\\Tools\\Microsoft -internal-isystem "C:\\Program -internal-isystem "C:\\Program -internal-isystem "C:\\Program -internal-isystem "C:\\Program -fcxx-exceptions lib/settings.cpp
    looks like the -internal-isystem paths aren't completely enclosed with "". If I copy the command line and fix the " then everything works.

     
  • Daniel Marjamäki

    aha.. the split function has to handle " then

     
  • Daniel Marjamäki

    does that work now?

     
  • fuzzel

    fuzzel - 2020-01-12

    Yes now it works for me :)

     
  • versat

    versat - 2020-01-23

    I have not looked into the clang import, just saw that you are working on it.
    What exactly should the clang import do? From what I saw until now my guess is that clang is used to create the AST instead of internal code like simplecpp.

    I thought I just test it so I maybe get a better understanding of it, but it crashed. Not sure what went wrong (I used Cygwin 64 on Windows 7):

    $ ./cppcheck --clang --cppcheck-build-dir=./temp -I./externals/tinyxml ./lib/analyzerinfo.cpp
    Checking ./lib/analyzerinfo.cpp...
    Segmentation fault (core dumped)
    

    Her is some GDB output for the crash:

    Checking ./lib/analyzerinfo.cpp...
    [New Thread 10648.0x25c8]
    
    Thread 1 "cppcheck" received signal SIGSEGV, Segmentation fault.
    0x00000001004a1487 in __gnu_cxx::__atomic_add (__mem=0x3b, __val=1) at /usr/lib/gcc/x86_64-pc-cygwin/7.4.0/include/c++/ext/atomicity.h:53
    53        { __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
    (gdb) bt
    #0  0x00000001004a1487 in __gnu_cxx::__atomic_add (__mem=0x3b, __val=1) at /usr/lib/gcc/x86_64-pc-cygwin/7.4.0/include/c++/ext/atomicity.h:53
    #1  0x00000001004a154a in __gnu_cxx::__atomic_add_dispatch (__mem=0x3b, __val=1) at /usr/lib/gcc/x86_64-pc-cygwin/7.4.0/include/c++/ext/atomicity.h:96
    #2  0x0000000100674181 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy (this=0x33) at /usr/lib/gcc/x86_64-pc-cygwin/7.4.0/include/c++/bits/shared_ptr_base.h:138
    #3  0x000000010066d389 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count (this=0xffff8508, __r=...) at /usr/lib/gcc/x86_64-pc-cygwin/7.4.0/include/c++/bits/shared_ptr_base.h:691
    #4  0x000000010066a916 in std::__shared_ptr<clangimport::AstNode, (__gnu_cxx::_Lock_policy)2>::__shared_ptr (this=0xffff8500) at /usr/lib/gcc/x86_64-pc-cygwin/7.4.0/include/c++/bits/shared_ptr_base.h:1121
    #5  0x000000010065dc70 in std::shared_ptr<clangimport::AstNode>::shared_ptr (this=0xffff8500) at /usr/lib/gcc/x86_64-pc-cygwin/7.4.0/include/c++/bits/shared_ptr.h:119
    #6  0x00000001004a6c39 in clangimport::AstNode::createTokens (this=0x800fbdac0, tokenList=0xffffadb0) at lib/clangimport.cpp:765
    #7  0x00000001004a4837 in clangimport::AstNode::createTokens (this=0x801797c50, tokenList=0xffffadb0) at lib/clangimport.cpp:570
    #8  0x00000001004aaab2 in clangimport::AstNode::createTokensFunctionDecl (this=0x8012f85e0, tokenList=0xffffadb0) at lib/clangimport.cpp:1014
    #9  0x00000001004a692f in clangimport::AstNode::createTokens (this=0x8012f85e0, tokenList=0xffffadb0) at lib/clangimport.cpp:744
    #10 0x00000001005ebb5c in clangimport::AstNode::createTokens1 (this=0x8012f85e0, tokenList=0xffffadb0) at lib/clangimport.cpp:237
    #11 0x00000001004ac17c in clangimport::parseClangAstDump (tokenizer=0xffffadb0, f=...) at lib/clangimport.cpp:1165
    #12 0x00000001004b0892 in CppCheck::check (this=0xffffbce0, path=...) at lib/cppcheck.cpp:339
    #13 0x00000001005d1f6e in CppCheckExecutor::check_internal (this=0xffffc8e0, cppcheck=..., argv=0xffffcbb0) at cli/cppcheckexecutor.cpp:913
    #14 0x00000001005d0b80 in CppCheckExecutor::check (this=0xffffc8e0, argc=5, argv=0xffffcbb0) at cli/cppcheckexecutor.cpp:227
    #15 0x00000001005d3f2b in main (argc=5, argv=0xffffcbb0) at cli/main.cpp:95
    

    Clang info:

    $ clang --version
    clang version 8.0.1 (tags/RELEASE_801/final)
    Target: x86_64-unknown-windows-cygnus
    Thread model: posix
    InstalledDir: /usr/bin
    

    It also crashes when I try to analyze ./cli (backtrace looks similar):

    $ ./cppcheck --clang --cppcheck-build-dir=./temp -I./externals/tinyxml -I./lib ./cli/
    Checking ./cli/cmdlineparser.cpp...
    Segmentation fault (core dumped)
    
     

    Last edit: versat 2020-01-23
    • Daniel Marjamäki

      I have not looked into the clang import, just saw that you are working on it.
      What exactly should the clang import do? From what I saw until now my guess is that clang is used to create the AST instead of internal code like simplecpp.

      Yes the intention is that it will be an option for users that are not satisfied with the builtin parser in Cppcheck.

      My main reason for adding it was that I want that users will be able to trust our "bug hunting" feature. With limited parsing we can't detect all bugs.

       
      👍
      1
  • Daniel Marjamäki

    interesting. that command works for me. It crashes for you in clangimport::parseClangAstDump so if I get your ast I should be able to reproduce it.

    Can you please open the file clangimport.cpp. In the function createTokens1(TokenList *tokenList) there is this code: //dumpAst();. Can you please uncomment that and rerun Cppcheck. Each AST tree that is converted is then printed on the screen. Can you show me the last AST tree before the crash?

    It seems that the crash happens on this line:

            AstNodePtr cond = children[children.size() - 3];
    

    I guess you get a IfStmt with fewer than 3 children .. strange!

     
    • versat

      versat - 2020-01-23

      Ok, here is the end of the dumpAst() output for the command ./cppcheck --clang --cppcheck-build-dir=./temp -I./externals/tinyxml ./lib/analyzerinfo.cpp, I hope I got everything that is necessary:

      FunctionDecl 0x8014afa28 <line:34:1, line:44:1> line:34:20 used getFilename 'std::string (const std::string &)' static
        ParmVarDecl 0x8014af960 <col:32, col:51> col:51 used fullpath 'const std::string &'
        CompoundStmt 0x8014b06c8 <line:35:1, line:44:1>
          DeclStmt 0x8014afd50 <line:36:5, col:63>
            VarDecl 0x8014afb78 <col:5, col:62> col:28 used pos1 'std::string::size_type':'unsigned long' cinit
              CXXMemberCallExpr 0x8014afcb8 <col:35, col:62> 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::size_type':'unsigned long'
                MemberExpr 0x8014afc88 <col:35, col:44> '<bound member function type>' .find_last_of 0x80081e420
                  DeclRefExpr 0x8014afbd8 <col:35> 'const std::string':'const std::basic_string<char>' lvalue ParmVar 0x8014af960 'fullpath' 'const std::string &'
                ImplicitCastExpr 0x8014afce8 <col:57> 'const char *' <ArrayToPointerDecay>
                  StringLiteral 0x8014afc68 <col:57> 'const char [3]' lvalue "/\\"
                CXXDefaultArgExpr 0x8014afd38 <<invalid sloc> > 'typename basic_string<char, char_traits<char>, allocator<char> >::size_type':'unsigned long'
          BinaryOperator 0x8014affa8 <line:37:5, col:57> 'std::string::size_type':'unsigned long' lvalue '='
            DeclRefExpr 0x8014afd68 <col:5> 'std::string::size_type':'unsigned long' lvalue Var 0x8014afb78 'pos1' 'std::string::size_type':'unsigned long'
            ConditionalOperator 0x8014aff78 <col:12, col:57> 'unsigned long'
              ParenExpr 0x8014afe70 <col:12, col:38> 'bool'
                BinaryOperator 0x8014afe50 <col:13, col:34> 'bool' '=='
                  ImplicitCastExpr 0x8014afe20 <col:13> 'std::string::size_type':'unsigned long' <LValueToRValue>
                    DeclRefExpr 0x8014afd88 <col:13> 'std::string::size_type':'unsigned long' lvalue Var 0x8014afb78 'pos1' 'std::string::size_type':'unsigned long'
                  ImplicitCastExpr 0x8014afe38 <col:21, col:34> 'typename basic_string<char, char_traits<char>, allocator<char> >::size_type':'unsigned long' <LValueToRValue>
                    DeclRefExpr 0x8014afdf0 <col:21, col:34> 'const typename basic_string<char, char_traits<char>, allocator<char> >::size_type':'const unsigned long' lvalue Var 0x800dad5e0 'npos' 'const typename basic_string<char, char_traits<char>, allocator<char> >::size_type':'const unsigned long'
              ImplicitCastExpr 0x8014aff60 <col:42> 'unsigned long' <IntegralCast>
                IntegerLiteral 0x8014afe90 <col:42> 'unsigned int' 0
              ParenExpr 0x8014aff40 <col:47, col:57> 'unsigned long'
                BinaryOperator 0x8014aff20 <col:48, col:55> 'unsigned long' '+'
                  ImplicitCastExpr 0x8014afef0 <col:48> 'std::string::size_type':'unsigned long' <LValueToRValue>
                    DeclRefExpr 0x8014afeb0 <col:48> 'std::string::size_type':'unsigned long' lvalue Var 0x8014afb78 'pos1' 'std::string::size_type':'unsigned long'
                  ImplicitCastExpr 0x8014aff08 <col:55> 'unsigned long' <IntegralCast>
                    IntegerLiteral 0x8014afed0 <col:55> 'unsigned int' 1
          DeclStmt 0x8014b01e0 <line:38:5, col:54>
            VarDecl 0x8014b0028 <col:5, col:53> col:28 used pos2 'std::string::size_type':'unsigned long' cinit
              CXXMemberCallExpr 0x8014b0160 <col:35, col:53> 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::size_type':'unsigned long'
                MemberExpr 0x8014b0130 <col:35, col:44> '<bound member function type>' .rfind 0x80081d660
                  DeclRefExpr 0x8014b0088 <col:35> 'const std::string':'const std::basic_string<char>' lvalue ParmVar 0x8014af960 'fullpath' 'const std::string &'
                CharacterLiteral 0x8014b0118 <col:50> 'char' 46
                CXXDefaultArgExpr 0x8014b01c8 <<invalid sloc> > 'typename basic_string<char, char_traits<char>, allocator<char> >::size_type':'unsigned long'
          IfStmt 0x8014b0358 <line:39:5, line:40:29>
            BinaryOperator 0x8014b0268 <line:39:9, col:16> 'bool' '<'
              ImplicitCastExpr 0x8014b0238 <col:9> 'std::string::size_type':'unsigned long' <LValueToRValue>
                DeclRefExpr 0x8014b01f8 <col:9> 'std::string::size_type':'unsigned long' lvalue Var 0x8014b0028 'pos2' 'std::string::size_type':'unsigned long'
              ImplicitCastExpr 0x8014b0250 <col:16> 'std::string::size_type':'unsigned long' <LValueToRValue>
                DeclRefExpr 0x8014b0218 <col:16> 'std::string::size_type':'unsigned long' lvalue Var 0x8014afb78 'pos1' 'std::string::size_type':'unsigned long'
            BinaryOperator 0x8014b0338 <line:40:9, col:29> 'std::string::size_type':'unsigned long' lvalue '='
              DeclRefExpr 0x8014b0288 <col:9> 'std::string::size_type':'unsigned long' lvalue Var 0x8014b0028 'pos2' 'std::string::size_type':'unsigned long'
              ImplicitCastExpr 0x8014b0320 <col:16, col:29> 'typename basic_string<char, char_traits<char>, allocator<char> >::size_type':'unsigned long' <LValueToRValue>
                DeclRefExpr 0x8014b02f0 <col:16, col:29> 'const typename basic_string<char, char_traits<char>, allocator<char> >::size_type':'const unsigned long' lvalue Var 0x800dad5e0 'npos' 'const typename basic_string<char, char_traits<char>, allocator<char> >::size_type':'const unsigned long'
          IfStmt 0x8014b0528 <line:41:5, line:42:23>
            BinaryOperator 0x8014b0438 <line:41:9, col:30> 'bool' '!='
              ImplicitCastExpr 0x8014b0408 <col:9> 'std::string::size_type':'unsigned long' <LValueToRValue>
                DeclRefExpr 0x8014b0370 <col:9> 'std::string::size_type':'unsigned long' lvalue Var 0x8014b0028 'pos2' 'std::string::size_type':'unsigned long'
              ImplicitCastExpr 0x8014b0420 <col:17, col:30> 'typename basic_string<char, char_traits<char>, allocator<char> >::size_type':'unsigned long' <LValueToRValue>
                DeclRefExpr 0x8014b03d8 <col:17, col:30> 'const typename basic_string<char, char_traits<char>, allocator<char> >::size_type':'const unsigned long' lvalue Var 0x800dad5e0 'npos' 'const typename basic_string<char, char_traits<char>, allocator<char> >::size_type':'const unsigned long'
            BinaryOperator 0x8014b0508 <line:42:9, col:23> 'std::string::size_type':'unsigned long' lvalue '='
              DeclRefExpr 0x8014b0458 <col:9> 'std::string::size_type':'unsigned long' lvalue Var 0x8014b0028 'pos2' 'std::string::size_type':'unsigned long'
              BinaryOperator 0x8014b04e8 <col:16, col:23> 'unsigned long' '-'
                ImplicitCastExpr 0x8014b04b8 <col:16> 'std::string::size_type':'unsigned long' <LValueToRValue>
                  DeclRefExpr 0x8014b0478 <col:16> 'std::string::size_type':'unsigned long' lvalue Var 0x8014b0028 'pos2' 'std::string::size_type':'unsigned long'
                ImplicitCastExpr 0x8014b04d0 <col:23> 'std::string::size_type':'unsigned long' <LValueToRValue>
                  DeclRefExpr 0x8014b0498 <col:23> 'std::string::size_type':'unsigned long' lvalue Var 0x8014afb78 'pos1' 'std::string::size_type':'unsigned long'
          ReturnStmt 0x8014b06b8 <line:43:5, col:37>
            ExprWithCleanups 0x8014b06a0 <col:12, col:37> 'std::string':'std::basic_string<char>'
              CXXConstructExpr 0x8014b0670 <col:12, col:37> 'std::string':'std::basic_string<char>' 'void (std::basic_string<char> &&) noexcept' elidable
                MaterializeTemporaryExpr 0x8014b0658 <col:12, col:37> 'std::basic_string<char>' xvalue
                  CXXBindTemporaryExpr 0x8014b0638 <col:12, col:37> 'std::basic_string<char>' (CXXTemporary 0x8014b0630)
                    CXXMemberCallExpr 0x8014b05d0 <col:12, col:37> 'std::basic_string<char>'
                      MemberExpr 0x8014b0560 <col:12, col:21> '<bound member function type>' .substr 0x80081f7b8
                        DeclRefExpr 0x8014b0540 <col:12> 'const std::string':'const std::basic_string<char>' lvalue ParmVar 0x8014af960 'fullpath' 'const std::string &'
                      ImplicitCastExpr 0x8014b0600 <col:28> 'std::string::size_type':'unsigned long' <LValueToRValue>
                        DeclRefExpr 0x8014b0590 <col:28> 'std::string::size_type':'unsigned long' lvalue Var 0x8014afb78 'pos1' 'std::string::size_type':'unsigned long'
                      ImplicitCastExpr 0x8014b0618 <col:33> 'std::string::size_type':'unsigned long' <LValueToRValue>
                        DeclRefExpr 0x8014b05b0 <col:33> 'std::string::size_type':'unsigned long' lvalue Var 0x8014b0028 'pos2' 'std::string::size_type':'unsigned long'
      Segmentation fault (core dumped)
      
       

      Last edit: versat 2020-01-23
      • Daniel Marjamäki

        yes that is the exact tree I wanted to have. weird AST. In your Clang AST output there are only 2 children for the IfStmt.

         
  • Daniel Marjamäki

    maybe you can try it again. I have tried to fix your segmentation fault.

     
    • versat

      versat - 2020-01-24

      I have tried it with your change and now I get this for ./cppcheck --clang --cppcheck-build-dir=./temp -I./externals/tinyxml ./lib/analyzerinfo.cpp:

      CXXMethodDecl 0x80160dd88 parent 0x801542768 prev 0x801543198 <line:46:1, line:61:1> line:46:27 writeFilesTxt 'void (const std::string &, const std::list<std::string> &, const std::list<ImportProject::FileSettings> &)'
        ParmVarDecl 0x80160d728 <col:41, col:60> col:60 used buildDir 'const std::string &'
        ParmVarDecl 0x80160d9f0 <col:70, col:100> col:100 used sourcefiles 'const std::list<std::string> &'
        ParmVarDecl 0x80160dcb0 <col:113, col:159> col:159 used fileSettings 'const std::list<ImportProject::FileSettings> &'
        CompoundStmt 0x801671880 <line:47:1, line:61:1>
          DeclStmt 0x8016422a8 <line:48:5, col:50>
            VarDecl 0x80160e638 <col:5, col:41> col:41 used fileCount 'std::map<std::string, unsigned int>':'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >' callinit
              CXXConstructExpr 0x801642270 <col:41> 'std::map<std::string, unsigned int>':'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >' 'void () throw()'
          DeclStmt 0x801642918 <line:50:5, col:56>
            VarDecl 0x801642330 <col:5, col:55> col:23 used filesTxt 'const std::string':'const std::basic_string<char>' callinit
              ExprWithCleanups 0x801642900 <col:23, col:55> 'const std::string':'const std::basic_string<char>'
                CXXConstructExpr 0x8016428d0 <col:23, col:55> 'const std::string':'const std::basic_string<char>' 'void (std::basic_string<char> &&) noexcept' elidable
                  MaterializeTemporaryExpr 0x8016428b8 <col:32, col:43> 'basic_string<char, std::char_traits<char>, std::allocator<char> >':'std::basic_string<char>' xvalue
                    CXXBindTemporaryExpr 0x801642848 <col:32, col:43> 'basic_string<char, std::char_traits<char>, std::allocator<char> >':'std::basic_string<char>' (CXXTemporary 0x801642840)
                      CXXOperatorCallExpr 0x801642808 <col:32, col:43> 'basic_string<char, std::char_traits<char>, std::allocator<char> >':'std::basic_string<char>' adl
                        ImplicitCastExpr 0x8016427f0 <col:41> 'basic_string<char, std::char_traits<char>, std::allocator<char> > (*)(const basic_string<char, std::char_traits<char>, std::allocator<char> > &, const char *)' <FunctionToPointerDecay>
                          DeclRefExpr 0x8016427d0 <col:41> 'basic_string<char, std::char_traits<char>, std::allocator<char> > (const basic_string<char, std::char_traits<char>, std::allocator<char> > &, const char *)' lvalue Function 0x8009a08b8 'operator+' 'basic_string<char, std::char_traits<char>, std::allocator<char> > (const basic_string<char, std::char_traits<char>, std::allocator<char> > &, const char *)'
                        DeclRefExpr 0x8016422f0 <col:32> 'const std::string':'const std::basic_string<char>' lvalue ParmVar 0x80160d728 'buildDir' 'const std::string &'
                        ImplicitCastExpr 0x8016427b8 <col:43> 'const char *' <ArrayToPointerDecay>
                          StringLiteral 0x801642390 <col:43> 'const char [11]' lvalue "/files.txt"
          DeclStmt 0x801642b38 <line:51:5, col:33>
            VarDecl 0x8016429c8 <col:5, col:32> col:19 used fout 'std::ofstream':'std::basic_ofstream<char>' callinit
              CXXConstructExpr 0x801642b00 <col:19, col:32> 'std::ofstream':'std::basic_ofstream<char>' 'void (const std::string &, ios_base::openmode)'
                DeclRefExpr 0x801642988 <col:24> 'const std::string':'const std::basic_string<char>' lvalue Var 0x801642330 'filesTxt' 'const std::string':'const std::basic_string<char>'
                CXXDefaultArgExpr 0x801642ae8 <<invalid sloc> > 'std::_Ios_Openmode'
          CXXForRangeStmt 0x801647b08 <line:52:5, line:55:5>
            <<<<NULL>>>>>
            DeclStmt 0x801642e00 <line:52:33>
              VarDecl 0x801642c50 <col:33> col:33 implicit used __range1 'const std::list<std::basic_string<char>, std::allocator<std::basic_string<char> > > &' cinit
                DeclRefExpr 0x801642b80 <col:33> 'const std::list<std::string>':'const std::list<std::basic_string<char>, std::allocator<std::basic_string<char> > >' lvalue ParmVar 0x80160d9f0 'sourcefiles' 'const std::list<std::string> &'
            DeclStmt 0x801646538 <col:31>
              VarDecl 0x801642e68 <col:31> col:31 implicit used __begin1 'std::_List_const_iterator<std::basic_string<char> >':'std::_List_const_iterator<std::basic_string<char> >' cinit
                ExprWithCleanups 0x801646398 <col:31> 'std::_List_const_iterator<std::basic_string<char> >':'std::_List_const_iterator<std::basic_string<char> >'
                  CXXConstructExpr 0x801646368 <col:31> 'std::_List_const_iterator<std::basic_string<char> >':'std::_List_const_iterator<std::basic_string<char> >' 'void (std::_List_const_iterator<std::basic_string<char> > &&) noexcept' elidable
                    MaterializeTemporaryExpr 0x801646230 <col:31> 'std::list<std::basic_string<char>, std::allocator<std::basic_string<char> > >::const_iterator':'std::_List_const_iterator<std::basic_string<char> >' xvalue
                      CXXMemberCallExpr 0x801642fc8 <col:31> 'std::list<std::basic_string<char>, std::allocator<std::basic_string<char> > >::const_iterator':'std::_List_const_iterator<std::basic_string<char> >'
                        MemberExpr 0x801642f98 <col:31> '<bound member function type>' .begin 0x8014dce30
                          DeclRefExpr 0x801642e18 <col:31> 'const std::list<std::basic_string<char>, std::allocator<std::basic_string<char> > >' lvalue Var 0x801642c50 '__range1' 'const std::list<std::basic_string<char>, std::allocator<std::basic_string<char> > > &'
            DeclStmt 0x801646550 <col:31>
              VarDecl 0x801642ed8 <col:31> col:31 implicit used __end1 'std::_List_const_iterator<std::basic_string<char> >':'std::_List_const_iterator<std::basic_string<char> >' cinit
                ExprWithCleanups 0x801646520 <col:31> 'std::_List_const_iterator<std::basic_string<char> >':'std::_List_const_iterator<std::basic_string<char> >'
                  CXXConstructExpr 0x8016464f0 <col:31> 'std::_List_const_iterator<std::basic_string<char> >':'std::_List_const_iterator<std::basic_string<char> >' 'void (std::_List_const_iterator<std::basic_string<char> > &&) noexcept' elidable
                    MaterializeTemporaryExpr 0x8016464d8 <col:31> 'std::list<std::basic_string<char>, std::allocator<std::basic_string<char> > >::const_iterator':'std::_List_const_iterator<std::basic_string<char> >' xvalue
                      CXXMemberCallExpr 0x801646440 <col:31> 'std::list<std::basic_string<char>, std::allocator<std::basic_string<char> > >::const_iterator':'std::_List_const_iterator<std::basic_string<char> >'
                        MemberExpr 0x801646410 <col:31> '<bound member function type>' .end 0x8014dcfd0
                          DeclRefExpr 0x801642e38 <col:31> 'const std::list<std::basic_string<char>, std::allocator<std::basic_string<char> > >' lvalue Var 0x801642c50 '__range1' 'const std::list<std::basic_string<char>, std::allocator<std::basic_string<char> > > &'
            CXXOperatorCallExpr 0x801647860 <col:31> 'bool'
              ImplicitCastExpr 0x801647848 <col:31> 'bool (*)(const std::_List_const_iterator<std::basic_string<char> >::_Self &) const noexcept' <FunctionToPointerDecay>
                DeclRefExpr 0x8016477d0 <col:31> 'bool (const std::_List_const_iterator<std::basic_string<char> >::_Self &) const noexcept' lvalue CXXMethod 0x8016445d0 'operator!=' 'bool (const std::_List_const_iterator<std::basic_string<char> >::_Self &) const noexcept'
              ImplicitCastExpr 0x8016477b8 <col:31> 'const std::_List_const_iterator<std::basic_string<char> >' lvalue <NoOp>
                DeclRefExpr 0x801646568 <col:31> 'std::_List_const_iterator<std::basic_string<char> >':'std::_List_const_iterator<std::basic_string<char> >' lvalue Var 0x801642e68 '__begin1' 'std::_List_const_iterator<std::basic_string<char> >':'std::_List_const_iterator<std::basic_string<char> >'
              ImplicitCastExpr 0x801647770 <col:31> 'const std::_List_const_iterator<std::basic_string<char> >':'const std::_List_const_iterator<std::basic_string<char> >' lvalue <NoOp>
                DeclRefExpr 0x801646588 <col:31> 'std::_List_const_iterator<std::basic_string<char> >':'std::_List_const_iterator<std::basic_string<char> >' lvalue Var 0x801642ed8 '__end1' 'std::_List_const_iterator<std::basic_string<char> >':'std::_List_const_iterator<std::basic_string<char> >'
            CXXOperatorCallExpr 0x801647980 <col:31> 'std::_List_const_iterator<std::basic_string<char> >::_Self':'std::_List_const_iterator<std::basic_string<char> >' lvalue
              ImplicitCastExpr 0x801647968 <col:31> 'std::_List_const_iterator<std::basic_string<char> >::_Self &(*)() noexcept' <FunctionToPointerDecay>
                DeclRefExpr 0x8016478e8 <col:31> 'std::_List_const_iterator<std::basic_string<char> >::_Self &() noexcept' lvalue CXXMethod 0x801643ec0 'operator++' 'std::_List_const_iterator<std::basic_string<char> >::_Self &() noexcept'
              DeclRefExpr 0x801647898 <col:31> 'std::_List_const_iterator<std::basic_string<char> >':'std::_List_const_iterator<std::basic_string<char> >' lvalue Var 0x801642e68 '__begin1' 'std::_List_const_iterator<std::basic_string<char> >':'std::_List_const_iterator<std::basic_string<char> >'
            DeclStmt 0x801642c28 <col:10, col:44>
              VarDecl 0x801642bc8 <col:10, col:31> col:29 used f 'const std::string &' cinit
                CXXOperatorCallExpr 0x801647a80 <col:31> 'const std::basic_string<char>':'const std::basic_string<char>' lvalue
                  ImplicitCastExpr 0x801647a68 <col:31> 'std::_List_const_iterator<std::basic_string<char> >::reference (*)() const noexcept' <FunctionToPointerDecay>
                    DeclRefExpr 0x8016479e8 <col:31> 'std::_List_const_iterator<std::basic_string<char> >::reference () const noexcept' lvalue CXXMethod 0x801643bf0 'operator*' 'std::_List_const_iterator<std::basic_string<char> >::reference () const noexcept'
                  ImplicitCastExpr 0x8016479d0 <col:31> 'const std::_List_const_iterator<std::basic_string<char> >' lvalue <NoOp>
                    DeclRefExpr 0x8016479b0 <col:31> 'std::_List_const_iterator<std::basic_string<char> >':'std::_List_const_iterator<std::basic_string<char> >' lvalue Var 0x801642e68 '__begin1' 'std::_List_const_iterator<std::basic_string<char> >':'std::_List_const_iterator<std::basic_string<char> >'
            CompoundStmt 0x801664bd0 <col:46, line:55:5>
              DeclStmt 0x801647dc0 <line:53:9, col:49>
                VarDecl 0x801647bb8 <col:9, col:48> col:27 used afile 'const std::string':'const std::basic_string<char>' cinit
                  ExprWithCleanups 0x801647da8 <col:35, col:48> 'const std::string':'const std::basic_string<char>'
                    CXXConstructExpr 0x801647d78 <col:35, col:48> 'const std::string':'const std::basic_string<char>' 'void (std::basic_string<char> &&) noexcept' elidable
                      MaterializeTemporaryExpr 0x801647d60 <col:35, col:48> 'std::string':'std::basic_string<char>' xvalue
                        CXXBindTemporaryExpr 0x801647d40 <col:35, col:48> 'std::string':'std::basic_string<char>' (CXXTemporary 0x801647d38)
                          CallExpr 0x801647d10 <col:35, col:48> 'std::string':'std::basic_string<char>'
                            ImplicitCastExpr 0x801647cf8 <col:35> 'std::string (*)(const std::string &)' <FunctionToPointerDecay>
                              DeclRefExpr 0x801647c80 <col:35> 'std::string (const std::string &)' lvalue Function 0x80160c9e8 'getFilename' 'std::string (const std::string &)'
                            DeclRefExpr 0x801647c60 <col:47> 'const std::string':'const std::basic_string<char>' lvalue Var 0x801642bc8 'f' 'const std::string &'
              ExprWithCleanups 0x801664bb8 <line:54:9, col:119> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue
                CXXOperatorCallExpr 0x801664b80 <col:9, col:119> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue adl
                  ImplicitCastExpr 0x801664b68 <col:116> 'basic_ostream<char, std::char_traits<char> > &(*)(basic_ostream<char, std::char_traits<char> > &, char)' <FunctionToPointerDecay>
                    DeclRefExpr 0x801664ae8 <col:116> 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, char)' lvalue Function 0x800b0ded8 'operator<<' 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, char)'
                  CXXOperatorCallExpr 0x801662d50 <col:9, col:114> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue adl
                    ImplicitCastExpr 0x801662d38 <col:63> 'basic_ostream<char, std::char_traits<char> > &(*)(basic_ostream<char, std::char_traits<char> > &, const basic_string<char, std::char_traits<char>, std::allocator<char> > &)' <FunctionToPointerDecay>
                      DeclRefExpr 0x801662d18 <col:63> 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const basic_string<char, std::char_traits<char>, std::allocator<char> > &)' lvalue Function 0x80091cc38 'operator<<' 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const basic_string<char, std::char_traits<char>, std::allocator<char> > &)'
                    CXXOperatorCallExpr 0x80165ef88 <col:9, col:58> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue adl
                      ImplicitCastExpr 0x80165ef70 <col:55> 'basic_ostream<char, std::char_traits<char> > &(*)(basic_ostream<char, std::char_traits<char> > &, const char *)' <FunctionToPointerDecay>
                        DeclRefExpr 0x80165ef50 <col:55> 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const char *)' lvalue Function 0x800b104d8 'operator<<' 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const char *)'
                      CXXOperatorCallExpr 0x80165e200 <col:9, col:53> 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type':'std::basic_ostream<char>' lvalue
                        ImplicitCastExpr 0x80165e1e8 <col:31> 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(*)(unsigned int)' <FunctionToPointerDecay>
                          DeclRefExpr 0x80165e170 <col:31> 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(unsigned int)' lvalue CXXMethod 0x800b08508 'operator<<' 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(unsigned int)'
                        CXXOperatorCallExpr 0x80165c2a0 <col:9, col:26> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue adl
                          ImplicitCastExpr 0x80165c288 <col:23> 'basic_ostream<char, std::char_traits<char> > &(*)(basic_ostream<char, std::char_traits<char> > &, const char *)' <FunctionToPointerDecay>
                            DeclRefExpr 0x80165c268 <col:23> 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const char *)' lvalue Function 0x800b104d8 'operator<<' 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const char *)'
                          CXXOperatorCallExpr 0x801651e60 <col:9, col:17> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue adl
                            ImplicitCastExpr 0x801651e48 <col:14> 'basic_ostream<char, std::char_traits<char> > &(*)(basic_ostream<char, std::char_traits<char> > &, const basic_string<char, std::char_traits<char>, std::allocator<char> > &)' <FunctionToPointerDecay>
                              DeclRefExpr 0x801651dc8 <col:14> 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const basic_string<char, std::char_traits<char>, std::allocator<char> > &)' lvalue Function 0x80091cc38 'operator<<' 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const basic_string<char, std::char_traits<char>, std::allocator<char> > &)'
                            ImplicitCastExpr 0x801651da8 <col:9> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue <DerivedToBase (basic_ostream)>
                              DeclRefExpr 0x801647dd8 <col:9> 'std::ofstream':'std::basic_ofstream<char>' lvalue Var 0x8016429c8 'fout' 'std::ofstream':'std::basic_ofstream<char>'
                            DeclRefExpr 0x801647df8 <col:17> 'const std::string':'const std::basic_string<char>' lvalue Var 0x801647bb8 'afile' 'const std::string':'const std::basic_string<char>'
                          ImplicitCastExpr 0x80165c250 <col:26> 'const char *' <ArrayToPointerDecay>
                            StringLiteral 0x801651e98 <col:26> 'const char [3]' lvalue ".a"
                        ImplicitCastExpr 0x80165e158 <col:34, col:53> 'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::mapped_type':'unsigned int' <LValueToRValue>
                          ParenExpr 0x80165c400 <col:34, col:53> 'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::mapped_type':'unsigned int' lvalue
                            UnaryOperator 0x80165c3e8 <col:35, col:52> 'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::mapped_type':'unsigned int' lvalue prefix '++'
                              CXXOperatorCallExpr 0x80165c3b0 <col:37, col:52> 'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::mapped_type':'unsigned int' lvalue
                                ImplicitCastExpr 0x80165c398 <col:46, col:52> 'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::mapped_type &(*)(const std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::key_type &)' <FunctionToPointerDecay>
                                  DeclRefExpr 0x80165c318 <col:46, col:52> 'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::mapped_type &(const std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::key_type &)' lvalue CXXMethod 0x801639bd8 'operator[]' 'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::mapped_type &(const std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::key_type &)'
                                DeclRefExpr 0x80165c2d8 <col:37> 'std::map<std::string, unsigned int>':'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >' lvalue Var 0x80160e638 'fileCount' 'std::map<std::string, unsigned int>':'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >'
                                DeclRefExpr 0x80165c2f8 <col:47> 'const std::string':'const std::basic_string<char>' lvalue Var 0x801647bb8 'afile' 'const std::string':'const std::basic_string<char>'
                      ImplicitCastExpr 0x80165ef38 <col:58> 'const char *' <ArrayToPointerDecay>
                        StringLiteral 0x80165e238 <col:58> 'const char [3]' lvalue "::"
                    MaterializeTemporaryExpr 0x801662d00 <col:66, col:114> 'const std::string':'const std::basic_string<char>' lvalue
                      ImplicitCastExpr 0x801662ce8 <col:66, col:114> 'const std::string':'const std::basic_string<char>' <NoOp>
                        CXXBindTemporaryExpr 0x80165f2a0 <col:66, col:114> 'std::string':'std::basic_string<char>' (CXXTemporary 0x80165f298)
                          CallExpr 0x80165f200 <col:66, col:114> 'std::string':'std::basic_string<char>'
                            ImplicitCastExpr 0x80165f1e8 <col:66, col:72> 'std::string (*)(std::string)' <FunctionToPointerDecay>
                              DeclRefExpr 0x80165f010 <col:66, col:72> 'std::string (std::string)' lvalue CXXMethod 0x801545260 'simplifyPath' 'std::string (std::string)'
                            CXXBindTemporaryExpr 0x80165f278 <col:85, col:113> 'std::string':'std::basic_string<char>' (CXXTemporary 0x80165f270)
                              CXXConstructExpr 0x80165f240 <col:85, col:113> 'std::string':'std::basic_string<char>' 'void (std::basic_string<char> &&) noexcept' elidable
                                MaterializeTemporaryExpr 0x80165f228 <col:85, col:113> 'std::string':'std::basic_string<char>' xvalue
                                  CXXBindTemporaryExpr 0x80165f1c8 <col:85, col:113> 'std::string':'std::basic_string<char>' (CXXTemporary 0x80165f1c0)
                                    CallExpr 0x80165f140 <col:85, col:113> 'std::string':'std::basic_string<char>'
                                      ImplicitCastExpr 0x80165f128 <col:85, col:91> 'std::string (*)(std::string)' <FunctionToPointerDecay>
                                        DeclRefExpr 0x80165f078 <col:85, col:91> 'std::string (std::string)' lvalue CXXMethod 0x801545080 'fromNativeSeparators' 'std::string (std::string)'
                                      CXXBindTemporaryExpr 0x80165f1a0 <col:112> 'std::string':'std::basic_string<char>' (CXXTemporary 0x80165f198)
                                        CXXConstructExpr 0x80165f168 <col:112> 'std::string':'std::basic_string<char>' 'void (const std::basic_string<char> &)'
                                          DeclRefExpr 0x80165f0a8 <col:112> 'const std::string':'const std::basic_string<char>' lvalue Var 0x801642bc8 'f' 'const std::string &'
                  CharacterLiteral 0x801662d88 <col:119> 'char' 10
          CXXForRangeStmt 0x801669b78 <line:57:5, line:60:5>
            <<<<NULL>>>>>
            DeclStmt 0x801664ed0 <line:57:50>
              VarDecl 0x801664d28 <col:50> col:50 implicit used __range1 'const std::list<ImportProject::FileSettings, std::allocator<ImportProject::FileSettings> > &' cinit
                DeclRefExpr 0x801664c30 <col:50> 'const std::list<ImportProject::FileSettings>':'const std::list<ImportProject::FileSettings, std::allocator<ImportProject::FileSettings> >' lvalue ParmVar 0x80160dcb0 'fileSettings' 'const std::list<ImportProject::FileSettings> &'
            DeclStmt 0x801668638 <col:48>
              VarDecl 0x801664f38 <col:48> col:48 implicit used __begin1 'std::_List_const_iterator<ImportProject::FileSettings>':'std::_List_const_iterator<ImportProject::FileSettings>' cinit
                ExprWithCleanups 0x801668498 <col:48> 'std::_List_const_iterator<ImportProject::FileSettings>':'std::_List_const_iterator<ImportProject::FileSettings>'
                  CXXConstructExpr 0x801668468 <col:48> 'std::_List_const_iterator<ImportProject::FileSettings>':'std::_List_const_iterator<ImportProject::FileSettings>' 'void (std::_List_const_iterator<ImportProject::FileSettings> &&) noexcept' elidable
                    MaterializeTemporaryExpr 0x801668330 <col:48> 'std::list<ImportProject::FileSettings, std::allocator<ImportProject::FileSettings> >::const_iterator':'std::_List_const_iterator<ImportProject::FileSettings>' xvalue
                      CXXMemberCallExpr 0x801665098 <col:48> 'std::list<ImportProject::FileSettings, std::allocator<ImportProject::FileSettings> >::const_iterator':'std::_List_const_iterator<ImportProject::FileSettings>'
                        MemberExpr 0x801665068 <col:48> '<bound member function type>' .begin 0x8015064c0
                          DeclRefExpr 0x801664ee8 <col:48> 'const std::list<ImportProject::FileSettings, std::allocator<ImportProject::FileSettings> >' lvalue Var 0x801664d28 '__range1' 'const std::list<ImportProject::FileSettings, std::allocator<ImportProject::FileSettings> > &'
            DeclStmt 0x801668650 <col:48>
              VarDecl 0x801664fa8 <col:48> col:48 implicit used __end1 'std::_List_const_iterator<ImportProject::FileSettings>':'std::_List_const_iterator<ImportProject::FileSettings>' cinit
                ExprWithCleanups 0x801668620 <col:48> 'std::_List_const_iterator<ImportProject::FileSettings>':'std::_List_const_iterator<ImportProject::FileSettings>'
                  CXXConstructExpr 0x8016685f0 <col:48> 'std::_List_const_iterator<ImportProject::FileSettings>':'std::_List_const_iterator<ImportProject::FileSettings>' 'void (std::_List_const_iterator<ImportProject::FileSettings> &&) noexcept' elidable
                    MaterializeTemporaryExpr 0x8016685d8 <col:48> 'std::list<ImportProject::FileSettings, std::allocator<ImportProject::FileSettings> >::const_iterator':'std::_List_const_iterator<ImportProject::FileSettings>' xvalue
                      CXXMemberCallExpr 0x801668540 <col:48> 'std::list<ImportProject::FileSettings, std::allocator<ImportProject::FileSettings> >::const_iterator':'std::_List_const_iterator<ImportProject::FileSettings>'
                        MemberExpr 0x801668510 <col:48> '<bound member function type>' .end 0x801506660
                          DeclRefExpr 0x801664f08 <col:48> 'const std::list<ImportProject::FileSettings, std::allocator<ImportProject::FileSettings> >' lvalue Var 0x801664d28 '__range1' 'const std::list<ImportProject::FileSettings, std::allocator<ImportProject::FileSettings> > &'
            CXXOperatorCallExpr 0x8016698d0 <col:48> 'bool'
              ImplicitCastExpr 0x8016698b8 <col:48> 'bool (*)(const std::_List_const_iterator<ImportProject::FileSettings>::_Self &) const noexcept' <FunctionToPointerDecay>
                DeclRefExpr 0x801669840 <col:48> 'bool (const std::_List_const_iterator<ImportProject::FileSettings>::_Self &) const noexcept' lvalue CXXMethod 0x8016666d0 'operator!=' 'bool (const std::_List_const_iterator<ImportProject::FileSettings>::_Self &) const noexcept'
              ImplicitCastExpr 0x801669828 <col:48> 'const std::_List_const_iterator<ImportProject::FileSettings>' lvalue <NoOp>
                DeclRefExpr 0x801668668 <col:48> 'std::_List_const_iterator<ImportProject::FileSettings>':'std::_List_const_iterator<ImportProject::FileSettings>' lvalue Var 0x801664f38 '__begin1' 'std::_List_const_iterator<ImportProject::FileSettings>':'std::_List_const_iterator<ImportProject::FileSettings>'
              ImplicitCastExpr 0x8016697e0 <col:48> 'const std::_List_const_iterator<ImportProject::FileSettings>':'const std::_List_const_iterator<ImportProject::FileSettings>' lvalue <NoOp>
                DeclRefExpr 0x801668688 <col:48> 'std::_List_const_iterator<ImportProject::FileSettings>':'std::_List_const_iterator<ImportProject::FileSettings>' lvalue Var 0x801664fa8 '__end1' 'std::_List_const_iterator<ImportProject::FileSettings>':'std::_List_const_iterator<ImportProject::FileSettings>'
            CXXOperatorCallExpr 0x8016699f0 <col:48> 'std::_List_const_iterator<ImportProject::FileSettings>::_Self':'std::_List_const_iterator<ImportProject::FileSettings>' lvalue
              ImplicitCastExpr 0x8016699d8 <col:48> 'std::_List_const_iterator<ImportProject::FileSettings>::_Self &(*)() noexcept' <FunctionToPointerDecay>
                DeclRefExpr 0x801669958 <col:48> 'std::_List_const_iterator<ImportProject::FileSettings>::_Self &() noexcept' lvalue CXXMethod 0x801665fc0 'operator++' 'std::_List_const_iterator<ImportProject::FileSettings>::_Self &() noexcept'
              DeclRefExpr 0x801669908 <col:48> 'std::_List_const_iterator<ImportProject::FileSettings>':'std::_List_const_iterator<ImportProject::FileSettings>' lvalue Var 0x801664f38 '__begin1' 'std::_List_const_iterator<ImportProject::FileSettings>':'std::_List_const_iterator<ImportProject::FileSettings>'
            DeclStmt 0x801664d00 <col:10, col:62>
              VarDecl 0x801664ca0 <col:10, col:48> col:45 used fs 'const ImportProject::FileSettings &' cinit
                CXXOperatorCallExpr 0x801669af0 <col:48> 'const ImportProject::FileSettings':'const ImportProject::FileSettings' lvalue
                  ImplicitCastExpr 0x801669ad8 <col:48> 'std::_List_const_iterator<ImportProject::FileSettings>::reference (*)() const noexcept' <FunctionToPointerDecay>
                    DeclRefExpr 0x801669a58 <col:48> 'std::_List_const_iterator<ImportProject::FileSettings>::reference () const noexcept' lvalue CXXMethod 0x801665cc0 'operator*' 'std::_List_const_iterator<ImportProject::FileSettings>::reference () const noexcept'
                  ImplicitCastExpr 0x801669a40 <col:48> 'const std::_List_const_iterator<ImportProject::FileSettings>' lvalue <NoOp>
                    DeclRefExpr 0x801669a20 <col:48> 'std::_List_const_iterator<ImportProject::FileSettings>':'std::_List_const_iterator<ImportProject::FileSettings>' lvalue Var 0x801664f38 '__begin1' 'std::_List_const_iterator<ImportProject::FileSettings>':'std::_List_const_iterator<ImportProject::FileSettings>'
            CompoundStmt 0x801671860 <col:64, line:60:5>
              DeclStmt 0x801669e08 <line:58:9, col:59>
                VarDecl 0x801669c28 <col:9, col:58> col:27 used afile 'const std::string':'const std::basic_string<char>' cinit
                  ExprWithCleanups 0x801669df0 <col:35, col:58> 'const std::string':'const std::basic_string<char>'
                    CXXConstructExpr 0x801669dc0 <col:35, col:58> 'const std::string':'const std::basic_string<char>' 'void (std::basic_string<char> &&) noexcept' elidable
                      MaterializeTemporaryExpr 0x801669da8 <col:35, col:58> 'std::string':'std::basic_string<char>' xvalue
                        CXXBindTemporaryExpr 0x801669d88 <col:35, col:58> 'std::string':'std::basic_string<char>' (CXXTemporary 0x801669d80)
                          CallExpr 0x801669d58 <col:35, col:58> 'std::string':'std::basic_string<char>'
                            ImplicitCastExpr 0x801669d40 <col:35> 'std::string (*)(const std::string &)' <FunctionToPointerDecay>
                              DeclRefExpr 0x801669d20 <col:35> 'std::string (const std::string &)' lvalue Function 0x80160c9e8 'getFilename' 'std::string (const std::string &)'
                            MemberExpr 0x801669cf0 <col:47, col:50> 'const std::string':'const std::basic_string<char>' lvalue .filename 0x801499418
                              DeclRefExpr 0x801669cd0 <col:47> 'const ImportProject::FileSettings':'const ImportProject::FileSettings' lvalue Var 0x801664ca0 'fs' 'const ImportProject::FileSettings &'
              ExprWithCleanups 0x801671848 <line:59:9, col:150> 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type':'std::basic_ostream<char>' lvalue
                CXXOperatorCallExpr 0x801671810 <col:9, col:150> 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type':'std::basic_ostream<char>' lvalue
                  ImplicitCastExpr 0x8016717f8 <col:142> 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(*)(std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(*)(std::basic_ostream<char, std::char_traits<char> >::__ostream_type &))' <FunctionToPointerDecay>
                    DeclRefExpr 0x801671780 <col:142> 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(*)(std::basic_ostream<char, std::char_traits<char> >::__ostream_type &))' lvalue CXXMethod 0x800b07488 'operator<<' 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(*)(std::basic_ostream<char, std::char_traits<char> >::__ostream_type &))'
                  CXXOperatorCallExpr 0x801670db0 <col:9, col:140> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue adl
                    ImplicitCastExpr 0x801670d98 <col:79> 'basic_ostream<char, std::char_traits<char> > &(*)(basic_ostream<char, std::char_traits<char> > &, const basic_string<char, std::char_traits<char>, std::allocator<char> > &)' <FunctionToPointerDecay>
                      DeclRefExpr 0x801670d78 <col:79> 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const basic_string<char, std::char_traits<char>, std::allocator<char> > &)' lvalue Function 0x80091cc38 'operator<<' 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const basic_string<char, std::char_traits<char>, std::allocator<char> > &)'
                    CXXOperatorCallExpr 0x80166fdc8 <col:9, col:75> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue adl
                      ImplicitCastExpr 0x80166fdb0 <col:72> 'basic_ostream<char, std::char_traits<char> > &(*)(basic_ostream<char, std::char_traits<char> > &, const char *)' <FunctionToPointerDecay>
                        DeclRefExpr 0x80166fd90 <col:72> 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const char *)' lvalue Function 0x800b104d8 'operator<<' 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const char *)'
                      CXXOperatorCallExpr 0x80166f040 <col:9, col:68> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue adl
                        ImplicitCastExpr 0x80166f028 <col:62> 'basic_ostream<char, std::char_traits<char> > &(*)(basic_ostream<char, std::char_traits<char> > &, const basic_string<char, std::char_traits<char>, std::allocator<char> > &)' <FunctionToPointerDecay>
                          DeclRefExpr 0x80166f008 <col:62> 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const basic_string<char, std::char_traits<char>, std::allocator<char> > &)' lvalue Function 0x80091cc38 'operator<<' 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const basic_string<char, std::char_traits<char>, std::allocator<char> > &)'
                        CXXOperatorCallExpr 0x80166e2e8 <col:9, col:58> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue adl
                          ImplicitCastExpr 0x80166e2d0 <col:55> 'basic_ostream<char, std::char_traits<char> > &(*)(basic_ostream<char, std::char_traits<char> > &, const char *)' <FunctionToPointerDecay>
                            DeclRefExpr 0x80166e2b0 <col:55> 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const char *)' lvalue Function 0x800b104d8 'operator<<' 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const char *)'
                          CXXOperatorCallExpr 0x80166c748 <col:9, col:53> 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type':'std::basic_ostream<char>' lvalue
                            ImplicitCastExpr 0x80166c730 <col:31> 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(*)(unsigned int)' <FunctionToPointerDecay>
                              DeclRefExpr 0x80166c710 <col:31> 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(unsigned int)' lvalue CXXMethod 0x800b08508 'operator<<' 'std::basic_ostream<char, std::char_traits<char> >::__ostream_type &(unsigned int)'
                            CXXOperatorCallExpr 0x80166b8d8 <col:9, col:26> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue adl
                              ImplicitCastExpr 0x80166b8c0 <col:23> 'basic_ostream<char, std::char_traits<char> > &(*)(basic_ostream<char, std::char_traits<char> > &, const char *)' <FunctionToPointerDecay>
                                DeclRefExpr 0x80166b8a0 <col:23> 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const char *)' lvalue Function 0x800b104d8 'operator<<' 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const char *)'
                              CXXOperatorCallExpr 0x80166ab50 <col:9, col:17> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue adl
                                ImplicitCastExpr 0x80166ab38 <col:14> 'basic_ostream<char, std::char_traits<char> > &(*)(basic_ostream<char, std::char_traits<char> > &, const basic_string<char, std::char_traits<char>, std::allocator<char> > &)' <FunctionToPointerDecay>
                                  DeclRefExpr 0x80166ab18 <col:14> 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const basic_string<char, std::char_traits<char>, std::allocator<char> > &)' lvalue Function 0x80091cc38 'operator<<' 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &, const basic_string<char, std::char_traits<char>, std::allocator<char> > &)'
                                ImplicitCastExpr 0x80166aaf8 <col:9> 'basic_ostream<char, std::char_traits<char> >':'std::basic_ostream<char>' lvalue <DerivedToBase (basic_ostream)>
                                  DeclRefExpr 0x801669e20 <col:9> 'std::ofstream':'std::basic_ofstream<char>' lvalue Var 0x8016429c8 'fout' 'std::ofstream':'std::basic_ofstream<char>'
                                DeclRefExpr 0x801669e40 <col:17> 'const std::string':'const std::basic_string<char>' lvalue Var 0x801669c28 'afile' 'const std::string':'const std::basic_string<char>'
                              ImplicitCastExpr 0x80166b888 <col:26> 'const char *' <ArrayToPointerDecay>
                                StringLiteral 0x80166ab88 <col:26> 'const char [3]' lvalue ".a"
                            ImplicitCastExpr 0x80166c6f8 <col:34, col:53> 'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::mapped_type':'unsigned int' <LValueToRValue>
                              ParenExpr 0x80166b9d8 <col:34, col:53> 'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::mapped_type':'unsigned int' lvalue
                                UnaryOperator 0x80166b9c0 <col:35, col:52> 'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::mapped_type':'unsigned int' lvalue prefix '++'
                                  CXXOperatorCallExpr 0x80166b988 <col:37, col:52> 'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::mapped_type':'unsigned int' lvalue
                                    ImplicitCastExpr 0x80166b970 <col:46, col:52> 'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::mapped_type &(*)(const std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::key_type &)' <FunctionToPointerDecay>
                                      DeclRefExpr 0x80166b950 <col:46, col:52> 'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::mapped_type &(const std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::key_type &)' lvalue CXXMethod 0x801639bd8 'operator[]' 'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::mapped_type &(const std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >::key_type &)'
                                    DeclRefExpr 0x80166b910 <col:37> 'std::map<std::string, unsigned int>':'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >' lvalue Var 0x80160e638 'fileCount' 'std::map<std::string, unsigned int>':'std::map<std::basic_string<char>, unsigned int, std::less<std::basic_string<char> >, std::allocator<std::pair<const std::basic_string<char>, unsigned int> > >'
                                    DeclRefExpr 0x80166b930 <col:47> 'const std::string':'const std::basic_string<char>' lvalue Var 0x801669c28 'afile' 'const std::string':'const std::basic_string<char>'
                          ImplicitCastExpr 0x80166e298 <col:58> 'const char *' <ArrayToPointerDecay>
                            StringLiteral 0x80166c780 <col:58> 'const char [2]' lvalue ":"
                        MemberExpr 0x80166e340 <col:65, col:68> 'const std::string':'const std::basic_string<char>' lvalue .cfg 0x801499380
                          DeclRefExpr 0x80166e320 <col:65> 'const ImportProject::FileSettings':'const ImportProject::FileSettings' lvalue Var 0x801664ca0 'fs' 'const ImportProject::FileSettings &'
                      ImplicitCastExpr 0x80166fd78 <col:75> 'const char *' <ArrayToPointerDecay>
                        StringLiteral 0x80166f078 <col:75> 'const char [2]' lvalue ":"
                    MaterializeTemporaryExpr 0x801670d60 <col:82, col:140> 'const std::string':'const std::basic_string<char>' lvalue
                      ImplicitCastExpr 0x801670d48 <col:82, col:140> 'const std::string':'const std::basic_string<char>' <NoOp>
                        CXXBindTemporaryExpr 0x801670098 <col:82, col:140> 'std::string':'std::basic_string<char>' (CXXTemporary 0x801670090)
                          CallExpr 0x80166fff8 <col:82, col:140> 'std::string':'std::basic_string<char>'
                            ImplicitCastExpr 0x80166ffe0 <col:82, col:88> 'std::string (*)(std::string)' <FunctionToPointerDecay>
                              DeclRefExpr 0x80166fe38 <col:82, col:88> 'std::string (std::string)' lvalue CXXMethod 0x801545260 'simplifyPath' 'std::string (std::string)'
                            CXXBindTemporaryExpr 0x801670070 <col:101, col:139> 'std::string':'std::basic_string<char>' (CXXTemporary 0x801670068)
                              CXXConstructExpr 0x801670038 <col:101, col:139> 'std::string':'std::basic_string<char>' 'void (std::basic_string<char> &&) noexcept' elidable
                                MaterializeTemporaryExpr 0x801670020 <col:101, col:139> 'std::string':'std::basic_string<char>' xvalue
                                  CXXBindTemporaryExpr 0x80166ffc0 <col:101, col:139> 'std::string':'std::basic_string<char>' (CXXTemporary 0x80166ffb8)
                                    CallExpr 0x80166ff38 <col:101, col:139> 'std::string':'std::basic_string<char>'
                                      ImplicitCastExpr 0x80166ff20 <col:101, col:107> 'std::string (*)(std::string)' <FunctionToPointerDecay>
                                        DeclRefExpr 0x80166fea0 <col:101, col:107> 'std::string (std::string)' lvalue CXXMethod 0x801545080 'fromNativeSeparators' 'std::string (std::string)'
                                      CXXBindTemporaryExpr 0x80166ff98 <col:128, col:131> 'std::string':'std::basic_string<char>' (CXXTemporary 0x80166ff90)
                                        CXXConstructExpr 0x80166ff60 <col:128, col:131> 'std::string':'std::basic_string<char>' 'void (const std::basic_string<char> &)'
                                          MemberExpr 0x80166fef0 <col:128, col:131> 'const std::string':'const std::basic_string<char>' lvalue .filename 0x801499418
                                            DeclRefExpr 0x80166fed0 <col:128> 'const ImportProject::FileSettings':'const ImportProject::FileSettings' lvalue Var 0x801664ca0 'fs' 'const ImportProject::FileSettings &'
                  ImplicitCastExpr 0x801671768 <col:145, col:150> 'basic_ostream<char, std::char_traits<char> > &(*)(basic_ostream<char, std::char_traits<char> > &)' <FunctionToPointerDecay>
                    DeclRefExpr 0x801671730 <col:145, col:150> 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &)' lvalue Function 0x800b0c1a8 'endl' 'basic_ostream<char, std::char_traits<char> > &(basic_ostream<char, std::char_traits<char> > &)' (FunctionTemplate 0x800aec1a0 'endl' )
      Segmentation fault (core dumped)
      
       
  • Daniel Marjamäki

    ok thanks.. what is the backtrace?

     
    • versat

      versat - 2020-01-24

      Somehow GDB is not able to show a backtrace for this segmentation fault:

      Checking ./lib/analyzerinfo.cpp...
      [New Thread 8984.0xab8]
            0 [main] cppcheck 2155 cygwin_exception::open_stackdumpfile: Dumping stack trace to cppcheck.exe.stackdump
      [Thread 8984.0xab8 exited with code 35584]
      [Thread 8984.0xa88 exited with code 35584]
      [Thread 8984.0x2b8c exited with code 35584]
      [Inferior 1 (process 8984) exited with code 0105400]
      (gdb) bt
      No stack.
      

      The content of cppcheck.exe.stackdump is pretty useless.
      I will try it with a debug build.

       
      • versat

        versat - 2020-01-24

        I managed to let cygwin start the GDB when a segmentation fault happens and got this output:

        (gdb) bt
        #0  0x00000001800d63c7 in _memcpy () from /usr/bin/cygwin1.dll
        #1  0x00000003bdf2c158 in cygstdc++-6!_ZNSs6appendERKSs () from /usr/bin/cygstdc++-6.dll
        #2  0x0000000100643447 in std::operator+<char, std::char_traits<char>, std::allocator<char> > (__lhs=<optimized out>, __rhs=...)
            at /usr/lib/gcc/x86_64-pccygwin/7.4.0/include/c++/bits/basic_string.tcc:1167
        #3  0x00000001004b61fb in clangimport::AstNode::createTokens (
            this=0x8008b9d30, tokenList=tokenList@entry=0xffffb1a0)
            at lib/clangimport.cpp:958
        #4  0x00000001004b50d2 in clangimport::AstNode::createTokens (
            this=0x80077dfd0, tokenList=tokenList@entry=0xffffb1a0)
            at lib/clangimport.cpp:809
        #5  0x00000001004b3ccc in clangimport::AstNode::createTokens (
            this=this@entry=0x8009a4e00, tokenList=tokenList@entry=0xffffb1a0)
            at lib/clangimport.cpp:628
        #6  0x00000001004b34c0 in clangimport::AstNode::createTokens (
            this=<optimized out>, tokenList=tokenList@entry=0xffffb1a0)
            at lib/clangimport.cpp:572
        #7  0x00000001004b27da in clangimport::AstNode::createTokensFunctionDecl (
            this=this@entry=0x80070cdf0, tokenList=tokenList@entry=0xffffb1a0)
            at lib/clangimport.cpp:1040
        #8  0x00000001004b3e3d in clangimport::AstNode::createTokens (
            this=this@entry=0x80070cdf0, tokenList=tokenList@entry=0xffffb1a0)
            at lib/clangimport.cpp:645
        #9  0x00000001005e872e in clangimport::AstNode::createTokens1 (
            this=0x80070cdf0, tokenList=tokenList@entry=0xffffb1a0)
            at lib/clangimport.cpp:239
        #10 0x00000001004b94d4 in clangimport::parseClangAstDump (
            tokenizer=0xffffb1a0, f=...) at lib/clangimport.cpp:1191
        #11 0x00000001004c2989 in CppCheck::check (this=this@entry=0xffffbd70,
            path=...) at lib/cppcheck.cpp:339
        #12 0x00000001005cf075 in CppCheckExecutor::check_internal (
            this=this@entry=0xffffc980, cppcheck=..., argv=argv@entry=0xffffcc50)
            at cli/cppcheckexecutor.cpp:913
        #13 0x00000001005d14ec in CppCheckExecutor::check (
            this=this@entry=0xffffc980, argc=argc@entry=5, argv=argv@entry=0xffffcc50)
            at cli/cppcheckexecutor.cpp:227
        #14 0x00000001005d1d11 in main (argc=5, argv=0xffffcc50) at cli/main.cpp:95
        
         

        Last edit: versat 2020-01-24
  • Daniel Marjamäki

    can you try again. I have installed clang-9 and ensured that works for me. I found and fixed a few problems.

     
    • versat

      versat - 2020-01-27

      Great. It works now for me under Cygwin 64.

      One thing I instantly noticed is a false positive that I get with --clang:

      $ ./cppcheck --clang --cppcheck-build-dir=./temp ./lib/check.cpp
      Checking ./lib/check.cpp...
      ./lib/check.cpp:66:12: error: Reference to local variable returned. [returnReference]
          return _instances;
                 ^
      

      Without --clang there is no false positive:

      $ ./cppcheck -f ./lib/check.cpp
      Checking lib/check.cpp ...
      Checking lib/check.cpp: CPPCHECKLIB_EXPORT;_WIN32...
      Checking lib/check.cpp: CPPCHECKLIB_IMPORT;_WIN32...
      Checking lib/check.cpp: DACA2;UNSTABLE...
      Checking lib/check.cpp: MAXTIME...
      Checking lib/check.cpp: NONNEG...
      Checking lib/check.cpp: _DEBUG;_MSC_VER...
      Checking lib/check.cpp: _MSC_VER;__CPPCHECK__;__GNUC__;__clang__...
      Checking lib/check.cpp: _WIN32...
      Checking lib/check.cpp: __CPPCHECK__...
      Checking lib/check.cpp: __SANITIZE_ADDRESS__...
      Checking lib/check.cpp: __SVR4...
      Checking lib/check.cpp: __has_feature...
      

      Since _instances is defined static the message about returning a local variable should be wrong, correct?

       
  • versat

    versat - 2020-01-27

    When clang or clang++ can not be found in the path the file with the stderr output contains something like "File/Command .. not found" (in German it contains Der Befehl "clang" ist entweder falsch geschrieben oder konnte nicht gefunden werden..
    There is no hint from Cppcheck that something went completely wrong.
    The AST (res.second) is empty.
    Nothing is checked, no messages are generated, but from Cppcheck's output it looks like everything went fine.

     

    Last edit: versat 2020-01-27

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.