[cfe-commits] r48017 - in /cfe/trunk: CodeGen/CodeGenFunction.cpp Parse/AttributeList.cpp Sema/Sema.h Sema/SemaDecl.cpp include/clang/AST/Attr.h include/clang/Parse/AttributeList.h

Nate Begeman natebegeman at mac.com
Fri Mar 7 12:04:23 PST 2008


Author: sampo
Date: Fri Mar  7 14:04:22 2008
New Revision: 48017

URL: http://llvm.org/viewvc/llvm-project?rev=48017&view=rev
Log:
Add fastcall/stdcall attribute support
Generate CallingConv::Fast when fastcall attribute is present

Modified:
    cfe/trunk/CodeGen/CodeGenFunction.cpp
    cfe/trunk/Parse/AttributeList.cpp
    cfe/trunk/Sema/Sema.h
    cfe/trunk/Sema/SemaDecl.cpp
    cfe/trunk/include/clang/AST/Attr.h
    cfe/trunk/include/clang/Parse/AttributeList.h

Modified: cfe/trunk/CodeGen/CodeGenFunction.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/CodeGen/CodeGenFunction.cpp?rev=48017&r1=48016&r2=48017&view=diff

==============================================================================
--- cfe/trunk/CodeGen/CodeGenFunction.cpp (original)
+++ cfe/trunk/CodeGen/CodeGenFunction.cpp Fri Mar  7 14:04:22 2008
@@ -15,6 +15,7 @@
 #include "CodeGenModule.h"
 #include "clang/Basic/TargetInfo.h"
 #include "clang/AST/AST.h"
+#include "llvm/CallingConv.h"
 #include "llvm/Constants.h"
 #include "llvm/DerivedTypes.h"
 #include "llvm/Function.h"
@@ -76,6 +77,9 @@
   else if (FD->getStorageClass() == FunctionDecl::Static)
     CurFn->setLinkage(llvm::Function::InternalLinkage);
 
+  if (FD->getAttr<FastCallAttr>())
+    CurFn->setCallingConv(llvm::CallingConv::Fast);
+
   if (const VisibilityAttr *attr = FD->getAttr<VisibilityAttr>())
     CurFn->setVisibility(attr->getVisibility());
   // FIXME: else handle -fvisibility

Modified: cfe/trunk/Parse/AttributeList.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Parse/AttributeList.cpp?rev=48017&r1=48016&r2=48017&view=diff

==============================================================================
--- cfe/trunk/Parse/AttributeList.cpp (original)
+++ cfe/trunk/Parse/AttributeList.cpp Fri Mar  7 14:04:22 2008
@@ -65,11 +65,13 @@
     if (!memcmp(Str, "aligned", 7)) return AT_aligned;
     if (!memcmp(Str, "nothrow", 7)) return AT_nothrow;
     if (!memcmp(Str, "nonnull", 7)) return AT_nonnull;
+    if (!memcmp(Str, "stdcall", 7)) return AT_stdcall;
     break;
   case 8:
     if (!memcmp(Str, "annotate", 8)) return AT_annotate;
     if (!memcmp(Str, "noreturn", 8)) return AT_noreturn;
     if (!memcmp(Str, "noinline", 8)) return AT_noinline;
+    if (!memcmp(Str, "fastcall", 8)) return AT_fastcall;
     break;
   case 9:
     if (!memcmp(Str, "dllimport", 9)) return AT_dllimport;

Modified: cfe/trunk/Sema/Sema.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Sema/Sema.h?rev=48017&r1=48016&r2=48017&view=diff

==============================================================================
--- cfe/trunk/Sema/Sema.h (original)
+++ cfe/trunk/Sema/Sema.h Fri Mar  7 14:04:22 2008
@@ -280,6 +280,8 @@
   void HandleVisibilityAttribute(Decl *d, AttributeList *rawAttr);
   void HandleNothrowAttribute(Decl *d, AttributeList *rawAttr);
   void HandleFormatAttribute(Decl *d, AttributeList *rawAttr);
+  void HandleStdCallAttribute(Decl *d, AttributeList *rawAttr);
+  void HandleFastCallAttribute(Decl *d, AttributeList *rawAttr);
   
   void WarnUndefinedMethod(SourceLocation ImpLoc, ObjCMethodDecl *method,
                            bool &IncompleteImpl);
