]> granicus.if.org Git - clang/commitdiff
print a type in a diagnostic.
authorChris Lattner <sabre@nondot.org>
Fri, 21 Nov 2008 18:27:34 +0000 (18:27 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 21 Nov 2008 18:27:34 +0000 (18:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59829 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticKinds.def
lib/Sema/SemaExpr.cpp
test/Sema/exprs.c

index bb681e69865003b62fc74af6235e29b6fa89ce38..443e31146226753029d490337c2ef57b1a413e42 100644 (file)
@@ -1250,7 +1250,7 @@ DIAG(err_typecheck_duplicate_vector_components_not_mlvalue, ERROR,
 DIAG(err_block_decl_ref_not_modifiable_lvalue, ERROR,
      "variable is not assignable (missing __block type specifier)")
 DIAG(err_typecheck_call_not_function, ERROR,
-     "called object is not a function or function pointer")
+     "called object type '%0' is not a function or function pointer")
 DIAG(err_typecheck_call_too_few_args, ERROR,
      "too few arguments to function")
 DIAG(err_typecheck_block_too_few_args, ERROR,
index ace5bcd5b70e14cbfc236456ca5c14902cbfb13e..7c4c15e0dd66aa017e53da4ac954c4f3b4579bac 100644 (file)
@@ -1347,7 +1347,7 @@ ActOnCallExpr(ExprTy *fn, SourceLocation LParenLoc,
     const PointerType *PT = Fn->getType()->getAsPointerType();
     if (PT == 0)
       return Diag(LParenLoc, diag::err_typecheck_call_not_function)
-        << Fn->getSourceRange();
+        << Fn->getType().getAsString() << Fn->getSourceRange();
     FuncT = PT->getPointeeType()->getAsFunctionType();
   } else { // This is a block call.
     FuncT = Fn->getType()->getAsBlockPointerType()->getPointeeType()->
@@ -1355,7 +1355,7 @@ ActOnCallExpr(ExprTy *fn, SourceLocation LParenLoc,
   }
   if (FuncT == 0)
     return Diag(LParenLoc, diag::err_typecheck_call_not_function)
-      << Fn->getSourceRange();
+      << Fn->getType().getAsString() << Fn->getSourceRange();
   
   // We know the result type of the call, set it.
   TheCall->setType(FuncT->getResultType().getNonReferenceType());
index 8c8adc65b5fb7158f3c09565f9bb8c19fed1e076..66806dba65837e372531d0eecfd2c424744fb6fa 100644 (file)
@@ -29,3 +29,7 @@ void test5(int *X, float *P) {
   (float*)X = P;   // expected-error {{assignment to cast is illegal, lvalue casts are not supported}}
 }
 
+void test6() {
+  int X;
+  X();  // expected-error {{called object type 'int' is not a function or function pointer}}
+}