diff options
author | sandra <sandra@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-05-21 03:06:12 +0000 |
---|---|---|
committer | sandra <sandra@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-05-21 03:06:12 +0000 |
commit | 2b3c93a3f3c56cb6a495f4b94d4ca09ac6f7c531 (patch) | |
tree | 09231bb5a5f48721cdd7033ca7c944b29771f3cf /gcc/c-decl.c | |
parent | a96ae95b708ffd50cb89a386c5962c948dcc708b (diff) | |
download | gcc-2b3c93a3f3c56cb6a495f4b94d4ca09ac6f7c531.tar.gz |
2009-05-20 Sandra Loosemore <sandra@codesourcery.com>
gcc/
* doc/tm.texi (Misc): Document TARGET_INVALID_PARAMETER_TYPE,
TARGET_INVALID_RETURN_TYPE, TARGET_PROMOTED_TYPE, and
TARGET_CONVERT_TO_TYPE.
* hooks.c (hook_tree_const_tree_null): Define.
* hooks.h (hook_tree_const_tree_null): Declare.
* target.h (struct gcc_target): Add invalid_parameter_type,
invalid_return_type, promoted_type, and convert_to_type fields.
* target-def.h: (TARGET_INVALID_PARAMETER_TYPE): Define.
(TARGET_INVALID_RETURN_TYPE): Define.
(TARGET_PROMOTED_TYPE): Define.
(TARGET_CONVERT_TO_TYPE): Define.
(TARGET_INITIALIZER): Update for new fields.
* c-decl.c (grokdeclarator): Check targetm.invalid_return_type.
(grokparms): Check targetm.invalid_parameter_type.
* c-typeck.c (default_conversion): Check targetm.promoted_type.
* c-convert.c (convert): Check targetm.convert_to_type.
gcc/cp/
* typeck.c (default_conversion): Check targetm.promoted_type.
* decl.c (grokdeclarator): Check targetm.invalid_return_type.
(grokparms): Check targetm.invalid_parameter_type.
* cvt.c (ocp_convert): Check targetm.convert_to_type.
(build_expr_type_conversion): Check targetm.promoted_type.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@147758 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-decl.c')
-rw-r--r-- | gcc/c-decl.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 0c05b2438b9..2aa018faf58 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -4202,6 +4202,7 @@ grokdeclarator (const struct c_declarator *declarator, bool bitfield = width != NULL; tree element_type; struct c_arg_info *arg_info = 0; + const char *errmsg; tree expr_dummy; bool expr_const_operands_dummy; @@ -4835,6 +4836,12 @@ grokdeclarator (const struct c_declarator *declarator, error ("type name declared as function returning an array"); type = integer_type_node; } + errmsg = targetm.invalid_return_type (type); + if (errmsg) + { + error (errmsg); + type = integer_type_node; + } /* Construct the function type and go to the next inner layer of declarator. */ @@ -5381,6 +5388,7 @@ grokparms (struct c_arg_info *arg_info, bool funcdef_flag) { tree parm, type, typelt; unsigned int parmno; + const char *errmsg; /* If there is a parameter of incomplete type in a definition, this is an error. In a declaration this is valid, and a @@ -5424,6 +5432,14 @@ grokparms (struct c_arg_info *arg_info, bool funcdef_flag) } } + errmsg = targetm.invalid_parameter_type (type); + if (errmsg) + { + error (errmsg); + TREE_VALUE (typelt) = error_mark_node; + TREE_TYPE (parm) = error_mark_node; + } + if (DECL_NAME (parm) && TREE_USED (parm)) warn_if_shadowing (parm); } |