[cfe-dev] Problem with USR generation

Mikhail Ramalho via cfe-dev cfe-dev at lists.llvm.org
Fri Dec 8 09:18:51 PST 2017


Hi all,

We're having some problems with the name generation for ParamVarDecls in
our tool, can anyone give us some help?

A bit of context:

We use libTooling to generate the AST of a given program that we later
convert to our format and do a number of analyses.

We also define a bunch of functions in every TU, so we don't get 'implicit
function declaration' warnings/errors [0] by adding them to the
preprocessor's predefines [1].

We want to use clang to generate the name of every declaration
(VarDecl, ParmVar, FunctionDecl and maybe FieldDecl as well), and it seems
to work fine for everything except the code we just added to the
preprocessor, i.e.:

FunctionDecl 0x3ad9620 <esbmc_intrinsics.h:3:1, col:61> col:6
__ESBMC_assert 'void (_Bool, const char *)'
|-ParmVarDecl 0x3a84c48 <col:21, col:27> col:27 assertion '_Bool'
`-ParmVarDecl 0x3a84cc0 <col:38, col:50> col:50 description 'const char *'

Name: c:@F at __ESBMC_assert

~

ParmVarDecl 0x3a84c48 <esbmc_intrinsics.h:3:21, col:27> col:27 assertion
'_Bool'
Name: c:

~

ParmVarDecl 0x3a84cc0 <esbmc_intrinsics.h:3:38, col:50> col:50 description
'const char *'
Name: c:

~

We do:

clang::SmallString<128> declUSR;
bool ret = clang::index::generateUSRForDecl(&d, declUSR); (void)ret;

and ret is false, meaning it actually failed.

At first, we thought it was because of the missing filename, so we added to
our predefines:

    "# 1 \"esbmc_intrinsics.h\" 1\n"

But it's still not working.

~

I had a look at the code maybe it's related to the printLoc function [2]?
It fails if it can't find the fileEntry in the SourceManager.

Any clue how to make it work? I'm currently trying to add a file named
esbmc_intrinsics.h to the VFS and see if it fixes the issue.

Thank you,

[0]
https://github.com/esbmc/esbmc/blob/master/src/clang-c-frontend/clang_c_language.cpp#L204
[1]
https://github.com/esbmc/esbmc/blob/master/src/clang-c-frontend/AST/esbmc_action.h#L28
[2] https://clang.llvm.org/doxygen/USRGeneration_8cpp_source.html#l00026

-- 

Mikhail Ramalho.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20171208/72aa5628/attachment.html>


More information about the cfe-dev mailing list