]> granicus.if.org Git - clang/commitdiff
Add FunctionDecl::isVariadic() to match BlockDecl::isVariadic() and ObjCMethodDecl...
authorTed Kremenek <kremenek@apple.com>
Thu, 29 Apr 2010 16:49:01 +0000 (16:49 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 29 Apr 2010 16:49:01 +0000 (16:49 +0000)
Do some minor refactoring along the way.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102635 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/Decl.h
lib/AST/Decl.cpp
lib/Sema/SemaChecking.cpp

index 739000739159a27d845b4b7af7c266db70e2bca0..3211ce8d45e4ca165329f3af605f6f4f4cd11459 100644 (file)
@@ -1138,6 +1138,9 @@ public:
   void setBody(Stmt *B);
   void setLazyBody(uint64_t Offset) { Body = Offset; }
 
+  /// Whether this function is variadic.
+  bool isVariadic() const;
+
   /// Whether this function is marked as virtual explicitly.
   bool isVirtualAsWritten() const { return IsVirtualAsWritten; }
   void setVirtualAsWritten(bool V) { IsVirtualAsWritten = V; }
index 62420de7a7d4ecd60f09961a4e3563b419e5601a..fc805451cba0e15ba6efbbe017053d617d7e2780 100644 (file)
@@ -906,6 +906,12 @@ void FunctionDecl::getNameForDiagnostic(std::string &S,
     
 }
 
+bool FunctionDecl::isVariadic() const {
+  if (const FunctionProtoType *FT = getType()->getAs<FunctionProtoType>())
+    return FT->isVariadic();
+  return false;
+}
+
 Stmt *FunctionDecl::getBody(const FunctionDecl *&Definition) const {
   for (redecl_iterator I = redecls_begin(), E = redecls_end(); I != E; ++I) {
     if (I->Body) {
index 91a3cbe071d16682eab8fc8595359c2342744a82..7029711d446c2a51362fb31595f9b2e1ab5cb062 100644 (file)
@@ -511,15 +511,10 @@ bool Sema::SemaBuiltinVAStart(CallExpr *TheCall) {
   bool isVariadic;
   if (CurBlock)
     isVariadic = CurBlock->isVariadic;
-  else if (getCurFunctionDecl()) {
-    if (FunctionProtoType* FTP =
-            dyn_cast<FunctionProtoType>(getCurFunctionDecl()->getType()))
-      isVariadic = FTP->isVariadic();
-    else
-      isVariadic = false;
-  } else {
+  else if (FunctionDecl *FD = getCurFunctionDecl())
+    isVariadic = FD->isVariadic();
+  else
     isVariadic = getCurMethodDecl()->isVariadic();
-  }
 
   if (!isVariadic) {
     Diag(Fn->getLocStart(), diag::err_va_start_used_in_non_variadic_function);