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

Reply via email to