Form_pg_aggregate classForm;
                int                     catDirectArgs;
 
+               if (proc_call)
+                       ereport(ERROR,
+                                       (errcode(ERRCODE_UNDEFINED_FUNCTION),
+                                        errmsg("%s is not a procedure",
+                                                       func_signature_string(funcname, nargs,
+                                                                                                 argnames,
+                                                                                                 actual_arg_types)),
+                                        parser_errposition(pstate, location)));
+
                tup = SearchSysCache1(AGGFNOID, ObjectIdGetDatum(funcid));
                if (!HeapTupleIsValid(tup)) /* should not happen */
                        elog(ERROR, "cache lookup failed for aggregate %u", funcid);
 
 $$;
 CALL ptest2();
 -- various error cases
+CALL version();  -- error: not a procedure
+ERROR:  version() is not a procedure
+LINE 1: CALL version();
+             ^
+HINT:  To call a function, use SELECT.
+CALL sum(1);  -- error: not a procedure
+ERROR:  sum(integer) is not a procedure
+LINE 1: CALL sum(1);
+             ^
 CREATE PROCEDURE ptestx() LANGUAGE SQL WINDOW AS $$ INSERT INTO cp_test VALUES (1, 'a') $$;
 ERROR:  invalid attribute in procedure definition
 LINE 1: CREATE PROCEDURE ptestx() LANGUAGE SQL WINDOW AS $$ INSERT I...
 
 
 -- various error cases
 
+CALL version();  -- error: not a procedure
+CALL sum(1);  -- error: not a procedure
+
 CREATE PROCEDURE ptestx() LANGUAGE SQL WINDOW AS $$ INSERT INTO cp_test VALUES (1, 'a') $$;
 CREATE PROCEDURE ptestx() LANGUAGE SQL STRICT AS $$ INSERT INTO cp_test VALUES (1, 'a') $$;
 CREATE PROCEDURE ptestx(OUT a int) LANGUAGE SQL AS $$ INSERT INTO cp_test VALUES (1, 'a') $$;