From b1b4d337fafe30823b581cbfaa1641f37541fffe Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 21 Nov 2008 18:27:34 +0000 Subject: [PATCH] print a type in a diagnostic. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59829 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/DiagnosticKinds.def | 2 +- lib/Sema/SemaExpr.cpp | 4 ++-- test/Sema/exprs.c | 4 ++++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/include/clang/Basic/DiagnosticKinds.def b/include/clang/Basic/DiagnosticKinds.def index bb681e6986..443e311462 100644 --- a/include/clang/Basic/DiagnosticKinds.def +++ b/include/clang/Basic/DiagnosticKinds.def @@ -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, diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index ace5bcd5b7..7c4c15e0dd 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -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()); diff --git a/test/Sema/exprs.c b/test/Sema/exprs.c index 8c8adc65b5..66806dba65 100644 --- a/test/Sema/exprs.c +++ b/test/Sema/exprs.c @@ -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}} +} -- 2.40.0