aboutsummaryrefslogtreecommitdiff
path: root/contrib/gcc/cp/semantics.c
diff options
context:
space:
mode:
authorAlexander Kabaev <kan@FreeBSD.org>2003-02-10 05:41:50 +0000
committerAlexander Kabaev <kan@FreeBSD.org>2003-02-10 05:41:50 +0000
commit7b74929d749aa5688fd0814a9880872323e02cde (patch)
treef843ff90d71b900271088361ed96ff82eb2a365d /contrib/gcc/cp/semantics.c
parente3dd383f0088d7ec9c67022680e31a5b756d4258 (diff)
downloadsrc-7b74929d749aa5688fd0814a9880872323e02cde.tar.gz
src-7b74929d749aa5688fd0814a9880872323e02cde.zip
Gcc 3.2.2-release.
Notes
Notes: svn path=/vendor/gcc/dist/; revision=110611
Diffstat (limited to 'contrib/gcc/cp/semantics.c')
-rw-r--r--contrib/gcc/cp/semantics.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/contrib/gcc/cp/semantics.c b/contrib/gcc/cp/semantics.c
index a4842036d8d3..a6f9afb083f5 100644
--- a/contrib/gcc/cp/semantics.c
+++ b/contrib/gcc/cp/semantics.c
@@ -2079,20 +2079,28 @@ tree
finish_typeof (expr)
tree expr;
{
+ tree type;
+
if (processing_template_decl)
{
- tree t;
+ type = make_aggr_type (TYPEOF_TYPE);
+ TYPE_FIELDS (type) = expr;
- t = make_aggr_type (TYPEOF_TYPE);
- TYPE_FIELDS (t) = expr;
-
- return t;
+ return type;
}
if (TREE_CODE (expr) == OFFSET_REF)
expr = resolve_offset_ref (expr);
- return TREE_TYPE (expr);
+ type = TREE_TYPE (expr);
+
+ if (!type || type == unknown_type_node)
+ {
+ error ("type of `%E' is unknown", expr);
+ return error_mark_node;
+ }
+
+ return type;
}
/* Compute the value of the `sizeof' operator. */