On Jun 20, 2013, at 7:00 PM, Nico Weber <[email protected]> wrote: > 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.
Eh, alright, if it's just a workaround. John.
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
