[cfe-users] parsing a windows source

folkert via cfe-users cfe-users at lists.llvm.org
Thu Jul 21 13:58:38 PDT 2016


Hi,

I would like to parse a windows source. Using clang/llvm and
preferably under Linux.

I'm using:

        std::vector<std::string> arguments;

        arguments.push_back("-fms-compatibility");
        arguments.push_back("-fms-extensions");
        arguments.push_back("-Wno-error=invalid-token-paste");
        arguments.push_back("-fdelayed-template-parsing");
        arguments.push_back("-DWIN32");
        arguments.push_back("-D_WIN32");
        arguments.push_back("-D_WINDOWS");
        arguments.push_back("-D_DEBUG");
        arguments.push_back("-D_CRTDBG_MAP_ALLOC");
        arguments.push_back("-D_UNICODE");
        arguments.push_back("-DUNICODE");
        arguments.push_back("-D_AFXDLL");
        arguments.push_back("-D_DLL");
        arguments.push_back("-fmsc-version=1600");
        arguments.push_back("-fcxx-exceptions");
        arguments.push_back("-fexceptions");
        arguments.push_back("-D_M_AMD64=1");
        arguments.push_back("-D_M_X64=1");
        arguments.push_back("-I.");

        arguments.push_back("-isystem=/C/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include");
        arguments.push_back("-I/C/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include");
        arguments.push_back("-isystem=/C/Program Files (x86)/Microsoft Visual Studio 10.0/VC/crt/src");
        arguments.push_back("-I/C/Program Files (x86)/Microsoft Visual Studio 10.0/VC/crt/src");
        arguments.push_back("-I/C/Program Files (x86)/Microsoft Visual Studio 10.0/VC/atlmfc/include");
        arguments.push_back("-isystem=/C/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Include");
        arguments.push_back("-I/C/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Include");

	// buf contains source to parse
        llvm::Twine code(buf);

        FindNamedClassAction *fnca = new FindNamedClassAction(root);

        clang::tooling::runToolOnCodeWithArgs(fnca, code, arguments, llvm::Twine(fname));

This gives:

In file included from /C/Source.cpp:12:
In file included from /C/StdAfx.h:2:
In file included from /C/01StdAfx.h:47:
In file included from /C/Program Files (x86)/Microsoft Visual Studio 10.0/VC/atlmfc/include/afx.h:54:
In file included from /C/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include/new.h:22:
In file included from /C/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include/new:6:
In file included from /C/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include/exception:7:
In file included from /C/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include/xstddef:6:
In file included from /C/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include/yvals.h:6:
/C/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include/crtdefs.h:402:29: error: typedef redefinition with
different types ('unsigned int' vs 'unsigned long')
typedef _W64 unsigned int   size_t;
                            ^
/C/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include/crtdefs.h:543:2: warning: __declspec attribute
'dllimport' is not supported [-Wignored-attributes]
 _CRTIMP void __cdecl _invalid_parameter(_In_opt_z_ const wchar_t *,
_In_opt_z_ const wchar_t *, _In_opt_z_ const wchar_t *, unsigned int,
uintptr_t);
 ^
/C/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include/crtdefs.h:18:28: note: expanded from macro '_CRTIMP'
#define _CRTIMP __declspec(dllimport)
                           ^
[skipped a bit]

/C/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Include/winnt.h:455:9: error: unknown type name
'PNZWCH'
typedef PNZWCH PNZTCH;
        ^


How can I fix this? Is it a missing compile-flag?


Folkert van Heusden

-- 
Phone: +31-6-41278122, PGP-key: 1F28D8AE, www.vanheusden.com


More information about the cfe-users mailing list