@@ -501,7 +503,7 @@
                                        SourceLocation *CommaLocs,
                                        SourceLocation BuiltinLoc, 
                                        SourceLocation RParenLoc);
-  
+
   // __builtin_va_arg(expr, type)
   virtual ExprResult ActOnVAArg(SourceLocation BuiltinLoc,
                                 ExprTy *expr, TypeTy *type,

Modified: cfe/trunk/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Sema/SemaDecl.cpp?rev=48017&r1=48016&r2=48017&view=diff

==============================================================================
--- cfe/trunk/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/Sema/SemaDecl.cpp Fri Mar  7 14:04:22 2008
@@ -1811,6 +1811,12 @@
   case AttributeList::AT_nothrow:
     HandleNothrowAttribute(New, Attr);
     break;
+  case AttributeList::AT_stdcall:
+    HandleStdCallAttribute(New, Attr);
+    break;
+  case AttributeList::AT_fastcall:
+    HandleFastCallAttribute(New, Attr);
+    break;
   case AttributeList::AT_aligned:
     HandleAlignedAttribute(New, Attr);
     break;
@@ -2073,6 +2079,28 @@
   d->addAttr(new DLLExportAttr());
 }
 
+void Sema::HandleStdCallAttribute(Decl *d, AttributeList *rawAttr) {
+  // check the attribute arguments.
+  if (rawAttr->getNumArgs() != 0) {
+    Diag(rawAttr->getLoc(), diag::err_attribute_wrong_number_arguments,
+         std::string("0"));
+    return;
+  }
+
+  d->addAttr(new StdCallAttr());
+}
+
+void Sema::HandleFastCallAttribute(Decl *d, AttributeList *rawAttr) {
+  // check the attribute arguments.
+  if (rawAttr->getNumArgs() != 0) {
+    Diag(rawAttr->getLoc(), diag::err_attribute_wrong_number_arguments,
+         std::string("0"));
+    return;
+  }
+
+  d->addAttr(new FastCallAttr());
+}
+
 void Sema::HandleNothrowAttribute(Decl *d, AttributeList *rawAttr) {
   // check the attribute arguments.
   if (rawAttr->getNumArgs() != 0) {

Modified: cfe/trunk/include/clang/AST/Attr.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Attr.h?rev=48017&r1=48016&r2=48017&view=diff

==============================================================================
--- cfe/trunk/include/clang/AST/Attr.h (original)
+++ cfe/trunk/include/clang/AST/Attr.h Fri Mar  7 14:04:22 2008
@@ -34,7 +34,9 @@
     DLLExport,
     NoThrow,
     Format,
-    Visibility
+    Visibility,
+    FastCall,
+    StdCall
   };
     
 private:
@@ -196,6 +198,26 @@
   static bool classof(const DLLExportAttr *A) { return true; }
 };
 
+class FastCallAttr : public Attr {
+public:
+  FastCallAttr() : Attr(FastCall) {}
+
+  // Implement isa/cast/dyncast/etc.
+
+  static bool classof(const Attr *A) { return A->getKind() == FastCall; }
+  static bool classof(const FastCallAttr *A) { return true; }
+};
+
+class StdCallAttr : public Attr {
+public:
+  StdCallAttr() : Attr(StdCall) {}
+
+  // Implement isa/cast/dyncast/etc.
+
+  static bool classof(const Attr *A) { return A->getKind() == StdCall; }
+  static bool classof(const StdCallAttr *A) { return true; }
+};
+
 }  // end namespace clang
 
 #endif

Modified: cfe/trunk/include/clang/Parse/AttributeList.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/AttributeList.h?rev=48017&r1=48016&r2=48017&view=diff

==============================================================================
--- cfe/trunk/include/clang/Parse/AttributeList.h (original)
+++ cfe/trunk/include/clang/Parse/AttributeList.h Fri Mar  7 14:04:22 2008
@@ -60,6 +60,8 @@
     AT_dllimport,
     AT_dllexport,
     AT_visibility,
+    AT_fastcall,
+    AT_stdcall,
     AT_nothrow,
     AT_noinline,
     AT_warn_unused_result





More information about the cfe-commits mailing list