Remove backported tests: - g++.dg/pr93195a.C - gcc.dg/tree-ssa/pr84859.c Fix assembly match on i586: - gcc.target/i386/pr93492-3.c - gcc.target/i386/pr93492-5.c OBS-URL: https://build.opensuse.org/request/show/927326 OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gcc7?expand=0&rev=219
154 lines
5.5 KiB
Diff
154 lines
5.5 KiB
Diff
From dd42709efc288ce501b52d95b8ef0d05713a07f6 Mon Sep 17 00:00:00 2001
|
|
From: Jakub Jelinek <jakub@redhat.com>
|
|
Date: Fri, 12 Apr 2019 09:28:35 +0200
|
|
Subject: [PATCH 12/22] Backport PR c/89946 (ICE in assemble_start_function, at
|
|
varasm.c:1871)
|
|
|
|
gcc/ChangeLog
|
|
2021-10-07 Giuliano Belinassi <gbelinassi@suse.de>
|
|
|
|
Backport from mainline
|
|
2019-04-12 Jakub Jelinek <jakub@redhat.com>
|
|
|
|
PR c/89946
|
|
* varasm.c (assemble_start_function): Don't use tree_fits_uhwi_p
|
|
and gcc_unreachable if it fails, just call tree_to_uhwi which
|
|
verifies that too. Test TREE_CHAIN instead of list_length > 1.
|
|
Start warning message with a lower-case letter. Formatting fixes.
|
|
|
|
PR rtl-optimization/90026
|
|
* cfgcleanup.c (try_optimize_cfg): When removing empty bb with no
|
|
successors, look for BARRIERs inside of the whole BB_FOOTER chain
|
|
rather than just at the start of it. If e->src BB_FOOTER is not NULL
|
|
in cfglayout mode, use emit_barrier_after_bb.
|
|
|
|
gcc/c-family/ChangeLog
|
|
2021-10-07 Giuliano Belinassi <gbelinassi@suse.de>
|
|
|
|
Backport of mainline
|
|
2019-04-12 Jakub Jelinek <jakub@redhat.com>
|
|
|
|
PR c/89946
|
|
* c-attribs.c (handle_patchable_function_entry_attribute): Add
|
|
function comment. Warn if arguments of the attribute are not positive
|
|
integer constants.
|
|
|
|
gcc/testsuite/ChangeLog
|
|
2021-10-07 Giuliano Belinassi <gbelinassi@suse.de>
|
|
|
|
Backport from mainline
|
|
2019-04-12 Jakub Jelinek <jakub@redhat.com>
|
|
|
|
PR c/89946
|
|
* c-c++-common/pr89946.c: New test.
|
|
|
|
PR rtl-optimization/90026
|
|
* g++.dg/opt/pr90026.C: New test.
|
|
---
|
|
gcc/c-family/c-attribs.c | 23 +++++++++++++++++++++--
|
|
gcc/testsuite/c-c++-common/pr89946.c | 7 +++++++
|
|
gcc/varasm.c | 23 ++++++++---------------
|
|
3 files changed, 36 insertions(+), 17 deletions(-)
|
|
create mode 100644 gcc/testsuite/c-c++-common/pr89946.c
|
|
|
|
diff --git a/gcc/c-family/c-attribs.c b/gcc/c-family/c-attribs.c
|
|
index b2820dd1586..f0d2b1ed500 100644
|
|
--- a/gcc/c-family/c-attribs.c
|
|
+++ b/gcc/c-family/c-attribs.c
|
|
@@ -3184,9 +3184,28 @@ handle_fallthrough_attribute (tree *, tree name, tree, int,
|
|
return NULL_TREE;
|
|
}
|
|
|
|
+/* Handle a "patchable_function_entry" attributes; arguments as in
|
|
+ struct attribute_spec.handler. */
|
|
+
|
|
static tree
|
|
-handle_patchable_function_entry_attribute (tree *, tree, tree, int, bool *)
|
|
+handle_patchable_function_entry_attribute (tree *, tree name, tree args,
|
|
+ int, bool *no_add_attrs)
|
|
{
|
|
- /* Nothing to be done here. */
|
|
+ for (; args; args = TREE_CHAIN (args))
|
|
+ {
|
|
+ tree val = TREE_VALUE (args);
|
|
+ if (val && TREE_CODE (val) != IDENTIFIER_NODE
|
|
+ && TREE_CODE (val) != FUNCTION_DECL)
|
|
+ val = default_conversion (val);
|
|
+
|
|
+ if (!tree_fits_uhwi_p (val))
|
|
+ {
|
|
+ warning (OPT_Wattributes,
|
|
+ "%qE attribute argument %qE is not an integer constant",
|
|
+ name, val);
|
|
+ *no_add_attrs = true;
|
|
+ return NULL_TREE;
|
|
+ }
|
|
+ }
|
|
return NULL_TREE;
|
|
}
|
|
diff --git a/gcc/testsuite/c-c++-common/pr89946.c b/gcc/testsuite/c-c++-common/pr89946.c
|
|
new file mode 100644
|
|
index 00000000000..23acd63fc6a
|
|
--- /dev/null
|
|
+++ b/gcc/testsuite/c-c++-common/pr89946.c
|
|
@@ -0,0 +1,7 @@
|
|
+/* PR c/89946 */
|
|
+
|
|
+__attribute__((patchable_function_entry (-1))) void foo (void) {} /* { dg-warning "'patchable_function_entry' attribute argument '-1' is not an integer constant" } */
|
|
+__attribute__((patchable_function_entry (5, -5))) void bar (void) {} /* { dg-warning "'patchable_function_entry' attribute argument '-5' is not an integer constant" } */
|
|
+int i, j;
|
|
+__attribute__((patchable_function_entry (i))) void baz (void) {} /* { dg-warning "'patchable_function_entry' attribute argument 'i' is not an integer constant" } */
|
|
+__attribute__((patchable_function_entry (2, j))) void qux (void) {} /* { dg-warning "'patchable_function_entry' attribute argument 'j' is not an integer constant" } */
|
|
diff --git a/gcc/varasm.c b/gcc/varasm.c
|
|
index 5711ba69555..0e6f20db361 100644
|
|
--- a/gcc/varasm.c
|
|
+++ b/gcc/varasm.c
|
|
@@ -1839,28 +1839,20 @@ assemble_start_function (tree decl, const char *fnname)
|
|
tree pp_val = TREE_VALUE (patchable_function_entry_attr);
|
|
tree patchable_function_entry_value1 = TREE_VALUE (pp_val);
|
|
|
|
- if (tree_fits_uhwi_p (patchable_function_entry_value1))
|
|
- patch_area_size = tree_to_uhwi (patchable_function_entry_value1);
|
|
- else
|
|
- gcc_unreachable ();
|
|
-
|
|
+ patch_area_size = tree_to_uhwi (patchable_function_entry_value1);
|
|
patch_area_entry = 0;
|
|
- if (list_length (pp_val) > 1)
|
|
+ if (TREE_CHAIN (pp_val) != NULL_TREE)
|
|
{
|
|
- tree patchable_function_entry_value2 =
|
|
- TREE_VALUE (TREE_CHAIN (pp_val));
|
|
-
|
|
- if (tree_fits_uhwi_p (patchable_function_entry_value2))
|
|
- patch_area_entry = tree_to_uhwi (patchable_function_entry_value2);
|
|
- else
|
|
- gcc_unreachable ();
|
|
+ tree patchable_function_entry_value2
|
|
+ = TREE_VALUE (TREE_CHAIN (pp_val));
|
|
+ patch_area_entry = tree_to_uhwi (patchable_function_entry_value2);
|
|
}
|
|
}
|
|
|
|
if (patch_area_entry > patch_area_size)
|
|
{
|
|
if (patch_area_size > 0)
|
|
- warning (OPT_Wattributes, "Patchable function entry > size");
|
|
+ warning (OPT_Wattributes, "patchable function entry > size");
|
|
patch_area_entry = 0;
|
|
}
|
|
|
|
@@ -1880,7 +1872,8 @@ assemble_start_function (tree decl, const char *fnname)
|
|
/* And the area after the label. Record it if we haven't done so yet. */
|
|
if (patch_area_size > patch_area_entry)
|
|
targetm.asm_out.print_patchable_function_entry (asm_out_file,
|
|
- patch_area_size-patch_area_entry,
|
|
+ patch_area_size
|
|
+ - patch_area_entry,
|
|
patch_area_entry == 0);
|
|
|
|
if (lookup_attribute ("no_split_stack", DECL_ATTRIBUTES (decl)))
|
|
--
|
|
2.33.1
|
|
|