On Wed, Jun 08, 2011 at 02:58:26PM +0200, Dimitry Andric wrote:
> > +ExprResult Sema::ActOnAsTypeExpr(Expr *expr, ParsedType destty,
> > + SourceLocation BuiltinLoc,
> > + SourceLocation RParenLoc) {
> > + ExprValueKind VK = VK_RValue;
> > + ExprObjectKind OK = OK_Ordinary;
> > + QualType DstTy = GetTypeFromParser(destty);
> > + QualType SrcTy = expr->getType();
> > + if (Context.getTypeSize(DstTy) != Context.getTypeSize(SrcTy))
> > + return ExprError(Diag(BuiltinLoc,
> > + diag::err_invalid_astype_of_different_size)
> > +<< DstTy.getAsString().c_str()
> > +<< SrcTy.getAsString().c_str()
> > +<< expr->getSourceRange());
> > + return Owned(new (Context) AsTypeExpr(expr, DstTy, VK, OK, BuiltinLoc,
> > RParenLoc));
> > +}
> > +
>
> For me, this leads to a failure when testing a self-hosted clang:
...
> Because I'm using FreeBSD CURRENT, which poisons freed memory, the most
> likely reason is that the strings returned by
> DstTy.getAsString().c_str() and SrcTy.getAsString().c_str() are already
> destroyed at the moment the diagnostics are printed. Would it make
> sense to convert them to StringRefs, or something else?
>
> Btw, it doesn't seem possible to directly output std::string to a
> DiagnosticBuilder, was there any particular reason for that?
Hi Dmitry,
We can output QualTypes directly to the diagnostic builder, and
this is the approach followed in the rest of the code. I modified
this diagnostic to use QualTypes in r132750.
Thanks,
--
Peter
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits