[cfe-dev] Clang returns Parameter names instead of Arguments

Alexander Droste via cfe-dev cfe-dev at lists.llvm.org
Mon Aug 8 11:54:22 PDT 2016


Hi Dhriti,

when applying analysis scripts on an MPI project,
I experienced problems in case mpicc|mpic++ is denoted
as the used compiler in the compile_commands.json file.
 From my experience this is what CMake does if
-DCMAKE_EXPORT_COMPILE_COMMANDS=1 is used for an MPI project.
A possible workaround could be to use the scan-build intercept script
as described here: https://github.com/0ax1/MPI-Checker/tree/master/examples,
to generate the compilation database.

-Alex


On 08.08.16 20:34, Dhriti Khanna via cfe-dev wrote:
> I am working with clang version 3.8. I have a MPI program which is causing the
> problem. Version 4.9.3 of mpiCC. I guess you will be able to reproduce the
> problem with a simple mpi program.
>
> Also, I use this compile_commands.json file:
> [
> {
>   "directory": "~/Dropbox/CLANG_MPI_LLVM/MPI",
>   "command": "mpiCC -I/usr/include/mpi BasicMPIProgram.cpp",
>   "file": "~/Dropbox/CLANG_MPI_LLVM/MPI/BasicMPIProgram.cpp"
> }
> ]
>
> And this to run the clang tool on a mpi source file: ./tool -p
> ~/Dropbox/CLANG_MPI_LLVM/MPI BasicMPIProgram.cpp
>
>
>
>
> On Mon, Aug 8, 2016 at 12:52 AM, Aaron Ballman <aaron at aaronballman.com
> <mailto:aaron at aaronballman.com>> wrote:
>
>     On Sun, Aug 7, 2016 at 9:06 AM, Dhriti Khanna via cfe-dev
>     <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
>     > Hello,
>     >
>     > I want to print the arguments passed to a function. But clang returns
>     > Parameter names used in the function definition. Here is my code:
>     >
>     > if (CallExpr *call = dyn_cast<CallExpr>(st))
>     > {
>     >     LangOptions LangOpts;
>     >     LangOpts.CPlusPlus = true;
>     >     PrintingPolicy Policy(LangOpts);
>     >
>     >     for(int i=0, j=call->getNumArgs(); i<j; i++)
>     >     {
>     >         std::string TypeS;
>     >         raw_string_ostream raw(TypeS);
>     >         call->getArg(i)->printPretty(raw, 0, Policy);
>     >         errs() << raw.str() << "\n";
>     >     }
>     > }
>     > Example:
>     > int iArgument = 123;
>     > char cArgument = 'c';
>     > foo(iArgument, cArgument);
>     > For this code, it should print iArgument and cArgument, but it is printing
>     > the names of the parameters given in function definition.
>     >
>     > Please tell what might be the problem.
>
>     I cannot reproduce this issue. Are you testing with ToT, or some other
>     version of Clang?
>
>     > Also, I am able to get the arguments' name when I am using a simple C++
>     > code. But when I start using another library's API (for that I am specifying
>     > compile_commands.json file), this presents problems.
>
>     Can you give some steps to reproduce? Is it possible that the other
>     library's API is what's causing the problem?
>
>     ~Aaron
>
>     >
>     > --
>     > Regards,
>     > Dhriti Khanna
>     > PhD Scholar
>     > IIIT Delhi
>     >
>     > _______________________________________________
>     > cfe-dev mailing list
>     > cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
>     > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>     <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev>
>     >
>
>
>
>
> --
> Regards,
> Dhriti Khanna
> PhD Scholar
> IIIT Delhi
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>


More information about the cfe-dev mailing list