]> granicus.if.org Git - clang/commitdiff
Make sure that all NamedDecls have an identifier namespace.
authorDouglas Gregor <dgregor@apple.com>
Fri, 23 Jan 2009 21:30:56 +0000 (21:30 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 23 Jan 2009 21:30:56 +0000 (21:30 +0000)
Make sure that we know a call is invalid if we dropped arguments.

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

include/clang/AST/DeclBase.h
lib/Sema/SemaExpr.cpp

index 64792e94684e8df43eee3b62fe1ca4f5ca71395b..86992b5dd51fa2677e961e79794bdcc812e66319 100644 (file)
@@ -257,19 +257,24 @@ public:
       if (DeclKind >= FunctionFirst && DeclKind <= FunctionLast)
         return IDNS_Ordinary;
       assert(0 && "Unknown decl kind!");
-    case ImplicitParam:
+    case OverloadedFunction:
     case Typedef:
+    case TemplateTypeParm:
+    case EnumConstant:
     case Var:
+    case CXXClassVar:
+    case ImplicitParam:
     case ParmVar:
     case OriginalParmVar:
-    case EnumConstant:
     case NonTypeTemplateParm:
+    case ObjCMethod:
+    case ObjCContainer:
+    case ObjCCategory:
+    case ObjCProtocol:
     case ObjCInterface:
+    case ObjCCategoryImpl:
+    case ObjCProperty:
     case ObjCCompatibleAlias:
-    case OverloadedFunction:
-    case CXXMethod:
-    case CXXConversion:
-    case CXXClassVar:
       return IDNS_Ordinary;
 
     case Field:
@@ -279,9 +284,9 @@ public:
 
     case Record:
     case CXXRecord:
-    case TemplateTypeParm:
     case Enum:
       return IDNS_Tag;
+
     case Namespace:
       return IdentifierNamespace(IDNS_Tag | IDNS_Ordinary);
     }
index 6ec4d4a61f348fc7d067c075e48441414a3e92d4..202f07b4bf5e5206c54dcb746b03cca9ca3d1c0f 100644 (file)
@@ -1684,7 +1684,8 @@ Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn,
   // assignment, to the types of the corresponding parameter, ...
   unsigned NumArgsInProto = Proto->getNumArgs();
   unsigned NumArgsToCheck = NumArgs;
-  
+  bool Invalid = false;
+
   // If too few arguments are available (and we don't have default
   // arguments for the remaining parameters), don't make the call.
   if (NumArgs < NumArgsInProto) {
@@ -1707,6 +1708,7 @@ Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn,
                        Args[NumArgs-1]->getLocEnd());
       // This deletes the extra arguments.
       Call->setNumArgs(NumArgsInProto);
+      Invalid = true;
     }
     NumArgsToCheck = NumArgsInProto;
   }
@@ -1746,7 +1748,7 @@ Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn,
     }
   }
 
-  return false;
+  return Invalid;
 }
 
 /// ActOnCallExpr - Handle a call to Fn with the specified array of arguments.