[cfe-dev] PrettyPrinting statements with type signed/unsigned char

Andrey Tarasevich tarasevich.andrey at gmail.com
Sun Jun 9 07:54:04 PDT 2013


Hi,

It is indeed only reachable if I try to print a literal. The following code within a ASTConsumer class triggers the error

bool TestAstConsumer::HandleTopLevelDecl(clang::DeclGroupRef D)
{
clang::QualType type = _context->UnsignedCharTy;
clang::VarDecl* vd = clang::VarDecl::Create(*_context,
                                              _context->getTranslationUnitDecl(),
                                              clang::SourceLocation(),
                                              clang::SourceLocation(),
                                              &_context->Idents.get("var"),
                                              type,
                                              0,
                                              clang::SC_None);
llvm::APInt* val = new llvm::APInt(_context->getIntWidth(type), 10);
clang::Expr* init = clang::IntegerLiteral::Create(*_context,
                                                  *val,
                                                  type,
                                                  clang::SourceLocation());
vd->setInit(init);
clang::DeclGroupRef *dgr = new (_context) clang::DeclGroupRef(vd);
clang::DeclStmt *dst = new (_context) clang::DeclStmt(*dgr, clang::SourceLocation(), clang::SourceLocation());
dst->printPretty(llvm::outs(), 0, _context->getPrintingPolicy());
}

and this is the error message I get

unsigned char var = 10Unexpected type for integer literal!
UNREACHABLE executed at <path_to_llvm_source>/llvm/tools/clang/lib/AST/StmtPrinter.cpp:730!

Cheers,
Andrey Tarasevich

On Jun 8, 2013, at 12:32 AM, Richard Smith <richard at metafoo.co.uk> wrote:

> On Fri, Jun 7, 2013 at 6:39 AM, Andrey Tarasevich
> <tarasevich.andrey at gmail.com> wrote:
>> Hello,
>> 
>> When I'm trying to pretty print statement with type signed or unsigned char I'm getting an error from the StmtPrinter - "Unexpected type for integer literal!". Is this a bug? If yes, then following small patch fixes it. At least in my case it works just fine and statements are printed correctly.
> 
> Please provide a test case. This should only be reachable if you try
> to print a *literal* with type SChar or UChar. How are you building
> such a literal?
> 
>> Cheers,
>> Andrey Tarasevich
>> 
>> --- StmtPrinter.cpp 2013-06-07 15:17:31.000000000 +0200
>> +++ StmtPrinter.cpp   2013-06-07 15:24:43.000000000 +0200
>> @@ -731,6 +731,8 @@
>>   // FIXME: The Short and UShort cases are to handle cases where a short
>>   // integeral literal is formed during template instantiation.  They should
>>   // be removed when template instantiation no longer needs integer literals.
>> +  case BuiltinType::UChar:
>> +  case BuiltinType::SChar:
>>   case BuiltinType::Short:
>>   case BuiltinType::UShort:
>>   case BuiltinType::Int:       break; // no suffix.
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130609/bc588936/attachment.html>


More information about the cfe-dev mailing list