Feeding a CompilerInstance with raw data, not a file

Hello,

I'm a belgian student, and my participation to the Google Summer of Code was
accepted. My project is to implement an Open Source OpenCL compiler.

I looked at Clang and saw it is used by Apple and nVidia for their own OpenCL
implementations. Clang also has a fairly good support of the OpenCL C subset,
that can be tried out by using "clang -x cl ...". I will also use it for my
work.

I'll base my OpenCL library on Mesa's Clover, which also uses Clang, but is
far from being usable. When I looked at the code, I read this :

static void
setupFrontendOpts(FrontendOptions &opts, const std::string &fileLoc)
{
   opts.ProgramAction = frontend::EmitLLVMOnly;
   opts.DisableFree = true;

   /* XXX HACK
    * just matches whatever garbage Compiler::prepareInput
    * creates */
   opts.Inputs.push_back(
      std::make_pair(IK_OpenCL, fileLoc));
}

Clover writes the code given by the application to a file, and then passes
this file to Clang. This solution can work for simple cases, but it's not very
elegant.

So I am asking for a way to avoid writing the source code given by the
application to a temporary file, that is then read by Clang. I quickly looked
at the CompilerInstance class and its related classes, but I haven't found
anything.

Thanks for your help, and sorry if I'm not at the right place to ask my
questions.

Best regards,
Denis Steckelmacher.