[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