r184498 - Fix a crash with __flaot128 noticed by Eli.
Nico Weber
thakis at chromium.org
Thu Jun 20 19:00:00 PDT 2013
On Thu, Jun 20, 2013 at 6:43 PM, John McCall <rjmccall at apple.com> wrote:
> On Jun 20, 2013, at 6:31 PM, Nico Weber <thakis at chromium.org> wrote:
>
> On Thu, Jun 20, 2013 at 4:43 PM, Richard Smith <richard at metafoo.co.uk>wrote:
>
>> On Thu, Jun 20, 2013 at 4:30 PM, Nico Weber <nicolasweber at gmx.de> wrote:
>> > Author: nico
>> > Date: Thu Jun 20 18:30:30 2013
>> > New Revision: 184498
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=184498&view=rev
>> > Log:
>> > Fix a crash with __flaot128 noticed by Eli.
>> >
>> >
>> > Modified:
>> > cfe/trunk/lib/AST/ASTContext.cpp
>> > cfe/trunk/test/Sema/128bitfloat.cc
>> >
>> > Modified: cfe/trunk/lib/AST/ASTContext.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=184498&r1=184497&r2=184498&view=diff
>> >
>> ==============================================================================
>> > --- cfe/trunk/lib/AST/ASTContext.cpp (original)
>> > +++ cfe/trunk/lib/AST/ASTContext.cpp Thu Jun 20 18:30:30 2013
>> > @@ -859,12 +859,12 @@ TypedefDecl *ASTContext::getUInt128Decl(
>> >
>> > TypeDecl *ASTContext::getFloat128StubType() const {
>> > if (!Float128StubDecl) {
>> > - Float128StubDecl = RecordDecl::Create(const_cast<ASTContext
>> &>(*this),
>> > - TTK_Struct,
>> > - getTranslationUnitDecl(),
>> > - SourceLocation(),
>> > - SourceLocation(),
>> > - &Idents.get("__float128"));
>> > + Float128StubDecl = CXXRecordDecl::Create(const_cast<ASTContext
>> &>(*this),
>> > + TTK_Struct,
>> > + getTranslationUnitDecl(),
>> > + SourceLocation(),
>> > + SourceLocation(),
>> > +
>> &Idents.get("__float128"));
>>
>> Maybe assert getLangOpts().CPlusPlus before creating a CXXRecordDecl?
>>
>
> Sure, why not :-) r184516.
>
>
> Is this profoundly C++-specific for some reason? There's already a
> CreateRecordDecl helper routine in ASTContext.cpp for creating the
> appropriate variety of record.
>
The only call of this is in SemaLookup and looks like this:
if (S.getLangOpts().CPlusPlus11 && S.getLangOpts().GNUMode &&
II == S.getFloat128Identifier()) {
// libstdc++4.7's type_traits expects type __float128 to exist, so
// insert a dummy type to make that header build in gnu++11 mode.
R.addDecl(S.getASTContext().getFloat128StubType());
return true;
}
So it's only called in gnu++11 mode, to work around an issue in the
libstdc++ headers. I can change it to call CreateRecordDecl() if you want,
but it's not currently necessary.
>
> John.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130620/818e9e62/attachment.html>
More information about the cfe-commits
mailing list