Commit 25587e40 by Alexandre Oliva Committed by Alexandre Oliva

c-tree.h (skip_evaluation): Move declaration...

* c-tree.h (skip_evaluation): Move declaration...
* c-common.h: ... here.
* c-typeck.c (build_external_ref): Don't assemble_external nor
mark a tree as used if skip_evaluation is set.
* c-parse.in (typeof): New non-terminal to set skip_evaluation
around TYPEOF.
(typespec_nonreserved_nonattr): Use it.

From-SVN: r56358
parent 0053afb9
2002-08-15 Alexandre Oliva <aoliva@redhat.com>
* c-tree.h (skip_evaluation): Move declaration...
* c-common.h: ... here.
* c-typeck.c (build_external_ref): Don't assemble_external nor
mark a tree as used if skip_evaluation is set.
* c-parse.in (typeof): New non-terminal to set skip_evaluation
around TYPEOF.
(typespec_nonreserved_nonattr): Use it.
2002-08-15 Douglas B Rupp <rupp@gnat.com> 2002-08-15 Douglas B Rupp <rupp@gnat.com>
* dbxout.c (dbx_debug_hooks): Update end_prologue, end_epilogue. * dbxout.c (dbx_debug_hooks): Update end_prologue, end_epilogue.
......
...@@ -790,6 +790,11 @@ extern int warn_deprecated; ...@@ -790,6 +790,11 @@ extern int warn_deprecated;
extern int max_tinst_depth; extern int max_tinst_depth;
/* Nonzero means the expression being parsed will never be evaluated.
This is a count, since unevaluated expressions can nest. */
extern int skip_evaluation;
/* C types are partitioned into three subsets: object, function, and /* C types are partitioned into three subsets: object, function, and
incomplete types. */ incomplete types. */
#define C_TYPE_OBJECT_P(type) \ #define C_TYPE_OBJECT_P(type) \
......
...@@ -562,6 +562,10 @@ alignof: ...@@ -562,6 +562,10 @@ alignof:
ALIGNOF { skip_evaluation++; } ALIGNOF { skip_evaluation++; }
; ;
typeof:
TYPEOF { skip_evaluation++; }
;
cast_expr: cast_expr:
unary_expr unary_expr
| '(' typename ')' cast_expr %prec UNARY | '(' typename ')' cast_expr %prec UNARY
...@@ -1394,10 +1398,10 @@ ifobjc ...@@ -1394,10 +1398,10 @@ ifobjc
| non_empty_protocolrefs | non_empty_protocolrefs
{ $$ = get_object_reference ($1); } { $$ = get_object_reference ($1); }
end ifobjc end ifobjc
| TYPEOF '(' expr ')' | typeof '(' expr ')'
{ $$ = TREE_TYPE ($3); } { skip_evaluation--; $$ = TREE_TYPE ($3); }
| TYPEOF '(' typename ')' | typeof '(' typename ')'
{ $$ = groktypename ($3); } { skip_evaluation--; $$ = groktypename ($3); }
; ;
/* typespec_nonreserved_attr does not exist. */ /* typespec_nonreserved_attr does not exist. */
......
...@@ -311,11 +311,6 @@ extern int current_function_returns_null; ...@@ -311,11 +311,6 @@ extern int current_function_returns_null;
extern int current_function_returns_abnormally; extern int current_function_returns_abnormally;
/* Nonzero means the expression being parsed will never be evaluated.
This is a count, since unevaluated expressions can nest. */
extern int skip_evaluation;
/* Nonzero means we are reading code that came from a system header file. */ /* Nonzero means we are reading code that came from a system header file. */
extern int system_header_p; extern int system_header_p;
......
...@@ -1441,7 +1441,8 @@ build_external_ref (id, fun) ...@@ -1441,7 +1441,8 @@ build_external_ref (id, fun)
if (TREE_TYPE (ref) == error_mark_node) if (TREE_TYPE (ref) == error_mark_node)
return error_mark_node; return error_mark_node;
assemble_external (ref); if (!skip_evaluation)
assemble_external (ref);
TREE_USED (ref) = 1; TREE_USED (ref) = 1;
if (TREE_CODE (ref) == CONST_DECL) if (TREE_CODE (ref) == CONST_DECL)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment