On Thu, Jun 20, 2013 at 6:43 PM, John McCall <[email protected]> wrote:
> On Jun 20, 2013, at 6:31 PM, Nico Weber <[email protected]> wrote: > > On Thu, Jun 20, 2013 at 4:43 PM, Richard Smith <[email protected]>wrote: > >> On Thu, Jun 20, 2013 at 4:30 PM, Nico Weber <[email protected]> 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. >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
