aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/gimple-fold.c1
-rw-r--r--gcc/lto/ChangeLog6
-rw-r--r--gcc/lto/lto-lang.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr92231.c9
-rw-r--r--gcc/tree.c3
-rw-r--r--gcc/tree.h6
8 files changed, 40 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bc1df77..8265f4c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,15 @@
+2019-10-31 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/92231
+ * tree.h (fndecl_built_in_p): Use fndecl_built_in_p instead of
+ DECL_BUILT_IN in comment. Remove redundant ()s around return
+ argument.
+ * tree.c (free_lang_data_in_decl): Check if var is FUNCTION_DECL
+ before calling fndecl_built_in_p.
+ * gimple-fold.c (gimple_fold_stmt_to_constant_1): Check if
+ TREE_OPERAND (fn, 0) is a FUNCTION_DECL before calling
+ fndecl_built_in_p on it.
+
2019-10-31 Andre Vieira <andre.simoesdiasvieira@arm.com>
* params.def (PARAM_VECT_EPILOGUES_NOMASK): Enable by default.
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 1b7e7ed..dc3d228 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -6439,6 +6439,7 @@ gimple_fold_stmt_to_constant_1 (gimple *stmt, tree (*valueize) (tree),
fn = (*valueize) (gimple_call_fn (stmt));
if (TREE_CODE (fn) == ADDR_EXPR
+ && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
&& fndecl_built_in_p (TREE_OPERAND (fn, 0))
&& gimple_builtin_call_types_compatible_p (stmt,
TREE_OPERAND (fn, 0)))
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index a20e2d4..d5c1373 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,3 +1,9 @@
+2019-10-31 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/92231
+ * lto-lang.c (handle_const_attribute): Don't call fndecl_built_in_p
+ on *node that is not FUNCTION_DECL.
+
2019-10-30 Martin Liska <mliska@suse.cz>
PR lto/91393
diff --git a/gcc/lto/lto-lang.c b/gcc/lto/lto-lang.c
index 0d781da..3e37c37 100644
--- a/gcc/lto/lto-lang.c
+++ b/gcc/lto/lto-lang.c
@@ -305,7 +305,8 @@ handle_const_attribute (tree *node, tree ARG_UNUSED (name),
tree ARG_UNUSED (args), int ARG_UNUSED (flags),
bool * ARG_UNUSED (no_add_attrs))
{
- if (!fndecl_built_in_p (*node))
+ if (TREE_CODE (*node) != FUNCTION_DECL
+ || !fndecl_built_in_p (*node))
inform (UNKNOWN_LOCATION, "%s:%s: %E: %E", __FILE__, __func__, *node, name);
tree type = TREE_TYPE (*node);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7f8acf8..9257681 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-10-31 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/92231
+ * gcc.c-torture/compile/pr92231.c: New test.
+
2019-10-31 Andre Vieira <andre.simoesdiasvieira@arm.com>
* gcc.dg/vect/vect-epilogues.c: New test.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr92231.c b/gcc/testsuite/gcc.c-torture/compile/pr92231.c
new file mode 100644
index 0000000..1813add
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr92231.c
@@ -0,0 +1,9 @@
+/* PR middle-end/92231 */
+
+extern int bar (void);
+
+int
+foo (void)
+{
+ return (&bar + 4096) ();
+}
diff --git a/gcc/tree.c b/gcc/tree.c
index 3866804..741f7a2 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -5805,7 +5805,8 @@ free_lang_data_in_decl (tree decl, class free_lang_data_d *fld)
while (*nextp)
{
tree var = *nextp;
- if (fndecl_built_in_p (var))
+ if (TREE_CODE (var) == FUNCTION_DECL
+ && fndecl_built_in_p (var))
*nextp = TREE_CHAIN (var);
else
nextp = &TREE_CHAIN (var);
diff --git a/gcc/tree.h b/gcc/tree.h
index 18d6c0e..8135154 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -6119,12 +6119,12 @@ type_has_mode_precision_p (const_tree t)
Note that it is different from the DECL_IS_BUILTIN accessor. For
instance, user declared prototypes of C library functions are not
- DECL_IS_BUILTIN but may be DECL_BUILT_IN. */
+ DECL_IS_BUILTIN but may be fndecl_built_in_p. */
inline bool
fndecl_built_in_p (const_tree node)
{
- return (DECL_BUILT_IN_CLASS (node) != NOT_BUILT_IN);
+ return DECL_BUILT_IN_CLASS (node) != NOT_BUILT_IN;
}
/* Return true if a FUNCTION_DECL NODE is a GCC built-in function
@@ -6133,7 +6133,7 @@ fndecl_built_in_p (const_tree node)
inline bool
fndecl_built_in_p (const_tree node, built_in_class klass)
{
- return (fndecl_built_in_p (node) && DECL_BUILT_IN_CLASS (node) == klass);
+ return fndecl_built_in_p (node) && DECL_BUILT_IN_CLASS (node) == klass;
}
/* Return true if a FUNCTION_DECL NODE is a GCC built-in function