* C PATCH to use VAR_P
@ 2015-06-24 12:28 Marek Polacek
2015-06-24 16:55 ` Jeff Law
0 siblings, 1 reply; 7+ messages in thread
From: Marek Polacek @ 2015-06-24 12:28 UTC (permalink / raw)
To: GCC Patches; +Cc: Joseph Myers
Similarly to what Gaby did in 2013 for C++
(<https://gcc.gnu.org/ml/gcc-patches/2013-03/msg01271.html>), this patch
makes the c/ and c-family/ code use VAR_P rather than
TREE_CODE (t) == VAR_DECL
(This is on top of the previous patch with is_global_var.)
Bootstrapped/regtested on x86_64-linux, ok for trunk?
2015-06-24 Marek Polacek <polacek@redhat.com>
* array-notation-common.c: Use VAR_P throughout.
* c-ada-spec.c: Likewise.
* c-common.c: Likewise.
* c-format.c: Likewise.
* c-gimplify.c: Likewise.
* c-omp.c: Likewise.
* c-pragma.c: Likewise.
* c-pretty-print.c: Likewise.
* cilk.c: Likewise.
* c-array-notation.c: Use VAR_P throughout.
* c-decl.c: Likewise.
* c-objc-common.c: Likewise.
* c-parser.c: Likewise.
* c-typeck.c: Likewise.
diff --git gcc/c-family/array-notation-common.c gcc/c-family/array-notation-common.c
index d60ec3f..f517424 100644
--- gcc/c-family/array-notation-common.c
+++ gcc/c-family/array-notation-common.c
@@ -231,7 +231,7 @@ find_rank (location_t loc, tree orig_expr, tree expr, bool ignore_builtin_fn,
|| TREE_CODE (ii_tree) == INDIRECT_REF)
ii_tree = TREE_OPERAND (ii_tree, 0);
else if (TREE_CODE (ii_tree) == PARM_DECL
- || TREE_CODE (ii_tree) == VAR_DECL)
+ || VAR_P (ii_tree))
break;
else
gcc_unreachable ();
diff --git gcc/c-family/c-ada-spec.c gcc/c-family/c-ada-spec.c
index ab29f86..ef3c5e3 100644
--- gcc/c-family/c-ada-spec.c
+++ gcc/c-family/c-ada-spec.c
@@ -2826,7 +2826,7 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
}
else
{
- if (TREE_CODE (t) == VAR_DECL
+ if (VAR_P (t)
&& decl_name
&& *IDENTIFIER_POINTER (decl_name) == '_')
return 0;
diff --git gcc/c-family/c-common.c gcc/c-family/c-common.c
index d315854..d7ccf0e 100644
--- gcc/c-family/c-common.c
+++ gcc/c-family/c-common.c
@@ -1620,7 +1620,7 @@ decl_constant_value_for_optimization (tree exp)
gcc_unreachable ();
if (!optimize
- || TREE_CODE (exp) != VAR_DECL
+ || !VAR_P (exp)
|| TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE
|| DECL_MODE (exp) == BLKmode)
return exp;
@@ -6952,7 +6952,7 @@ handle_nocommon_attribute (tree *node, tree name,
tree ARG_UNUSED (args),
int ARG_UNUSED (flags), bool *no_add_attrs)
{
- if (TREE_CODE (*node) == VAR_DECL)
+ if (VAR_P (*node))
DECL_COMMON (*node) = 0;
else
{
@@ -6970,7 +6970,7 @@ static tree
handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
int ARG_UNUSED (flags), bool *no_add_attrs)
{
- if (TREE_CODE (*node) == VAR_DECL)
+ if (VAR_P (*node))
DECL_COMMON (*node) = 1;
else
{
@@ -7349,12 +7349,12 @@ handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
tree node = *pnode;
if (TREE_CODE (node) == FUNCTION_DECL
- || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node))
+ || (VAR_P (node) && TREE_STATIC (node))
|| (TREE_CODE (node) == TYPE_DECL))
{
TREE_USED (node) = 1;
DECL_PRESERVE_P (node) = 1;
- if (TREE_CODE (node) == VAR_DECL)
+ if (VAR_P (node))
DECL_READ_P (node) = 1;
}
else
@@ -7378,14 +7378,13 @@ handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
tree decl = *node;
if (TREE_CODE (decl) == PARM_DECL
- || TREE_CODE (decl) == VAR_DECL
+ || VAR_P (decl)
|| TREE_CODE (decl) == FUNCTION_DECL
|| TREE_CODE (decl) == LABEL_DECL
|| TREE_CODE (decl) == TYPE_DECL)
{
TREE_USED (decl) = 1;
- if (TREE_CODE (decl) == VAR_DECL
- || TREE_CODE (decl) == PARM_DECL)
+ if (VAR_P (decl) || TREE_CODE (decl) == PARM_DECL)
DECL_READ_P (decl) = 1;
}
else
@@ -7913,7 +7912,7 @@ handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
goto fail;
}
- if (TREE_CODE (decl) == VAR_DECL
+ if (VAR_P (decl)
&& current_function_decl != NULL_TREE
&& !TREE_STATIC (decl))
{
@@ -7932,7 +7931,7 @@ handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
goto fail;
}
- if (TREE_CODE (decl) == VAR_DECL
+ if (VAR_P (decl)
&& !targetm.have_tls && targetm.emutls.tmpl_section
&& DECL_THREAD_LOCAL_P (decl))
{
@@ -8223,7 +8222,7 @@ handle_alias_ifunc_attribute (bool is_alias, tree *node, tree name, tree args,
tree decl = *node;
if (TREE_CODE (decl) != FUNCTION_DECL
- && (!is_alias || TREE_CODE (decl) != VAR_DECL))
+ && (!is_alias || !VAR_P (decl)))
{
warning (OPT_Wattributes, "%qE attribute ignored", name);
*no_add_attrs = true;
@@ -8518,7 +8517,7 @@ c_determine_visibility (tree decl)
DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
/* If visibility changed and DECL already has DECL_RTL, ensure
symbol flags are updated. */
- if (((TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
+ if (((VAR_P (decl) && TREE_STATIC (decl))
|| TREE_CODE (decl) == FUNCTION_DECL)
&& DECL_RTL_SET_P (decl))
make_decl_rtl (decl);
@@ -8540,7 +8539,7 @@ handle_tls_model_attribute (tree *node, tree name, tree args,
*no_add_attrs = true;
- if (TREE_CODE (decl) != VAR_DECL || !DECL_THREAD_LOCAL_P (decl))
+ if (!VAR_P (decl) || !DECL_THREAD_LOCAL_P (decl))
{
warning (OPT_Wattributes, "%qE attribute ignored", name);
return NULL_TREE;
@@ -9506,7 +9505,7 @@ handle_cleanup_attribute (tree *node, tree name, tree args,
for global destructors in C++. This requires infrastructure that
we don't have generically at the moment. It's also not a feature
we'd be missing too much, since we do have attribute constructor. */
- if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
+ if (!VAR_P (decl) || TREE_STATIC (decl))
{
warning (OPT_Wattributes, "%qE attribute ignored", name);
*no_add_attrs = true;
@@ -10491,7 +10490,7 @@ fold_offsetof_1 (tree expr)
case COMPOUND_EXPR:
/* Handle static members of volatile structs. */
t = TREE_OPERAND (expr, 1);
- gcc_assert (TREE_CODE (t) == VAR_DECL);
+ gcc_assert (VAR_P (t));
return fold_offsetof_1 (t);
default:
@@ -10554,7 +10553,7 @@ readonly_error (location_t loc, tree arg, enum lvalue_use use)
G_("read-only member %qD used as %<asm%> output")),
TREE_OPERAND (arg, 1));
}
- else if (TREE_CODE (arg) == VAR_DECL)
+ else if (VAR_P (arg))
error_at (loc, READONLY_MSG (G_("assignment of read-only variable %qD"),
G_("increment of read-only variable %qD"),
G_("decrement of read-only variable %qD"),
@@ -10814,7 +10813,7 @@ c_common_mark_addressable_vec (tree t)
{
while (handled_component_p (t))
t = TREE_OPERAND (t, 0);
- if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
+ if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
return;
TREE_ADDRESSABLE (t) = 1;
}
diff --git gcc/c-family/c-format.c gcc/c-family/c-format.c
index 76dc567..c6e8f5e 100644
--- gcc/c-family/c-format.c
+++ gcc/c-family/c-format.c
@@ -1514,7 +1514,7 @@ check_format_arg (void *ctx, tree format_tree,
tree array_size = 0;
tree array_init;
- if (TREE_CODE (format_tree) == VAR_DECL)
+ if (VAR_P (format_tree))
{
/* Pull out a constant value if the front end didn't. */
format_tree = decl_constant_value (format_tree);
@@ -1618,7 +1618,7 @@ check_format_arg (void *ctx, tree format_tree,
res->number_non_literal++;
return;
}
- if (TREE_CODE (format_tree) == VAR_DECL
+ if (VAR_P (format_tree)
&& TREE_CODE (TREE_TYPE (format_tree)) == ARRAY_TYPE
&& (array_init = decl_constant_value (format_tree)) != format_tree
&& TREE_CODE (array_init) == STRING_CST)
diff --git gcc/c-family/c-gimplify.c gcc/c-family/c-gimplify.c
index b646a3b..c557f66 100644
--- gcc/c-family/c-gimplify.c
+++ gcc/c-family/c-gimplify.c
@@ -263,7 +263,7 @@ c_gimplify_expr (tree *expr_p, gimple_seq *pre_p ATTRIBUTE_UNUSED,
/* This is handled mostly by gimplify.c, but we have to deal with
not warning about int x = x; as it is a GCC extension to turn off
this warning but only if warn_init_self is zero. */
- if (TREE_CODE (DECL_EXPR_DECL (*expr_p)) == VAR_DECL
+ if (VAR_P (DECL_EXPR_DECL (*expr_p))
&& !DECL_EXTERNAL (DECL_EXPR_DECL (*expr_p))
&& !TREE_STATIC (DECL_EXPR_DECL (*expr_p))
&& (DECL_INITIAL (DECL_EXPR_DECL (*expr_p)) == DECL_EXPR_DECL (*expr_p))
diff --git gcc/c-family/c-omp.c gcc/c-family/c-omp.c
index 289016d..d164697 100644
--- gcc/c-family/c-omp.c
+++ gcc/c-family/c-omp.c
@@ -212,7 +212,7 @@ c_finish_omp_atomic (location_t loc, enum tree_code code,
addr = save_expr (addr);
if (TREE_CODE (addr) != SAVE_EXPR
&& (TREE_CODE (addr) != ADDR_EXPR
- || TREE_CODE (TREE_OPERAND (addr, 0)) != VAR_DECL))
+ || !VAR_P (TREE_OPERAND (addr, 0))))
{
/* Make sure LHS is simple enough so that goa_lhs_expr_p can recognize
it even after unsharing function body. */
@@ -264,8 +264,8 @@ c_finish_omp_atomic (location_t loc, enum tree_code code,
/* Generally it is hard to prove lhs1 and lhs are the same memory
location, just diagnose different variables. */
if (rhs1
- && TREE_CODE (rhs1) == VAR_DECL
- && TREE_CODE (lhs) == VAR_DECL
+ && VAR_P (rhs1)
+ && VAR_P (lhs)
&& rhs1 != lhs)
{
if (code == OMP_ATOMIC)
@@ -279,7 +279,7 @@ c_finish_omp_atomic (location_t loc, enum tree_code code,
{
/* Generally it is hard to prove lhs1 and lhs are the same memory
location, just diagnose different variables. */
- if (lhs1 && TREE_CODE (lhs1) == VAR_DECL && TREE_CODE (lhs) == VAR_DECL)
+ if (lhs1 && VAR_P (lhs1) && VAR_P (lhs))
{
if (lhs1 != lhs)
{
diff --git gcc/c-family/c-pragma.c gcc/c-family/c-pragma.c
index 3cc3603..5987236 100644
--- gcc/c-family/c-pragma.c
+++ gcc/c-family/c-pragma.c
@@ -341,7 +341,7 @@ maybe_apply_pending_pragma_weaks (void)
DECL_ARTIFICIAL (decl) = 1;
TREE_PUBLIC (decl) = 1;
DECL_WEAK (decl) = 1;
- if (TREE_CODE (decl) == VAR_DECL)
+ if (VAR_P (decl))
TREE_STATIC (decl) = 1;
if (!target)
{
@@ -385,7 +385,7 @@ handle_pragma_weak (cpp_reader * ARG_UNUSED (dummy))
if (value)
{
DECL_EXTERNAL (decl) = 0;
- if (TREE_CODE (decl) == VAR_DECL)
+ if (VAR_P (decl))
TREE_STATIC (decl) = 1;
assemble_alias (decl, value);
}
diff --git gcc/c-family/c-pretty-print.c gcc/c-family/c-pretty-print.c
index 482509b..a65ff33 100644
--- gcc/c-family/c-pretty-print.c
+++ gcc/c-family/c-pretty-print.c
@@ -650,7 +650,7 @@ c_pretty_printer::storage_class_specifier (tree t)
{
if (DECL_REGISTER (t))
pp_c_ws_string (this, "register");
- else if (TREE_STATIC (t) && TREE_CODE (t) == VAR_DECL)
+ else if (TREE_STATIC (t) && VAR_P (t))
pp_c_ws_string (this, "static");
}
}
diff --git gcc/c-family/cilk.c gcc/c-family/cilk.c
index 347e4b9..958df27 100644
--- gcc/c-family/cilk.c
+++ gcc/c-family/cilk.c
@@ -382,7 +382,7 @@ create_parm_list (struct wrapper_data *wd, tree *val0, tree arg)
argument list. Because register variables are
worker-local we don't need to work hard to support
them in code that spawns. */
- if ((TREE_CODE (arg) == VAR_DECL) && DECL_HARD_REGISTER (arg))
+ if (VAR_P (arg) && DECL_HARD_REGISTER (arg))
{
error_at (EXPR_LOCATION (arg),
"explicit register variable %qD may not be modified in "
@@ -955,7 +955,7 @@ add_variable (struct wrapper_data *wd, tree var, enum add_variable_type how)
work anyway. Warn here. This misses one case: if the
register variable is used as the loop bound or increment it
has already been added to the map. */
- if ((how != ADD_BIND) && (TREE_CODE (var) == VAR_DECL)
+ if ((how != ADD_BIND) && VAR_P (var)
&& !DECL_EXTERNAL (var) && DECL_HARD_REGISTER (var))
warning (0, "register assignment ignored for %qD used in Cilk block",
var);
diff --git gcc/c/c-array-notation.c gcc/c/c-array-notation.c
index 2816680..0292468 100644
--- gcc/c/c-array-notation.c
+++ gcc/c/c-array-notation.c
@@ -87,7 +87,7 @@ make_triplet_val_inv (location_t loc, tree *value)
tree var, new_exp;
if (TREE_CODE (*value) != INTEGER_CST
&& TREE_CODE (*value) != PARM_DECL
- && TREE_CODE (*value) != VAR_DECL)
+ && !VAR_P (*value))
{
var = build_decl (loc, VAR_DECL, NULL_TREE, integer_type_node);
new_exp = build_modify_expr (loc, var, TREE_TYPE (var), NOP_EXPR, loc,
diff --git gcc/c/c-decl.c gcc/c/c-decl.c
index ab54db9..c5a5527 100644
--- gcc/c/c-decl.c
+++ gcc/c/c-decl.c
@@ -669,14 +669,14 @@ decl_jump_unsafe (tree decl)
return false;
/* Always warn about crossing variably modified types. */
- if ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == TYPE_DECL)
+ if ((VAR_P (decl) || TREE_CODE (decl) == TYPE_DECL)
&& variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
return true;
/* Otherwise, only warn if -Wgoto-misses-init and this is an
initialized automatic decl. */
if (warn_jump_misses_init
- && TREE_CODE (decl) == VAR_DECL
+ && VAR_P (decl)
&& !TREE_STATIC (decl)
&& DECL_INITIAL (decl) != NULL_TREE)
return true;
@@ -817,7 +817,7 @@ bind_label (tree name, tree label, struct c_scope *scope,
void
c_finish_incomplete_decl (tree decl)
{
- if (TREE_CODE (decl) == VAR_DECL)
+ if (VAR_P (decl))
{
tree type = TREE_TYPE (decl);
if (type != error_mark_node
@@ -1599,7 +1599,7 @@ c_bind (location_t loc, tree decl, bool is_global)
struct c_scope *scope;
bool nested = false;
- if (TREE_CODE (decl) != VAR_DECL || current_function_scope == NULL)
+ if (!VAR_P (decl) || current_function_scope == NULL)
{
/* Types and functions are always considered to be global. */
scope = file_scope;
@@ -2111,7 +2111,7 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl,
}
}
}
- else if (TREE_CODE (newdecl) == VAR_DECL)
+ else if (VAR_P (newdecl))
{
/* Only variables can be thread-local, and all declarations must
agree on this property. */
@@ -2306,7 +2306,7 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl,
&& !(TREE_CODE (newdecl) == PARM_DECL
&& TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
/* Don't warn about a variable definition following a declaration. */
- && !(TREE_CODE (newdecl) == VAR_DECL
+ && !(VAR_P (newdecl)
&& DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl)))
{
warned = warning (OPT_Wredundant_decls, "redundant redeclaration of %q+D",
@@ -2427,7 +2427,7 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
/* Merge the threadprivate attribute. */
- if (TREE_CODE (olddecl) == VAR_DECL && C_DECL_THREADPRIVATE_P (olddecl))
+ if (VAR_P (olddecl) && C_DECL_THREADPRIVATE_P (olddecl))
C_DECL_THREADPRIVATE_P (newdecl) = 1;
if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS))
@@ -2611,7 +2611,7 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
TREE_USED (newdecl) = 1;
else if (TREE_USED (newdecl))
TREE_USED (olddecl) = 1;
- if (TREE_CODE (olddecl) == VAR_DECL || TREE_CODE (olddecl) == PARM_DECL)
+ if (VAR_P (olddecl) || TREE_CODE (olddecl) == PARM_DECL)
DECL_READ_P (newdecl) |= DECL_READ_P (olddecl);
if (DECL_PRESERVE_P (olddecl))
DECL_PRESERVE_P (newdecl) = 1;
@@ -2659,8 +2659,7 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
int __thread x attribute ((tls_model ("local-exec")));
extern int __thread x;
as we'll lose the "local-exec" model. */
- if (TREE_CODE (olddecl) == VAR_DECL
- && DECL_THREAD_LOCAL_P (newdecl))
+ if (VAR_P (olddecl) && DECL_THREAD_LOCAL_P (newdecl))
set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
break;
}
@@ -2693,8 +2692,7 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
flags and attributes. */
if (DECL_RTL_SET_P (olddecl)
&& (TREE_CODE (olddecl) == FUNCTION_DECL
- || (TREE_CODE (olddecl) == VAR_DECL
- && TREE_STATIC (olddecl))))
+ || (VAR_P (olddecl) && TREE_STATIC (olddecl))))
make_decl_rtl (olddecl);
}
@@ -2943,7 +2941,7 @@ pushdecl (tree x)
type_saved = true;
}
if (B_IN_FILE_SCOPE (b)
- && TREE_CODE (b->decl) == VAR_DECL
+ && VAR_P (b->decl)
&& TREE_STATIC (b->decl)
&& TREE_CODE (TREE_TYPE (b->decl)) == ARRAY_TYPE
&& !TYPE_DOMAIN (TREE_TYPE (b->decl))
@@ -3074,7 +3072,7 @@ pushdecl_top_level (tree x)
{
tree name;
bool nested = false;
- gcc_assert (TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == CONST_DECL);
+ gcc_assert (VAR_P (x) || TREE_CODE (x) == CONST_DECL);
name = DECL_NAME (x);
@@ -4393,17 +4391,16 @@ c_decl_attributes (tree *node, tree attributes, int flags)
{
/* Add implicit "omp declare target" attribute if requested. */
if (current_omp_declare_target_attribute
- && ((TREE_CODE (*node) == VAR_DECL
- && is_global_var (*node))
+ && ((VAR_P (*node) && is_global_var (*node))
|| TREE_CODE (*node) == FUNCTION_DECL))
{
- if (TREE_CODE (*node) == VAR_DECL
+ if (VAR_P (*node)
&& ((DECL_CONTEXT (*node)
&& TREE_CODE (DECL_CONTEXT (*node)) == FUNCTION_DECL)
|| (current_function_decl && !DECL_EXTERNAL (*node))))
error ("%q+D in block scope inside of declare target directive",
*node);
- else if (TREE_CODE (*node) == VAR_DECL
+ else if (VAR_P (*node)
&& !lang_hooks.types.omp_mappable_type (TREE_TYPE (*node)))
error ("%q+D in declare target directive does not have mappable type",
*node);
@@ -4541,7 +4538,7 @@ start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
body of code to break, and it allows more efficient variable references
in the presence of dynamic linking. */
- if (TREE_CODE (decl) == VAR_DECL
+ if (VAR_P (decl)
&& !initialized
&& TREE_PUBLIC (decl)
&& !DECL_THREAD_LOCAL_P (decl)
@@ -4594,7 +4591,7 @@ start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
/* C99 6.7.4p3: An inline definition of a function with external
linkage shall not contain a definition of a modifiable object
with static storage duration... */
- if (TREE_CODE (decl) == VAR_DECL
+ if (VAR_P (decl)
&& current_scope != file_scope
&& TREE_STATIC (decl)
&& !TREE_READONLY (decl)
@@ -4672,7 +4669,7 @@ finish_decl (tree decl, location_t init_loc, tree init,
if (asmspec_tree)
asmspec = TREE_STRING_POINTER (asmspec_tree);
- if (TREE_CODE (decl) == VAR_DECL
+ if (VAR_P (decl)
&& TREE_STATIC (decl)
&& global_bindings_p ())
/* So decl is a global variable. Record the types it uses
@@ -4765,7 +4762,7 @@ finish_decl (tree decl, location_t init_loc, tree init,
relayout_decl (decl);
}
- if (TREE_CODE (decl) == VAR_DECL)
+ if (VAR_P (decl))
{
if (init && TREE_CODE (init) == CONSTRUCTOR)
add_flexible_array_elts_to_size (decl, init);
@@ -4846,7 +4843,7 @@ finish_decl (tree decl, location_t init_loc, tree init,
GCC has accepted -- but ignored -- the ASMSPEC in
this case. */
if (!DECL_FILE_SCOPE_P (decl)
- && TREE_CODE (decl) == VAR_DECL
+ && VAR_P (decl)
&& !C_DECL_REGISTER (decl)
&& !TREE_STATIC (decl))
warning (0, "ignoring asm-specifier for non-static local "
@@ -4930,7 +4927,7 @@ finish_decl (tree decl, location_t init_loc, tree init,
}
/* Install a cleanup (aka destructor) if one was given. */
- if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
+ if (VAR_P (decl) && !TREE_STATIC (decl))
{
tree attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
if (attr)
@@ -4958,7 +4955,7 @@ finish_decl (tree decl, location_t init_loc, tree init,
}
if (warn_cxx_compat
- && TREE_CODE (decl) == VAR_DECL
+ && VAR_P (decl)
&& !DECL_EXTERNAL (decl)
&& DECL_INITIAL (decl) == NULL_TREE)
{
@@ -6635,7 +6632,7 @@ grokdeclarator (const struct c_declarator *declarator,
if (global_decl
&& global_decl != visible_decl
- && TREE_CODE (global_decl) == VAR_DECL
+ && VAR_P (global_decl)
&& !TREE_PUBLIC (global_decl))
error_at (loc, "variable previously declared %<static%> "
"redeclared %<extern%>");
@@ -6714,7 +6711,7 @@ grokdeclarator (const struct c_declarator *declarator,
will be ignored, and would even crash the compiler.
Of course, this only makes sense on VAR,PARM, and RESULT decl's. */
if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl))
- && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
+ && (VAR_P (decl) || TREE_CODE (decl) == PARM_DECL
|| TREE_CODE (decl) == RESULT_DECL))
{
/* It is not an error for a structure with volatile fields to
@@ -6732,7 +6729,7 @@ grokdeclarator (const struct c_declarator *declarator,
gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
if (warn_cxx_compat
- && TREE_CODE (decl) == VAR_DECL
+ && VAR_P (decl)
&& TREE_PUBLIC (decl)
&& TREE_STATIC (decl)
&& (TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
diff --git gcc/c/c-objc-common.c gcc/c/c-objc-common.c
index 0bd3316..a783f80 100644
--- gcc/c/c-objc-common.c
+++ gcc/c/c-objc-common.c
@@ -109,7 +109,7 @@ c_tree_printer (pretty_printer *pp, text_info *text, const char *spec,
switch (*spec)
{
case 'D':
- if (TREE_CODE (t) == VAR_DECL && DECL_HAS_DEBUG_EXPR_P (t))
+ if (VAR_P (t) && DECL_HAS_DEBUG_EXPR_P (t))
{
t = DECL_DEBUG_EXPR (t);
if (!DECL_P (t))
diff --git gcc/c/c-parser.c gcc/c/c-parser.c
index f4d18bd..aaf7e32 100644
--- gcc/c/c-parser.c
+++ gcc/c/c-parser.c
@@ -10365,7 +10365,7 @@ c_parser_oacc_data_clause_deviceptr (c_parser *parser, tree list)
c_parser_omp_var_list_parens() should construct a list of
locations to go along with the var list. */
- if (TREE_CODE (v) != VAR_DECL)
+ if (!VAR_P (v))
error_at (loc, "%qD is not a variable", v);
else if (TREE_TYPE (v) == error_mark_node)
;
@@ -14765,7 +14765,7 @@ c_parser_omp_threadprivate (c_parser *parser)
/* If V had already been marked threadprivate, it doesn't matter
whether it had been used prior to this point. */
- if (TREE_CODE (v) != VAR_DECL)
+ if (!VAR_P (v))
error_at (loc, "%qD is not a variable", v);
else if (TREE_USED (v) && !C_DECL_THREADPRIVATE_P (v))
error_at (loc, "%qE declared %<threadprivate%> after first use", v);
diff --git gcc/c/c-typeck.c gcc/c/c-typeck.c
index 3dc1f07..aab26b0 100644
--- gcc/c/c-typeck.c
+++ gcc/c/c-typeck.c
@@ -219,8 +219,7 @@ c_incomplete_type_error (const_tree value, const_tree type)
if (TREE_CODE (type) == ERROR_MARK)
return;
- if (value != 0 && (TREE_CODE (value) == VAR_DECL
- || TREE_CODE (value) == PARM_DECL))
+ if (value != 0 && (VAR_P (value) || TREE_CODE (value) == PARM_DECL))
error ("%qD has an incomplete type %qT", value, type);
else
{
@@ -2531,7 +2530,7 @@ build_array_ref (location_t loc, tree array, tree index)
tree foo = array;
while (TREE_CODE (foo) == COMPONENT_REF)
foo = TREE_OPERAND (foo, 0);
- if (TREE_CODE (foo) == VAR_DECL && C_DECL_REGISTER (foo))
+ if (VAR_P (foo) && C_DECL_REGISTER (foo))
pedwarn (loc, OPT_Wpedantic,
"ISO C forbids subscripting %<register%> array");
else if (!lvalue_p (foo))
@@ -2673,7 +2672,7 @@ build_external_ref (location_t loc, tree id, int fun, tree *type)
&& DECL_DECLARED_INLINE_P (current_function_decl)
&& DECL_EXTERNAL (current_function_decl)
&& VAR_OR_FUNCTION_DECL_P (ref)
- && (TREE_CODE (ref) != VAR_DECL || TREE_STATIC (ref))
+ && (!VAR_P (ref) || TREE_STATIC (ref))
&& ! TREE_PUBLIC (ref)
&& DECL_CONTEXT (ref) != current_function_decl)
record_inline_static (loc, current_function_decl, ref,
@@ -11588,7 +11587,7 @@ handle_omp_array_sections_1 (tree c, tree t, vec<tree> &types,
{
if (error_operand_p (t))
return error_mark_node;
- if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
+ if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
{
if (DECL_P (t))
error_at (OMP_CLAUSE_LOCATION (c),
@@ -11601,7 +11600,7 @@ handle_omp_array_sections_1 (tree c, tree t, vec<tree> &types,
return error_mark_node;
}
else if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND
- && TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
+ && VAR_P (t) && DECL_THREAD_LOCAL_P (t))
{
error_at (OMP_CLAUSE_LOCATION (c),
"%qD is threadprivate variable in %qs clause", t,
@@ -12197,7 +12196,7 @@ c_finish_omp_clauses (tree clauses)
case OMP_CLAUSE_COPYIN:
t = OMP_CLAUSE_DECL (c);
- if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
+ if (!VAR_P (t) || !DECL_THREAD_LOCAL_P (t))
{
error_at (OMP_CLAUSE_LOCATION (c),
"%qE must be %<threadprivate%> for %<copyin%>", t);
@@ -12235,7 +12234,7 @@ c_finish_omp_clauses (tree clauses)
check_dup_generic:
t = OMP_CLAUSE_DECL (c);
- if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
+ if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
{
error_at (OMP_CLAUSE_LOCATION (c),
"%qE is not a variable in clause %qs", t,
@@ -12258,7 +12257,7 @@ c_finish_omp_clauses (tree clauses)
t = OMP_CLAUSE_DECL (c);
need_complete = true;
need_implicitly_determined = true;
- if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
+ if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
{
error_at (OMP_CLAUSE_LOCATION (c),
"%qE is not a variable in clause %<firstprivate%>", t);
@@ -12279,7 +12278,7 @@ c_finish_omp_clauses (tree clauses)
t = OMP_CLAUSE_DECL (c);
need_complete = true;
need_implicitly_determined = true;
- if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
+ if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
{
error_at (OMP_CLAUSE_LOCATION (c),
"%qE is not a variable in clause %<lastprivate%>", t);
@@ -12298,7 +12297,7 @@ c_finish_omp_clauses (tree clauses)
case OMP_CLAUSE_ALIGNED:
t = OMP_CLAUSE_DECL (c);
- if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
+ if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
{
error_at (OMP_CLAUSE_LOCATION (c),
"%qE is not a variable in %<aligned%> clause", t);
@@ -12333,7 +12332,7 @@ c_finish_omp_clauses (tree clauses)
}
if (t == error_mark_node)
remove = true;
- else if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
+ else if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
{
error_at (OMP_CLAUSE_LOCATION (c),
"%qE is not a variable in %<depend%> clause", t);
@@ -12368,14 +12367,14 @@ c_finish_omp_clauses (tree clauses)
}
if (t == error_mark_node)
remove = true;
- else if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
+ else if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
{
error_at (OMP_CLAUSE_LOCATION (c),
"%qE is not a variable in %qs clause", t,
omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
remove = true;
}
- else if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
+ else if (VAR_P (t) && DECL_THREAD_LOCAL_P (t))
{
error_at (OMP_CLAUSE_LOCATION (c),
"%qD is threadprivate variable in %qs clause", t,
@@ -12502,7 +12501,7 @@ c_finish_omp_clauses (tree clauses)
{
const char *share_name = NULL;
- if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
+ if (VAR_P (t) && DECL_THREAD_LOCAL_P (t))
share_name = "threadprivate";
else switch (c_omp_predetermined_sharing (t))
{
@@ -12751,10 +12750,10 @@ c_tree_equal (tree t1, tree t2)
it means that it's going to be unified with whatever the
TARGET_EXPR is really supposed to initialize, so treat it
as being equivalent to anything. */
- if (TREE_CODE (o1) == VAR_DECL && DECL_NAME (o1) == NULL_TREE
+ if (VAR_P (o1) && DECL_NAME (o1) == NULL_TREE
&& !DECL_RTL_SET_P (o1))
/*Nop*/;
- else if (TREE_CODE (o2) == VAR_DECL && DECL_NAME (o2) == NULL_TREE
+ else if (VAR_P (o2) && DECL_NAME (o2) == NULL_TREE
&& !DECL_RTL_SET_P (o2))
/*Nop*/;
else if (!c_tree_equal (o1, o2))
Marek
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: C PATCH to use VAR_P
2015-06-24 12:28 C PATCH to use VAR_P Marek Polacek
@ 2015-06-24 16:55 ` Jeff Law
0 siblings, 0 replies; 7+ messages in thread
From: Jeff Law @ 2015-06-24 16:55 UTC (permalink / raw)
To: Marek Polacek, GCC Patches; +Cc: Joseph Myers
On 06/24/2015 06:25 AM, Marek Polacek wrote:
> Similarly to what Gaby did in 2013 for C++
> (<https://gcc.gnu.org/ml/gcc-patches/2013-03/msg01271.html>), this patch
> makes the c/ and c-family/ code use VAR_P rather than
>
> TREE_CODE (t) == VAR_DECL
>
> (This is on top of the previous patch with is_global_var.)
>
> Bootstrapped/regtested on x86_64-linux, ok for trunk?
>
> 2015-06-24 Marek Polacek <polacek@redhat.com>
>
> * array-notation-common.c: Use VAR_P throughout.
> * c-ada-spec.c: Likewise.
> * c-common.c: Likewise.
> * c-format.c: Likewise.
> * c-gimplify.c: Likewise.
> * c-omp.c: Likewise.
> * c-pragma.c: Likewise.
> * c-pretty-print.c: Likewise.
> * cilk.c: Likewise.
>
> * c-array-notation.c: Use VAR_P throughout.
> * c-decl.c: Likewise.
> * c-objc-common.c: Likewise.
> * c-parser.c: Likewise.
> * c-typeck.c: Likewise.
I spot checked mostly for VAR_P vs !VAR_P correctness and everything
looked correct. OK for the trunk. Consider any follow-ups to use VAR_P
in a similar way pre-approved.
jeff
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: C++ PATCH to use VAR_P
2015-06-26 10:10 C++ " Marek Polacek
@ 2015-06-26 21:19 ` Jason Merrill
0 siblings, 0 replies; 7+ messages in thread
From: Jason Merrill @ 2015-06-26 21:19 UTC (permalink / raw)
To: Marek Polacek, GCC Patches
OK.
Jason
^ permalink raw reply [flat|nested] 7+ messages in thread
* C++ PATCH to use VAR_P
@ 2015-06-26 10:10 Marek Polacek
2015-06-26 21:19 ` Jason Merrill
0 siblings, 1 reply; 7+ messages in thread
From: Marek Polacek @ 2015-06-26 10:10 UTC (permalink / raw)
To: GCC Patches, Jason Merrill
Since Gaby's cleanup in 2013 many uses of TREE_CODE (decl) == VAR_DECL
have crept back in. This is another cleanup in this area.
Bootstrapped/regtested on x86_64-linux, ok for trunk?
2015-06-26 Marek Polacek <polacek@redhat.com>
* call.c (set_up_extended_ref_temp): Use VAR_P.
* class.c: Use VAR_P throughout.
* constexpr.c (cxx_eval_constant_expression): Use VAR_P.
* cp-array-notation.c (make_triplet_val_inv): Likewise.
* decl.c: Use VAR_OR_FUNCTION_DECL_P or VAR_P
throughout.
* decl2.c: Likewise.
* error.c (dump_decl): Use VAR_P.
* mangle.c (decl_implicit_alias_p): Likewise.
* parser.c: Use VAR_P throughout.
* pt.c: Likewise.
* semantics.c: Likewise.
* vtable-class-hierarchy.c: Likewise.
* tree.c (handle_abi_tag_attribute): Use VAR_OR_FUNCTION_DECL_P.
diff --git gcc/cp/call.c gcc/cp/call.c
index 0e8840b..e5ed53b 100644
--- gcc/cp/call.c
+++ gcc/cp/call.c
@@ -9697,7 +9697,7 @@ set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups,
}
/* Avoid -Wunused-variable warning (c++/38958). */
if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
- && TREE_CODE (decl) == VAR_DECL)
+ && VAR_P (decl))
TREE_USED (decl) = DECL_READ_P (decl) = true;
*initp = init;
diff --git gcc/cp/class.c gcc/cp/class.c
index f4e4f85..6c7fa99 100644
--- gcc/cp/class.c
+++ gcc/cp/class.c
@@ -1399,7 +1399,7 @@ check_tag (tree tag, tree id, tree *tp, abi_tag_data *p)
p->t, tag, *tp))
inform (location_of (*tp), "%qT declared here", *tp);
}
- else if (TREE_CODE (p->t) == VAR_DECL)
+ else if (VAR_P (p->t))
{
if (warning (OPT_Wabi_tag, "%qD inherits the %E ABI tag "
"that %qT (used in its type) has", p->t, tag, *tp))
@@ -1588,7 +1588,7 @@ check_abi_tags (tree t, tree subob)
void
check_abi_tags (tree decl)
{
- if (TREE_CODE (decl) == VAR_DECL)
+ if (VAR_P (decl))
check_abi_tags (decl, TREE_TYPE (decl));
else if (TREE_CODE (decl) == FUNCTION_DECL
&& !mangle_return_type_p (decl))
@@ -3040,7 +3040,7 @@ finish_struct_anon_r (tree field, bool complain)
{
/* We already complained about static data members in
finish_static_data_member_decl. */
- if (complain && TREE_CODE (elt) != VAR_DECL)
+ if (complain && !VAR_P (elt))
{
if (is_union)
permerror (input_location,
diff --git gcc/cp/constexpr.c gcc/cp/constexpr.c
index 9cb45ea..4fce5e0 100644
--- gcc/cp/constexpr.c
+++ gcc/cp/constexpr.c
@@ -3033,7 +3033,7 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
if (TREE_CODE (r) == TARGET_EXPR
&& TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
r = TARGET_EXPR_INITIAL (r);
- if (TREE_CODE (r) == VAR_DECL)
+ if (VAR_P (r))
if (tree *p = ctx->values->get (r))
r = *p;
if (DECL_P (r))
diff --git gcc/cp/cp-array-notation.c gcc/cp/cp-array-notation.c
index 3b8610f..4daa57c 100644
--- gcc/cp/cp-array-notation.c
+++ gcc/cp/cp-array-notation.c
@@ -87,7 +87,7 @@ make_triplet_val_inv (tree *value)
{
if (TREE_CODE (*value) != INTEGER_CST
&& TREE_CODE (*value) != PARM_DECL
- && TREE_CODE (*value) != VAR_DECL)
+ && !VAR_P (*value))
*value = get_temp_regvar (ptrdiff_type_node, *value);
}
diff --git gcc/cp/decl.c gcc/cp/decl.c
index 1fa28b2..9594223 100644
--- gcc/cp/decl.c
+++ gcc/cp/decl.c
@@ -2476,14 +2476,15 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
{
struct symtab_node *snode = NULL;
- if (TREE_CODE (newdecl) == VAR_DECL
- && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl) || DECL_EXTERNAL (olddecl)))
+ if (VAR_P (newdecl)
+ && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
+ || DECL_EXTERNAL (olddecl)))
snode = symtab_node::get (olddecl);
memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
(char *) newdecl + sizeof (struct tree_decl_common),
size - sizeof (struct tree_decl_common)
+ TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
- if (TREE_CODE (newdecl) == VAR_DECL)
+ if (VAR_P (newdecl))
olddecl->decl_with_vis.symtab_node = snode;
}
break;
@@ -2496,8 +2497,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
}
}
- if (TREE_CODE (newdecl) == FUNCTION_DECL
- || TREE_CODE (newdecl) == VAR_DECL)
+ if (VAR_OR_FUNCTION_DECL_P (newdecl))
{
if (DECL_EXTERNAL (olddecl)
|| TREE_PUBLIC (olddecl)
@@ -2522,7 +2522,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
}
}
- if (TREE_CODE (newdecl) == VAR_DECL
+ if (VAR_P (newdecl)
&& DECL_THREAD_LOCAL_P (newdecl))
set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
}
@@ -2559,8 +2559,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
structure is shared in between newdecl and oldecl. */
if (TREE_CODE (newdecl) == FUNCTION_DECL)
DECL_STRUCT_FUNCTION (newdecl) = NULL;
- if (TREE_CODE (newdecl) == FUNCTION_DECL
- || TREE_CODE (newdecl) == VAR_DECL)
+ if (VAR_OR_FUNCTION_DECL_P (newdecl))
{
struct symtab_node *snode = symtab_node::get (newdecl);
if (snode)
@@ -4828,7 +4827,7 @@ start_decl (const cp_declarator *declarator,
/* Enter this declaration into the symbol table. Don't push the plain
VAR_DECL for a variable template. */
if (!template_parm_scope_p ()
- || TREE_CODE (decl) != VAR_DECL)
+ || !VAR_P (decl))
decl = maybe_push_decl (decl);
if (processing_template_decl)
diff --git gcc/cp/decl2.c gcc/cp/decl2.c
index f045253..da531fa 100644
--- gcc/cp/decl2.c
+++ gcc/cp/decl2.c
@@ -1005,7 +1005,7 @@ grokfield (const cp_declarator *declarator,
return value;
/* Need to set this before push_template_decl. */
- if (TREE_CODE (value) == VAR_DECL)
+ if (VAR_P (value))
DECL_CONTEXT (value) = current_class_type;
if (processing_template_decl && VAR_OR_FUNCTION_DECL_P (value))
@@ -1417,7 +1417,7 @@ cp_omp_mappable_type (tree type)
{
tree field;
for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
- if (TREE_CODE (field) == VAR_DECL)
+ if (VAR_P (field))
return false;
/* All fields must have mappable types. */
else if (TREE_CODE (field) == FIELD_DECL
@@ -1438,21 +1438,21 @@ cplus_decl_attributes (tree *decl, tree attributes, int flags)
/* Add implicit "omp declare target" attribute if requested. */
if (scope_chain->omp_declare_target_attribute
- && ((TREE_CODE (*decl) == VAR_DECL
+ && ((VAR_P (*decl)
&& (TREE_STATIC (*decl) || DECL_EXTERNAL (*decl)))
|| TREE_CODE (*decl) == FUNCTION_DECL))
{
- if (TREE_CODE (*decl) == VAR_DECL
+ if (VAR_P (*decl)
&& DECL_CLASS_SCOPE_P (*decl))
error ("%q+D static data member inside of declare target directive",
*decl);
- else if (TREE_CODE (*decl) == VAR_DECL
+ else if (VAR_P (*decl)
&& (DECL_FUNCTION_SCOPE_P (*decl)
|| (current_function_decl && !DECL_EXTERNAL (*decl))))
error ("%q+D in block scope inside of declare target directive",
*decl);
else if (!processing_template_decl
- && TREE_CODE (*decl) == VAR_DECL
+ && VAR_P (*decl)
&& !cp_omp_mappable_type (TREE_TYPE (*decl)))
error ("%q+D in declare target directive does not have mappable type",
*decl);
@@ -1980,7 +1980,7 @@ mark_needed (tree decl)
FOR_EACH_CLONE (clone, decl)
mark_needed (clone);
}
- else if (TREE_CODE (decl) == VAR_DECL)
+ else if (VAR_P (decl))
{
varpool_node *node = varpool_node::get_create (decl);
/* C++ frontend use mark_decl_references to force COMDAT variables
@@ -2179,8 +2179,7 @@ constrain_visibility (tree decl, int visibility, bool tmpl)
DECL_WEAK (decl) = 0;
DECL_COMMON (decl) = 0;
DECL_COMDAT (decl) = false;
- if (TREE_CODE (decl) == FUNCTION_DECL
- || TREE_CODE (decl) == VAR_DECL)
+ if (VAR_OR_FUNCTION_DECL_P (decl))
{
struct symtab_node *snode = symtab_node::get (decl);
@@ -2643,7 +2642,7 @@ reset_type_linkage_2 (tree type)
reset_decl_linkage (ti);
}
for (tree m = TYPE_FIELDS (type); m; m = DECL_CHAIN (m))
- if (TREE_CODE (m) == VAR_DECL)
+ if (VAR_P (m))
reset_decl_linkage (m);
for (tree m = TYPE_METHODS (type); m; m = DECL_CHAIN (m))
{
@@ -2701,7 +2700,7 @@ tentative_decl_linkage (tree decl)
DECL_INTERFACE_KNOWN (decl) = 1;
}
}
- else if (TREE_CODE (decl) == VAR_DECL)
+ else if (VAR_P (decl))
maybe_commonize_var (decl);
}
}
@@ -4208,7 +4207,7 @@ no_linkage_error (tree decl)
"anonymous type, is used but never defined", decl);
else if (DECL_EXTERN_C_P (decl))
/* Allow this; it's pretty common in C. */;
- else if (TREE_CODE (decl) == VAR_DECL)
+ else if (VAR_P (decl))
/* DRs 132, 319 and 389 seem to indicate types with
no linkage can only be used to declare extern "C"
entities. Since it's not always an error in the
@@ -4227,12 +4226,12 @@ no_linkage_error (tree decl)
}
else if (cxx_dialect >= cxx11)
{
- if (TREE_CODE (decl) == VAR_DECL || !DECL_PURE_VIRTUAL_P (decl))
+ if (VAR_P (decl) || !DECL_PURE_VIRTUAL_P (decl))
permerror (DECL_SOURCE_LOCATION (decl),
"%q#D, declared using local type "
"%qT, is used but never defined", decl, t);
}
- else if (TREE_CODE (decl) == VAR_DECL)
+ else if (VAR_P (decl))
warning_at (DECL_SOURCE_LOCATION (decl), 0, "type %qT with no linkage "
"used to declare variable %q#D with linkage", t, decl);
else
diff --git gcc/cp/error.c gcc/cp/error.c
index 96fa94d..3710046 100644
--- gcc/cp/error.c
+++ gcc/cp/error.c
@@ -1065,7 +1065,7 @@ dump_decl (cxx_pretty_printer *pp, tree t, int flags)
dump_simple_decl (pp, t, TREE_TYPE (t), flags);
/* Handle variable template specializations. */
- if (TREE_CODE (t) == VAR_DECL
+ if (VAR_P (t)
&& DECL_LANG_SPECIFIC (t)
&& DECL_TEMPLATE_INFO (t)
&& PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t)))
diff --git gcc/cp/mangle.c gcc/cp/mangle.c
index c1a81fc..625e3e6 100644
--- gcc/cp/mangle.c
+++ gcc/cp/mangle.c
@@ -3529,8 +3529,7 @@ decl_implicit_alias_p (tree decl)
if (DECL_P (decl) && DECL_ARTIFICIAL (decl)
&& DECL_IGNORED_P (decl)
&& (TREE_CODE (decl) == FUNCTION_DECL
- || (TREE_CODE (decl) == VAR_DECL
- && TREE_STATIC (decl))))
+ || (VAR_P (decl) && TREE_STATIC (decl))))
{
symtab_node *n = symtab_node::get (decl);
if (n && n->cpp_implicit_alias)
diff --git gcc/cp/parser.c gcc/cp/parser.c
index 6dc79ac..acf147c 100644
--- gcc/cp/parser.c
+++ gcc/cp/parser.c
@@ -10571,7 +10571,7 @@ cp_convert_range_for (tree statement, tree range_decl, tree range_expr,
{
tree range_temp;
- if (TREE_CODE (range_expr) == VAR_DECL
+ if (VAR_P (range_expr)
&& array_of_runtime_bound_p (TREE_TYPE (range_expr)))
/* Can't bind a reference to an array of runtime bound. */
range_temp = range_expr;
@@ -28091,7 +28091,7 @@ cp_parser_oacc_data_clause_deviceptr (cp_parser *parser, tree list)
c_parser_omp_var_list_parens should construct a list of
locations to go along with the var list. */
- if (TREE_CODE (v) != VAR_DECL)
+ if (!VAR_P (v))
error_at (loc, "%qD is not a variable", v);
else if (TREE_TYPE (v) == error_mark_node)
;
diff --git gcc/cp/pt.c gcc/cp/pt.c
index fe5fc14..4884c36 100644
--- gcc/cp/pt.c
+++ gcc/cp/pt.c
@@ -2432,7 +2432,7 @@ check_explicit_specialization (tree declarator,
switch (tsk)
{
case tsk_none:
- if (processing_specialization && TREE_CODE (decl) != VAR_DECL)
+ if (processing_specialization && !VAR_P (decl))
{
specialization = 1;
SET_DECL_TEMPLATE_SPECIALIZATION (decl);
@@ -2865,7 +2865,7 @@ check_explicit_specialization (tree declarator,
/* A specialization is not necessarily COMDAT. */
DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
&& DECL_DECLARED_INLINE_P (decl));
- else if (TREE_CODE (decl) == VAR_DECL)
+ else if (VAR_P (decl))
DECL_COMDAT (decl) = false;
/* Register this specialization so that we can find it
@@ -4748,7 +4748,7 @@ push_template_decl_real (tree decl, bool is_friend)
is_partial = ((DECL_IMPLICIT_TYPEDEF_P (decl)
&& TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
&& CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
- || (TREE_CODE (decl) == VAR_DECL
+ || (VAR_P (decl)
&& DECL_LANG_SPECIFIC (decl)
&& DECL_TEMPLATE_SPECIALIZATION (decl)
&& TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl))));
@@ -10769,7 +10769,7 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
if (PRIMARY_TEMPLATE_P (t))
DECL_PRIMARY_TEMPLATE (r) = r;
- if (TREE_CODE (decl) != TYPE_DECL && TREE_CODE (decl) != VAR_DECL)
+ if (TREE_CODE (decl) != TYPE_DECL && !VAR_P (decl))
/* Record this non-type partial instantiation. */
register_specialization (r, t,
DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
diff --git gcc/cp/semantics.c gcc/cp/semantics.c
index 2f3303a..6a74648 100644
--- gcc/cp/semantics.c
+++ gcc/cp/semantics.c
@@ -3161,7 +3161,7 @@ process_outer_var_ref (tree decl, tsubst_flags_t complain)
= decl_function_context (containing_function);
}
- if (lambda_expr && TREE_CODE (decl) == VAR_DECL
+ if (lambda_expr && VAR_P (decl)
&& DECL_ANON_UNION_VAR_P (decl))
{
if (complain & tf_error)
@@ -4281,7 +4281,7 @@ handle_omp_array_sections_1 (tree c, tree t, vec<tree> &types,
return error_mark_node;
if (type_dependent_expression_p (t))
return NULL_TREE;
- if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
+ if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
{
if (processing_template_decl)
return NULL_TREE;
@@ -4296,7 +4296,7 @@ handle_omp_array_sections_1 (tree c, tree t, vec<tree> &types,
return error_mark_node;
}
else if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_DEPEND
- && TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
+ && VAR_P (t) && DECL_THREAD_LOCAL_P (t))
{
error_at (OMP_CLAUSE_LOCATION (c),
"%qD is threadprivate variable in %qs clause", t,
@@ -5662,7 +5662,7 @@ finish_omp_clauses (tree clauses)
case OMP_CLAUSE_ALIGNED:
t = OMP_CLAUSE_DECL (c);
- if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
+ if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
{
if (processing_template_decl)
break;
@@ -5732,7 +5732,7 @@ finish_omp_clauses (tree clauses)
}
if (t == error_mark_node)
remove = true;
- else if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
+ else if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
{
if (processing_template_decl)
break;
@@ -5774,7 +5774,7 @@ finish_omp_clauses (tree clauses)
}
if (t == error_mark_node)
remove = true;
- else if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
+ else if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
{
if (processing_template_decl)
break;
@@ -5789,7 +5789,7 @@ finish_omp_clauses (tree clauses)
omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
remove = true;
}
- else if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
+ else if (VAR_P (t) && DECL_THREAD_LOCAL_P (t))
{
error ("%qD is threadprivate variable in %qs clause", t,
omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
diff --git gcc/cp/tree.c gcc/cp/tree.c
index 9ee203f..272fb2c 100644
--- gcc/cp/tree.c
+++ gcc/cp/tree.c
@@ -3683,8 +3683,7 @@ handle_abi_tag_attribute (tree* node, tree name, tree args,
}
else
{
- if (TREE_CODE (*node) != FUNCTION_DECL
- && TREE_CODE (*node) != VAR_DECL)
+ if (!VAR_OR_FUNCTION_DECL_P (*node))
{
error ("%qE attribute applied to non-function, non-variable %qD",
name, *node);
diff --git gcc/cp/vtable-class-hierarchy.c gcc/cp/vtable-class-hierarchy.c
index a1582e7..2c59f14 100644
--- gcc/cp/vtable-class-hierarchy.c
+++ gcc/cp/vtable-class-hierarchy.c
@@ -557,11 +557,11 @@ register_construction_vtables (tree base_class, tree record_type,
if (TREE_OPERAND (value, 0))
val_vtbl_decl = TREE_OPERAND (value, 0);
- while (TREE_CODE (val_vtbl_decl) != VAR_DECL
+ while (!VAR_P (val_vtbl_decl)
&& TREE_OPERAND (val_vtbl_decl, 0))
val_vtbl_decl = TREE_OPERAND (val_vtbl_decl, 0);
- gcc_assert (TREE_CODE (val_vtbl_decl) == VAR_DECL);
+ gcc_assert (VAR_P (val_vtbl_decl));
/* Check to see if we already have this vtable pointer in
our valid set for this base class. */
@@ -876,7 +876,7 @@ output_set_info (tree record_type, vec<tree> vtbl_ptr_array)
if (TREE_CODE (arg0) == ADDR_EXPR)
arg0 = TREE_OPERAND (arg0, 0);
- if (TREE_CODE (arg0) == VAR_DECL)
+ if (VAR_P (arg0))
vptr_name = IDENTIFIER_POINTER (DECL_NAME (arg0));
if (TREE_CODE (arg1) == INTEGER_CST)
Marek
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: C PATCH to use VAR_P
2015-06-24 12:58 ` Marek Polacek
@ 2015-06-24 16:56 ` Jeff Law
0 siblings, 0 replies; 7+ messages in thread
From: Jeff Law @ 2015-06-24 16:56 UTC (permalink / raw)
To: Marek Polacek, Uros Bizjak; +Cc: gcc-patches
On 06/24/2015 06:45 AM, Marek Polacek wrote:
> On Wed, Jun 24, 2015 at 02:37:30PM +0200, Uros Bizjak wrote:
>> Hello!
>>
>>> Similarly to what Gaby did in 2013 for C++
>>> (<https://gcc.gnu.org/ml/gcc-patches/2013-03/msg01271.html>), this patch
>>> makes the c/ and c-family/ code use VAR_P rather than
>>>
>>> TREE_CODE (t) == VAR_DECL
>>>
>>> (This is on top of the previous patch with is_global_var.)
>>
>> You could also use VAR_OR_FUNCTION_DECL, e.g. in the part below.
>
> Sure, I thought I had dealt with VAR_OR_FUNCTION_DECL_P in
> <https://gcc.gnu.org/ml/gcc-patches/2015-05/msg01797.html>, but
> I must have missed this. Thanks,
Consider that follow-up approved as well.
jeff
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: C PATCH to use VAR_P
2015-06-24 12:45 Uros Bizjak
@ 2015-06-24 12:58 ` Marek Polacek
2015-06-24 16:56 ` Jeff Law
0 siblings, 1 reply; 7+ messages in thread
From: Marek Polacek @ 2015-06-24 12:58 UTC (permalink / raw)
To: Uros Bizjak; +Cc: gcc-patches
On Wed, Jun 24, 2015 at 02:37:30PM +0200, Uros Bizjak wrote:
> Hello!
>
> > Similarly to what Gaby did in 2013 for C++
> > (<https://gcc.gnu.org/ml/gcc-patches/2013-03/msg01271.html>), this patch
> > makes the c/ and c-family/ code use VAR_P rather than
> >
> > TREE_CODE (t) == VAR_DECL
> >
> > (This is on top of the previous patch with is_global_var.)
>
> You could also use VAR_OR_FUNCTION_DECL, e.g. in the part below.
Sure, I thought I had dealt with VAR_OR_FUNCTION_DECL_P in
<https://gcc.gnu.org/ml/gcc-patches/2015-05/msg01797.html>, but
I must have missed this. Thanks,
Marek
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: C PATCH to use VAR_P
@ 2015-06-24 12:45 Uros Bizjak
2015-06-24 12:58 ` Marek Polacek
0 siblings, 1 reply; 7+ messages in thread
From: Uros Bizjak @ 2015-06-24 12:45 UTC (permalink / raw)
To: gcc-patches; +Cc: Marek Polacek
Hello!
> Similarly to what Gaby did in 2013 for C++
> (<https://gcc.gnu.org/ml/gcc-patches/2013-03/msg01271.html>), this patch
> makes the c/ and c-family/ code use VAR_P rather than
>
> TREE_CODE (t) == VAR_DECL
>
> (This is on top of the previous patch with is_global_var.)
You could also use VAR_OR_FUNCTION_DECL, e.g. in the part below.
Uros.
@@ -7378,14 +7378,13 @@ handle_unused_attribute (tree *node, tree
name, tree ARG_UNUSED (args),
tree decl = *node;
if (TREE_CODE (decl) == PARM_DECL
- || TREE_CODE (decl) == VAR_DECL
+ || VAR_P (decl)
|| TREE_CODE (decl) == FUNCTION_DECL
|| TREE_CODE (decl) == LABEL_DECL
|| TREE_CODE (decl) == TYPE_DECL)
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-06-26 21:19 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-24 12:28 C PATCH to use VAR_P Marek Polacek
2015-06-24 16:55 ` Jeff Law
2015-06-24 12:45 Uros Bizjak
2015-06-24 12:58 ` Marek Polacek
2015-06-24 16:56 ` Jeff Law
2015-06-26 10:10 C++ " Marek Polacek
2015-06-26 21:19 ` Jason Merrill
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).