[cfe-dev] Clang 2.7 and C++ support
Douglas Gregor
dgregor at apple.com
Tue Apr 20 22:47:52 PDT 2010
On Apr 20, 2010, at 1:02 AM, Simone Pellegrini wrote:
> On 04/20/2010 09:25 AM, Douglas Gregor wrote:
>>
>> On Apr 20, 2010, at 12:03 AM, Simone Pellegrini wrote:
>>
>>
>>> Hi all,
>>> I was wondering if C++ support will be enabled by default in this
>>> release or we would have to wait the next release (2.8).
>>>
>>> and if not, is there any way to enable it?
>>>
>> C++ support is enabled by default in 2.7.
>>
> What I am doing is using clang as a library so I cannot use the clang driver directly.
>
> I manually instantiate a CompilerInstance and feed C++ code and get the following error:
>
> error: unknown type name 'class'
>
> I also tried to feed the "-ccc-clang-cxx" flag as suggested in: http://clang.llvm.org/docs/UsersManual.html#cxx
> but it didn't help.
>
> The actual code I use to instantiate a compiler is the following:
>
> CompilerInstance Clang;
> Clang.setLLVMContext(new llvm::LLVMContext);
> Clang.createDiagnostics(argc, argv);
>
> Clang.setFileManager(&FileMgr);
> Clang.createSourceManager();
>
> Clang.InitializeSourceManager(File->getName());
>
> // Add the default clang system headers
> Clang.getHeaderSearchOpts().AddPath( "/software/llvm-2.7/lib/clang/1.1/include/", clang::frontend::System, true, false );
> // add user headers
> for (size_t i = 0; i < Flags::I_dirs.size(); ++i)
> Clang.getHeaderSearchOpts().AddPath( Flags::I_dirs[i], clang::frontend::Angled, true, false);
>
> TargetOptions TO;
> TO.Triple = llvm::Triple("x86_64", "PC", "Linux").getTriple();
> Clang.setTarget( TargetInfo::CreateTargetInfo (Clang.getDiagnostics(), TO) );
>
> // A compiler invocation object has to be created in order for the diagnostics to work
> CompilerInvocation* CI = new CompilerInvocation; // CompilerInvocation will be deleted by CompilerInstance
>
> const char* arg = "ccc-clang-cxx";
> CompilerInvocation::CreateFromArgs(*CI, &arg, &arg+1, Clang.getDiagnostics());
> Clang.setInvocation(CI);
>
> Clang.createPreprocessor();
> Clang.createASTContext();
>
> ...
>
> what am I doing wrong? The code works perfectly for C programs!!
I don't see where you're setting the LangOption bit that tells it to compile C++ code.
- Doug
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20100420/5c9c3574/attachment.html>
More information about the cfe-dev
mailing list