[cfe-users] got wrong parameter type using clang

henry ding via cfe-users cfe-users at lists.llvm.org
Thu Dec 12 20:18:04 PST 2019


l found  there were a typedecl which typedef  string as int, this may
be the reason

std::string|int|/usr/include/c++/4.8.5/bits/stringfwd.h


2019-12-12 2:13 GMT+08:00, Richard Smith <richard at metafoo.co.uk>:
> On Tue, 10 Dec 2019, 22:45 henry ding via cfe-users, <
> cfe-users at lists.llvm.org> wrote:
>
>> simple test.cpp:
>> void test(std::string xx,string bb,int aa){}
>>
>> clang usage:
>> int getFuncInfo(Rewriter* TheRewrite,clang::ASTContext *Context, const
>> FunctionDecl *func,FuncNode &node){
>>     clang::LangOptions LangOpts;
>>     LangOpts.CPlusPlus = true;
>>     Policy.FullyQualifiedName = 1;
>>    .............................................................
>>   . ..........................................................
>>    for(unsigned int i=0; i<func->getNumParams(); i++)
>>            {
>>                  string t =
>> QualType::getAsString(func->getParamDecl(i)->getType().split(),Policy);
>>                 string n =
>>
>> func->getParamDecl(i)->getName();//func->parameters()[i]->getQualifiedNameAsString()
>>                  cout << t + "#" + n << endl;
>>          }
>> }
>>
>> But,i got:
>> int#xx  //should string#xx
>> int#bb //should string#bb
>> int#aa
>>
>> Has anyone encountered this situation ?
>
>
> The bug is probably somewhere else. Make sure the proper language options
> are set up before parsing the source file, and that you're printing out any
> diagnostics. My guess would be that the source is failing to compile (wrong
> options, or can't find some standard header, or something), and the
> diagnostics are being discarded, and clang is replacing the parameter type
> with 'int' in error recovery.
>
> _______________________________________________
>> cfe-users mailing list
>> cfe-users at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users
>>
>


More information about the cfe-users mailing list