r202131 - Attr: Remove ForceInline

Hal Finkel hfinkel at anl.gov
Tue Feb 25 05:53:08 PST 2014


----- Original Message -----
> From: "David Majnemer" <david.majnemer at gmail.com>
> To: "Hal Finkel" <hfinkel at anl.gov>, cfe-commits at cs.uiuc.edu
> Sent: Tuesday, February 25, 2014 4:30:15 AM
> Subject: Re: r202131 - Attr: Remove ForceInline
> 
> They were just misspecified.
> 
> MinGW has header files which explicitly #define __forceinline

Okay. It seems like we should have a regression test showing which of these MS keywords we accepts only in MS-compatibility mode, and which we always accept.

 -Hal

> 
> 
> --
> David Majnemer
> 
> On Tue Feb 25 2014 at 2:09:44 AM, Hal Finkel < hfinkel at anl.gov >
> wrote:
> 
> ----- Original Message -----
> > From: "David Majnemer" < david.majnemer at gmail.com >
> > To: cfe-commits at cs.uiuc.edu
> > Sent: Tuesday, February 25, 2014 3:53:30 AM
> > Subject: r202131 - Attr: Remove ForceInline
> > 
> > Author: majnemer
> > Date: Tue Feb 25 03:53:29 2014
> > New Revision: 202131
> > 
> > URL: http://llvm.org/viewvc/llvm- project?rev=202131&view=rev
> > Log:
> > Attr: Remove ForceInline
> > 
> > The __forceinline keyword's semantics are now recast as
> > AlwaysInline
> > and
> > the kw___forceinline token has its language mode set for KEYMS.
> > 
> > This preserves the semantics of the previous implementation but
> > with
> > less duplication of code.
> > 
> > Modified:
> > cfe/trunk/include/clang/Basic/ Attr.td
> > cfe/trunk/include/clang/Basic/ TokenKinds.def
> > cfe/trunk/lib/CodeGen/ CodeGenFunction.cpp
> > cfe/trunk/lib/CodeGen/ CodeGenModule.cpp
> > cfe/trunk/lib/Sema/ SemaDeclAttr.cpp
> > 
> > Modified: cfe/trunk/include/clang/Basic/ Attr.td
> > URL:
> > http://llvm.org/viewvc/llvm- project/cfe/trunk/include/
> > clang/Basic/Attr.td?rev= 202131&r1=202130&r2=202131& view=diff
> > ============================== ==============================
> > ==================
> > --- cfe/trunk/include/clang/Basic/ Attr.td (original)
> > +++ cfe/trunk/include/clang/Basic/ Attr.td Tue Feb 25 03:53:29 2014
> > @@ -357,7 +357,7 @@ def AlignMac68k : InheritableAttr {
> > }
> > 
> > def AlwaysInline : InheritableAttr {
> > - let Spellings = [GCC<"always_inline">];
> > + let Spellings = [GCC<"always_inline">, Keyword<"__forceinline">];
> > let Subjects = SubjectList<[Function]>;
> > let Documentation = [Undocumented];
> > }
> > @@ -1676,12 +1676,6 @@ def DLLImport : InheritableAttr, TargetS
> > let Documentation = [Undocumented];
> > }
> > 
> > -def ForceInline : InheritableAttr {
> > - let Spellings = [Keyword<"__forceinline">];
> > - let LangOpts = [MicrosoftExt];
> > - let Documentation = [Undocumented];
> > -}
> > -
> > def SelectAny : InheritableAttr {
> > let Spellings = [Declspec<"selectany">];
> > let LangOpts = [MicrosoftExt];
> > 
> > Modified: cfe/trunk/include/clang/Basic/ TokenKinds.def
> > URL:
> > http://llvm.org/viewvc/llvm- project/cfe/trunk/include/
> > clang/Basic/TokenKinds.def? rev=202131&r1=202130&r2=
> > 202131&view=diff
> > ============================== ==============================
> > ==================
> > --- cfe/trunk/include/clang/Basic/ TokenKinds.def (original)
> > +++ cfe/trunk/include/clang/Basic/ TokenKinds.def Tue Feb 25
> > 03:53:29
> > 2014
> > @@ -455,7 +455,7 @@ KEYWORD(__cdecl , KE
> > KEYWORD(__stdcall , KEYALL)
> > KEYWORD(__fastcall , KEYALL)
> > KEYWORD(__thiscall , KEYALL)
> > -KEYWORD(__forceinline , KEYALL)
> > +KEYWORD(__forceinline , KEYMS)
> > KEYWORD(__unaligned , KEYMS)
> 
> This seems to be a change in behavior. Then again, I don't understand
> why most of these are KEYALL anyway, but if it is to make sure what
> we can do basic parsing of win32 API headers (like mingw, etc.),
> then we might need __forceinline there too?
> 
> -Hal
> 
> > 
> > // OpenCL address space qualifiers
> > 
> > Modified: cfe/trunk/lib/CodeGen/ CodeGenFunction.cpp
> > URL:
> > http://llvm.org/viewvc/llvm- project/cfe/trunk/lib/CodeGen/
> > CodeGenFunction.cpp?rev= 202131&r1=202130&r2=202131& view=diff
> > ============================== ==============================
> > ==================
> > --- cfe/trunk/lib/CodeGen/ CodeGenFunction.cpp (original)
> > +++ cfe/trunk/lib/CodeGen/ CodeGenFunction.cpp Tue Feb 25 03:53:29
> > 2014
> > @@ -527,8 +527,7 @@ void CodeGenFunction:: StartFunction(Glob
> > Fn->addFnAttr(llvm::Attribute: :InlineHint);
> > break;
> > }
> > - } else if (!FD->hasAttr< AlwaysInlineAttr>() &&
> > - !FD->hasAttr<ForceInlineAttr>( ))
> > + } else if (!FD->hasAttr< AlwaysInlineAttr>())
> > Fn->addFnAttr(llvm::Attribute: :NoInline);
> > }
> > 
> > 
> > Modified: cfe/trunk/lib/CodeGen/ CodeGenModule.cpp
> > URL:
> > http://llvm.org/viewvc/llvm- project/cfe/trunk/lib/CodeGen/
> > CodeGenModule.cpp?rev=202131& r1=202130&r2=202131&view=diff
> > ============================== ==============================
> > ==================
> > --- cfe/trunk/lib/CodeGen/ CodeGenModule.cpp (original)
> > +++ cfe/trunk/lib/CodeGen/ CodeGenModule.cpp Tue Feb 25 03:53:29
> > 2014
> > @@ -635,8 +635,7 @@ void CodeGenModule:: SetLLVMFunctionAttri
> > B.addAttribute(llvm:: Attribute::NoDuplicate);
> > } else if (D->hasAttr<NoInlineAttr>()) {
> > B.addAttribute(llvm:: Attribute::NoInline);
> > - } else if ((D->hasAttr<AlwaysInlineAttr> () ||
> > - D->hasAttr<ForceInlineAttr>()) &&
> > + } else if (D->hasAttr<AlwaysInlineAttr>( ) &&
> > !F->getAttributes(). hasAttribute(llvm::
> > AttributeSet::FunctionIndex,
> > llvm::Attribute::NoInline))
> > {
> > // (noinline wins over always_inline, and we can't specify both
> > in IR)
> > @@ -1245,8 +1244,7 @@ CodeGenModule:: shouldEmitFunction(Global
> > if (getFunctionLinkage(GD) !=
> > llvm::Function:: AvailableExternallyLinkage)
> > return true;
> > const FunctionDecl *F = cast<FunctionDecl>(GD.getDecl( ));
> > - if (CodeGenOpts.OptimizationLevel == 0 &&
> > - !F->hasAttr<AlwaysInlineAttr>( ) &&
> > !F->hasAttr<ForceInlineAttr>() )
> > + if (CodeGenOpts.OptimizationLevel == 0 &&
> > !F->hasAttr<AlwaysInlineAttr>( ))
> > return false;
> > // PR9614. Avoid cases where the source code is lying to us. An
> > available
> > // externally function should have an equivalent function
> > somewhere else,
> > 
> > Modified: cfe/trunk/lib/Sema/ SemaDeclAttr.cpp
> > URL:
> > http://llvm.org/viewvc/llvm- project/cfe/trunk/lib/Sema/
> > SemaDeclAttr.cpp?rev=202131& r1=202130&r2=202131&view=diff
> > ============================== ==============================
> > ==================
> > --- cfe/trunk/lib/Sema/ SemaDeclAttr.cpp (original)
> > +++ cfe/trunk/lib/Sema/ SemaDeclAttr.cpp Tue Feb 25 03:53:29 2014
> > @@ -4269,8 +4269,6 @@ static void ProcessDeclAttribute(Sema &S
> > break;
> > case AttributeList::AT_ MSInheritance:
> > handleMSInheritanceAttr(S, D, Attr); break;
> > - case AttributeList::AT_ForceInline:
> > - handleSimpleAttribute< ForceInlineAttr>(S, D, Attr); break;
> > case AttributeList::AT_SelectAny:
> > handleSimpleAttribute< SelectAnyAttr>(S, D, Attr); break;
> > 
> > 
> > 
> > ______________________________ _________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/ mailman/listinfo/cfe-commits
> > 
> 
> --
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory



More information about the cfe-commits mailing list