They were just misspecified. MinGW has header files which explicitly #define __forceinline
-- David Majnemer On Tue Feb 25 2014 at 2:09:44 AM, Hal Finkel <[email protected]> wrote: > ----- Original Message ----- > > From: "David Majnemer" <[email protected]> > > To: [email protected] > > 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 > > [email protected] > > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > > > > -- > Hal Finkel > Assistant Computational Scientist > Leadership Computing Facility > Argonne National Laboratory >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
