aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2016-04-14 12:23:06 -0400
committerJason Merrill <jason@gcc.gnu.org>2016-04-14 12:23:06 -0400
commit9f285ccb77a109ba94788f71ac83d4d46299ea9f (patch)
tree0d922603fa3db1c9a198d7caeec6b41056443321 /gcc
parent52fbb073e9310d2e1f83a4124a24ec83db1b6fd1 (diff)
downloadgcc-9f285ccb77a109ba94788f71ac83d4d46299ea9f.zip
gcc-9f285ccb77a109ba94788f71ac83d4d46299ea9f.tar.gz
gcc-9f285ccb77a109ba94788f71ac83d4d46299ea9f.tar.bz2
Revert empty class parameter passing ABI changes.
From-SVN: r234977
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/cfgexpand.c10
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/call.c107
-rw-r--r--gcc/cp/cp-tree.h6
-rw-r--r--gcc/cp/decl.c24
-rw-r--r--gcc/cp/error.c22
-rw-r--r--gcc/expr.c7
-rw-r--r--gcc/testsuite/g++.dg/abi/empty12.C17
-rw-r--r--gcc/testsuite/g++.dg/abi/empty12.h9
-rw-r--r--gcc/testsuite/g++.dg/abi/empty12a.c6
-rw-r--r--gcc/testsuite/g++.dg/abi/empty13.C17
-rw-r--r--gcc/testsuite/g++.dg/abi/empty13.h9
-rw-r--r--gcc/testsuite/g++.dg/abi/empty13a.c6
-rw-r--r--gcc/testsuite/g++.dg/abi/empty14.C17
-rw-r--r--gcc/testsuite/g++.dg/abi/empty14.h10
-rw-r--r--gcc/testsuite/g++.dg/abi/empty14a.c6
-rw-r--r--gcc/testsuite/g++.dg/abi/empty15.C17
-rw-r--r--gcc/testsuite/g++.dg/abi/empty15.h30
-rw-r--r--gcc/testsuite/g++.dg/abi/empty15a.c6
-rw-r--r--gcc/testsuite/g++.dg/abi/empty16.C17
-rw-r--r--gcc/testsuite/g++.dg/abi/empty16.h16
-rw-r--r--gcc/testsuite/g++.dg/abi/empty16a.c6
-rw-r--r--gcc/testsuite/g++.dg/abi/empty17.C17
-rw-r--r--gcc/testsuite/g++.dg/abi/empty17.h27
-rw-r--r--gcc/testsuite/g++.dg/abi/empty17a.c6
-rw-r--r--gcc/testsuite/g++.dg/abi/empty18.C17
-rw-r--r--gcc/testsuite/g++.dg/abi/empty18.h9
-rw-r--r--gcc/testsuite/g++.dg/abi/empty18a.c6
-rw-r--r--gcc/testsuite/g++.dg/abi/empty19.C17
-rw-r--r--gcc/testsuite/g++.dg/abi/empty19.h10
-rw-r--r--gcc/testsuite/g++.dg/abi/empty19a.c6
-rw-r--r--gcc/testsuite/g++.dg/abi/empty20.C25
-rw-r--r--gcc/testsuite/g++.dg/abi/empty21.C21
-rw-r--r--gcc/testsuite/g++.dg/abi/pr60336-1.C17
-rw-r--r--gcc/testsuite/g++.dg/abi/pr60336-10.C50
-rw-r--r--gcc/testsuite/g++.dg/abi/pr60336-11.C56
-rw-r--r--gcc/testsuite/g++.dg/abi/pr60336-12.C57
-rw-r--r--gcc/testsuite/g++.dg/abi/pr60336-2.C48
-rw-r--r--gcc/testsuite/g++.dg/abi/pr60336-3.C15
-rw-r--r--gcc/testsuite/g++.dg/abi/pr60336-4.C48
-rw-r--r--gcc/testsuite/g++.dg/abi/pr60336-5.C17
-rw-r--r--gcc/testsuite/g++.dg/abi/pr60336-6.C17
-rw-r--r--gcc/testsuite/g++.dg/abi/pr60336-7.C17
-rw-r--r--gcc/testsuite/g++.dg/abi/pr60336-8.C15
-rw-r--r--gcc/testsuite/g++.dg/abi/pr60336-9.C28
-rw-r--r--gcc/testsuite/g++.dg/abi/pr68355.C24
47 files changed, 15 insertions, 929 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ca2a9a7..e56d15b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2016-04-14 Jason Merrill <jason@redhat.com>
+
+ * cfgexpand.c, expr.c: Revert previous change.
+
2016-04-14 Cesar Philippidis <cesar@codesourcery.com>
PR middle-end/70643
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 4a5cf16..1341c14 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -73,7 +73,6 @@ along with GCC; see the file COPYING3. If not see
#include "builtins.h"
#include "tree-chkp.h"
#include "rtl-chkp.h"
-#include "langhooks.h"
/* Some systems use __main in a way incompatible with its use in gcc, in these
cases use the macros NAME__MAIN to give a quoted symbol and SYMBOL__MAIN to
@@ -6222,15 +6221,6 @@ pass_expand::execute (function *fun)
(int) PARAM_VALUE (PARAM_SSP_BUFFER_SIZE));
}
- if (warn_abi)
- if (tree attr = lookup_attribute ("abi warning",
- DECL_ATTRIBUTES (current_function_decl)))
- warning_at (DECL_SOURCE_LOCATION (current_function_decl),
- OPT_Wabi, "definition of %qs: %s",
- identifier_to_locale (lang_hooks.decl_printable_name
- (current_function_decl, 1)),
- TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))));
-
/* Set up parameters and prepare for return, for the function. */
expand_function_start (current_function_decl);
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 866b4f2..4267f65 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2016-04-14 Jason Merrill <jason@redhat.com>
+
+ * call.c, decl.c, error.c, cp-tree.h, decl.c: Revert empty
+ parameter ABI change.
+
2016-04-13 Martin Sebor <msebor@redhat.com>
PR c++/69517
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 687e7bd..ed23490 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -214,8 +214,6 @@ static void add_candidates (tree, tree, const vec<tree, va_gc> *, tree, tree,
tsubst_flags_t);
static conversion *merge_conversion_sequences (conversion *, conversion *);
static tree build_temp (tree, tree, int, diagnostic_t *, tsubst_flags_t);
-static bool pass_as_empty_struct (tree type);
-static tree empty_class_arg (tree);
/* Returns nonzero iff the destructor name specified in NAME matches BASETYPE.
NAME can take many forms... */
@@ -381,31 +379,16 @@ build_call_a (tree function, int n, tree *argarray)
/* Don't pass empty class objects by value. This is useful
for tags in STL, which are used to control overload resolution.
We don't need to handle other cases of copying empty classes. */
- bool warned = false;
- if (decl && !TREE_PUBLIC (decl))
- /* Don't warn about the ABI of a function local to this TU. */
- warned = true;
- tree empty_arg = NULL_TREE;
if (! decl || ! DECL_BUILT_IN (decl))
for (i = 0; i < n; i++)
{
tree arg = CALL_EXPR_ARG (function, i);
- tree type = TREE_TYPE (arg);
- if (is_really_empty_class (type)
- && ! TREE_ADDRESSABLE (type))
+ if (is_empty_class (TREE_TYPE (arg))
+ && ! TREE_ADDRESSABLE (TREE_TYPE (arg)))
{
- empty_arg = arg;
- CALL_EXPR_ARG (function, i) = empty_class_arg (arg);
- }
- /* Warn about ABI changes for a non-final argument. */
- else if (!warned && empty_arg)
- {
- location_t loc = EXPR_LOC_OR_LOC (empty_arg, input_location);
- if (decl && !varargs_function_p (decl))
- mark_for_abi_warning (decl, empty_arg);
- else
- warn_empty_class_abi (empty_arg, loc);
- warned = true;
+ tree t = build0 (EMPTY_CLASS_EXPR, TREE_TYPE (arg));
+ arg = build2 (COMPOUND_EXPR, TREE_TYPE (t), arg, t);
+ CALL_EXPR_ARG (function, i) = arg;
}
}
@@ -6889,15 +6872,6 @@ build_x_va_arg (source_location loc, tree expr, tree type)
expr = build_va_arg (loc, expr, ref);
return convert_from_reference (expr);
}
- else if (is_really_empty_class (type) && !TREE_ADDRESSABLE (type))
- {
- /* Do the reverse of empty_class_arg. */
- tree etype = pass_as_empty_struct (type) ? empty_struct_type : type;
- expr = build_va_arg (loc, expr, etype);
- warn_empty_class_abi (type, loc);
- tree ec = build0 (EMPTY_CLASS_EXPR, type);
- return build2 (COMPOUND_EXPR, type, expr, ec);
- }
return build_va_arg (loc, expr, type);
}
@@ -6994,75 +6968,6 @@ convert_default_arg (tree type, tree arg, tree fn, int parmnum,
return arg;
}
-/* Return true iff TYPE should be passed and returned as a size 0 type rather
- than its normal size, for compatibility with C. */
-
-static bool
-pass_as_empty_struct (tree type)
-{
- return (abi_version_at_least (10)
- && type != error_mark_node
- && COMPLETE_TYPE_P (type)
- && !TREE_ADDRESSABLE (type)
- && is_really_empty_class (type));
-}
-
-/* Adjust the value VAL of empty class type TYPE for argument passing.
- Keep this synced with build_x_va_arg. */
-
-static tree
-empty_class_arg (tree val)
-{
- /* Don't pass empty class objects by value. This is useful
- for tags in STL, which are used to control overload resolution.
- We don't need to handle other cases of copying empty classes. */
- tree type = TREE_TYPE (val);
- tree etype = pass_as_empty_struct (type) ? empty_struct_type : type;
- tree empty = build0 (EMPTY_CLASS_EXPR, etype);
- return build2 (COMPOUND_EXPR, etype, val, empty);
-}
-
-/* Generate a message warning about the change in empty class parameter passing
- ABI. */
-
-static tree
-empty_class_msg (tree type)
-{
- if (!TYPE_P (type))
- type = TREE_TYPE (type);
-
- return pp_format_to_string ("empty class %qT parameter passing ABI "
- "changes in -fabi-version=10 (GCC 6)", type);
-}
-
-/* Warn immediately about the change in empty class parameter ABI. */
-
-void
-warn_empty_class_abi (tree arg, location_t loc)
-{
- if (!warn_abi || !abi_version_crosses (10))
- return;
-
- warning_at (loc, OPT_Wabi, "%E", empty_class_msg (arg));
-}
-
-/* Tack a warning about the change in empty class parameter ABI onto FN, so
- that we get a warning if a definition or call is emitted. */
-
-void
-mark_for_abi_warning (tree fn, tree type)
-{
- if (!warn_abi || !abi_version_crosses (10))
- return;
- if (lookup_attribute ("abi warning", DECL_ATTRIBUTES (fn)))
- return;
-
- tree msg = empty_class_msg (type);
- msg = build_tree_list (NULL_TREE, msg);
- DECL_ATTRIBUTES (fn) = tree_cons (get_identifier ("abi warning"), msg,
- DECL_ATTRIBUTES (fn));
-}
-
/* Returns the type which will really be used for passing an argument of
type TYPE. */
@@ -7081,8 +6986,6 @@ type_passed_as (tree type)
&& COMPLETE_TYPE_P (type)
&& tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node)))
type = integer_type_node;
- else if (pass_as_empty_struct (type))
- type = empty_struct_type;
return type;
}
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 87e3ea0..baff674 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -1150,8 +1150,6 @@ enum cp_tree_index
CPTI_NULLPTR,
CPTI_NULLPTR_TYPE,
- CPTI_EMPTY_STRUCT,
-
CPTI_MAX
};
@@ -1187,7 +1185,6 @@ extern GTY(()) tree cp_global_trees[CPTI_MAX];
#define current_aggr cp_global_trees[CPTI_AGGR_TAG]
#define nullptr_node cp_global_trees[CPTI_NULLPTR]
#define nullptr_type_node cp_global_trees[CPTI_NULLPTR_TYPE]
-#define empty_struct_type cp_global_trees[CPTI_EMPTY_STRUCT]
/* We cache these tree nodes so as to call get_identifier less
frequently. */
@@ -5540,8 +5537,6 @@ extern tree build_addr_func (tree, tsubst_flags_t);
extern void set_flags_from_callee (tree);
extern tree build_call_a (tree, int, tree*);
extern tree build_call_n (tree, int, ...);
-extern void mark_for_abi_warning (tree, tree);
-extern void warn_empty_class_abi (tree, location_t);
extern bool null_ptr_cst_p (tree);
extern bool null_member_pointer_value_p (tree);
extern bool sufficient_parms_p (const_tree);
@@ -5896,7 +5891,6 @@ extern bool pedwarn_cxx98 (location_t, int, const char *,
extern location_t location_of (tree);
extern void qualified_name_lookup_error (tree, tree, tree,
location_t);
-extern tree pp_format_to_string (const char *, ...);
/* in except.c */
extern void init_exception_processing (void);
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 42e853f..65b5733 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -4180,10 +4180,6 @@ cxx_init_decl_processing (void)
nullptr_node = build_int_cst (nullptr_type_node, 0);
}
- empty_struct_type = make_node (RECORD_TYPE);
- finish_builtin_struct (empty_struct_type, "__empty_struct",
- NULL_TREE, NULL_TREE);
-
abort_fndecl
= build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
ECF_NORETURN | ECF_NOTHROW);
@@ -14375,34 +14371,16 @@ store_parm_decls (tree current_function_parms)
they end in the correct forward order. */
specparms = nreverse (specparms);
- /* Don't warn about the ABI of a function local to this TU. */
- bool warned = !TREE_PUBLIC (current_function_decl);
- bool saw_nonempty = false;
for (parm = specparms; parm; parm = next)
{
next = DECL_CHAIN (parm);
if (TREE_CODE (parm) == PARM_DECL)
{
- tree type = TREE_TYPE (parm);
if (DECL_NAME (parm) == NULL_TREE
- || !VOID_TYPE_P (type))
+ || !VOID_TYPE_P (parm))
pushdecl (parm);
else
error ("parameter %qD declared void", parm);
- /* If this isn't the last parameter, maybe warn about ABI change
- in passing empty classes. */
- if (processing_template_decl)
- continue;
- if (TREE_ADDRESSABLE (type)
- || !is_really_empty_class (type))
- saw_nonempty = true;
- else if (!warned
- && (saw_nonempty
- || varargs_function_p (current_function_decl)))
- {
- mark_for_abi_warning (current_function_decl, type);
- warned = true;
- }
}
else
{
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index 5aaa177..aa5fd41 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -3718,25 +3718,3 @@ qualified_name_lookup_error (tree scope, tree name,
suggest_alternatives_for (location, name);
}
}
-
-/* Like error et al, but return the formatted message as a STRING_CST. */
-
-tree
-pp_format_to_string (const char *msg, ...)
-{
- pretty_printer *pp = global_dc->printer;
- text_info text;
- va_list ap;
-
- va_start (ap, msg);
- text.err_no = errno;
- text.args_ptr = &ap;
- text.format_spec = msg;
- pp_format (pp, &text);
- pp_output_formatted_text (pp);
- va_end (ap);
- const char *fmt = pp_formatted_text (pp);
- tree str = build_string (strlen (fmt) + 1, fmt);
- pp_clear_output_area (pp);
- return str;
-}
diff --git a/gcc/expr.c b/gcc/expr.c
index 5f1118c..29d22b0 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -10579,13 +10579,6 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
0, "%Kcall to %qs declared with attribute warning: %s",
exp, identifier_to_locale (lang_hooks.decl_printable_name (fndecl, 1)),
TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))));
- if (warn_abi && fndecl
- && (attr = lookup_attribute ("abi warning",
- DECL_ATTRIBUTES (fndecl))) != NULL)
- warning_at (tree_nonartificial_location (exp),
- OPT_Wabi, "%Kcall to %qs: %s",
- exp, identifier_to_locale (lang_hooks.decl_printable_name (fndecl, 1)),
- TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))));
/* Check for a built-in function. */
if (fndecl && DECL_BUILT_IN (fndecl))
diff --git a/gcc/testsuite/g++.dg/abi/empty12.C b/gcc/testsuite/g++.dg/abi/empty12.C
deleted file mode 100644
index ce1f6f2..0000000
--- a/gcc/testsuite/g++.dg/abi/empty12.C
+++ /dev/null
@@ -1,17 +0,0 @@
-// PR c++/60336
-// { dg-do run }
-// { dg-options "-Wabi=9 -x c" }
-// { dg-additional-sources "empty12a.c" }
-// { dg-prune-output "command line option" }
-
-#include "empty12.h"
-extern "C" void fun(struct dummy, struct foo);
-
-int main()
-{
- struct dummy d;
- struct foo f = { -1, -2, -3, -4, -5 };
-
- fun(d, f); // { dg-warning "empty" }
- return 0;
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty12.h b/gcc/testsuite/g++.dg/abi/empty12.h
deleted file mode 100644
index c61afcd..0000000
--- a/gcc/testsuite/g++.dg/abi/empty12.h
+++ /dev/null
@@ -1,9 +0,0 @@
-struct dummy { };
-struct foo
-{
- int i1;
- int i2;
- int i3;
- int i4;
- int i5;
-};
diff --git a/gcc/testsuite/g++.dg/abi/empty12a.c b/gcc/testsuite/g++.dg/abi/empty12a.c
deleted file mode 100644
index 34a25ba..0000000
--- a/gcc/testsuite/g++.dg/abi/empty12a.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "empty12.h"
-void fun(struct dummy d, struct foo f)
-{
- if (f.i1 != -1)
- __builtin_abort();
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty13.C b/gcc/testsuite/g++.dg/abi/empty13.C
deleted file mode 100644
index d1e0946..0000000
--- a/gcc/testsuite/g++.dg/abi/empty13.C
+++ /dev/null
@@ -1,17 +0,0 @@
-// PR c++/60336
-// { dg-do run }
-// { dg-options "-x c -fabi-version=9" }
-// { dg-additional-sources "empty13a.c" }
-// { dg-prune-output "command line option" }
-
-#include "empty13.h"
-extern "C" void fun(struct dummy, struct foo);
-
-int main()
-{
- struct dummy d;
- struct foo f = { -1, -2, -3, -4, -5 };
-
- fun(d, f);
- return 0;
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty13.h b/gcc/testsuite/g++.dg/abi/empty13.h
deleted file mode 100644
index c61afcd..0000000
--- a/gcc/testsuite/g++.dg/abi/empty13.h
+++ /dev/null
@@ -1,9 +0,0 @@
-struct dummy { };
-struct foo
-{
- int i1;
- int i2;
- int i3;
- int i4;
- int i5;
-};
diff --git a/gcc/testsuite/g++.dg/abi/empty13a.c b/gcc/testsuite/g++.dg/abi/empty13a.c
deleted file mode 100644
index b4303a6..0000000
--- a/gcc/testsuite/g++.dg/abi/empty13a.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "empty13.h"
-void fun(struct dummy d, struct foo f)
-{
- if (f.i1 == -1)
- __builtin_abort();
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty14.C b/gcc/testsuite/g++.dg/abi/empty14.C
deleted file mode 100644
index 1b9c397..0000000
--- a/gcc/testsuite/g++.dg/abi/empty14.C
+++ /dev/null
@@ -1,17 +0,0 @@
-// PR c++/60336
-// { dg-do run }
-// { dg-options "-Wabi=9 -x c" }
-// { dg-additional-sources "empty14a.c" }
-// { dg-prune-output "command line option" }
-
-#include "empty14.h"
-extern "C" void fun(struct dummy, struct foo);
-
-int main()
-{
- struct dummy d;
- struct foo f = { -1, -2, -3, -4, -5 };
-
- fun(d, f); // { dg-warning "empty" }
- return 0;
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty14.h b/gcc/testsuite/g++.dg/abi/empty14.h
deleted file mode 100644
index 5842279..0000000
--- a/gcc/testsuite/g++.dg/abi/empty14.h
+++ /dev/null
@@ -1,10 +0,0 @@
-struct dummy0 { };
-struct dummy { struct dummy0 d[140]; };
-struct foo
-{
- int i1;
- int i2;
- int i3;
- int i4;
- int i5;
-};
diff --git a/gcc/testsuite/g++.dg/abi/empty14a.c b/gcc/testsuite/g++.dg/abi/empty14a.c
deleted file mode 100644
index 8b3d780..0000000
--- a/gcc/testsuite/g++.dg/abi/empty14a.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "empty14.h"
-void fun(struct dummy d, struct foo f)
-{
- if (f.i1 != -1)
- __builtin_abort();
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty15.C b/gcc/testsuite/g++.dg/abi/empty15.C
deleted file mode 100644
index ac0a868..0000000
--- a/gcc/testsuite/g++.dg/abi/empty15.C
+++ /dev/null
@@ -1,17 +0,0 @@
-// PR c++/60336
-// { dg-do run }
-// { dg-options "-Wabi=9 -x c" }
-// { dg-additional-sources "empty15a.c" }
-// { dg-prune-output "command line option" }
-
-#include "empty15.h"
-extern "C" void fun(struct dummy, struct foo);
-
-int main()
-{
- struct dummy d;
- struct foo f = { -1, -2, -3, -4, -5 };
-
- fun(d, f); // { dg-warning "empty" }
- return 0;
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty15.h b/gcc/testsuite/g++.dg/abi/empty15.h
deleted file mode 100644
index 1c6f26f..0000000
--- a/gcc/testsuite/g++.dg/abi/empty15.h
+++ /dev/null
@@ -1,30 +0,0 @@
-struct A1 {};
-struct A2 {};
-struct B1 { struct A1 a; struct A2 b; };
-struct B2 { struct A1 a; struct A2 b; };
-struct C1 { struct B1 a; struct B2 b; };
-struct C2 { struct B1 a; struct B2 b; };
-struct D1 { struct C1 a; struct C2 b; };
-struct D2 { struct C1 a; struct C2 b; };
-struct E1 { struct D1 a; struct D2 b; };
-struct E2 { struct D1 a; struct D2 b; };
-struct F1 { struct E1 a; struct E2 b; };
-struct F2 { struct E1 a; struct E2 b; };
-struct G1 { struct F1 a; struct F2 b; };
-struct G2 { struct F1 a; struct F2 b; };
-struct H1 { struct G1 a; struct G2 b; };
-struct H2 { struct G1 a; struct G2 b; };
-struct I1 { struct H1 a; struct H2 b; };
-struct I2 { struct H1 a; struct H2 b; };
-struct J1 { struct I1 a; struct I2 b; };
-struct J2 { struct I1 a; struct I2 b; };
-struct dummy { struct J1 a; struct J2 b; };
-
-struct foo
-{
- int i1;
- int i2;
- int i3;
- int i4;
- int i5;
-};
diff --git a/gcc/testsuite/g++.dg/abi/empty15a.c b/gcc/testsuite/g++.dg/abi/empty15a.c
deleted file mode 100644
index 325b2c5..0000000
--- a/gcc/testsuite/g++.dg/abi/empty15a.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "empty15.h"
-void fun(struct dummy d, struct foo f)
-{
- if (f.i1 != -1)
- __builtin_abort();
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty16.C b/gcc/testsuite/g++.dg/abi/empty16.C
deleted file mode 100644
index de2bf5c..0000000
--- a/gcc/testsuite/g++.dg/abi/empty16.C
+++ /dev/null
@@ -1,17 +0,0 @@
-// PR c++/60336
-// { dg-do run }
-// { dg-options "-Wabi=9 -x c" }
-// { dg-additional-sources "empty16a.c" }
-// { dg-prune-output "command line option" }
-
-#include "empty16.h"
-extern "C" void fun(struct dummy, struct foo);
-
-int main()
-{
- struct dummy d;
- struct foo f = { -1, -2, -3, -4, -5 };
-
- fun(d, f); // { dg-warning "empty" }
- return 0;
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty16.h b/gcc/testsuite/g++.dg/abi/empty16.h
deleted file mode 100644
index 7552ae0..0000000
--- a/gcc/testsuite/g++.dg/abi/empty16.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifdef __cplusplus
-struct A1 {};
-struct A2 {};
-struct dummy : A1, A2 {} ;
-#else
-struct dummy {};
-#endif
-
-struct foo
-{
- int i1;
- int i2;
- int i3;
- int i4;
- int i5;
-};
diff --git a/gcc/testsuite/g++.dg/abi/empty16a.c b/gcc/testsuite/g++.dg/abi/empty16a.c
deleted file mode 100644
index 6cb7fbc..0000000
--- a/gcc/testsuite/g++.dg/abi/empty16a.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "empty16.h"
-void fun(struct dummy d, struct foo f)
-{
- if (f.i1 != -1)
- __builtin_abort();
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty17.C b/gcc/testsuite/g++.dg/abi/empty17.C
deleted file mode 100644
index c7a37c0..0000000
--- a/gcc/testsuite/g++.dg/abi/empty17.C
+++ /dev/null
@@ -1,17 +0,0 @@
-// PR c++/60336
-// { dg-do run }
-// { dg-options "-Wabi=9 -x c" }
-// { dg-additional-sources "empty17a.c" }
-// { dg-prune-output "command line option" }
-
-#include "empty17.h"
-extern "C" void fun(struct dummy, struct foo);
-
-int main()
-{
- struct dummy d;
- struct foo f = { -1, -2, -3, -4, -5 };
-
- fun(d, f); // { dg-warning "empty" }
- return 0;
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty17.h b/gcc/testsuite/g++.dg/abi/empty17.h
deleted file mode 100644
index 9cf72ba..0000000
--- a/gcc/testsuite/g++.dg/abi/empty17.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifdef __cplusplus
-struct A1
-{
- void foo (void);
- unsigned int : 15;
-};
-struct A2
-{
- void bar (void);
- unsigned int : 15;
-};
-struct dummy : A1, A2
-{
- unsigned int : 15;
-};
-#else
-struct dummy {};
-#endif
-
-struct foo
-{
- int i1;
- int i2;
- int i3;
- int i4;
- int i5;
-};
diff --git a/gcc/testsuite/g++.dg/abi/empty17a.c b/gcc/testsuite/g++.dg/abi/empty17a.c
deleted file mode 100644
index 24408fd..0000000
--- a/gcc/testsuite/g++.dg/abi/empty17a.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "empty17.h"
-void fun(struct dummy d, struct foo f)
-{
- if (f.i1 != -1)
- __builtin_abort();
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty18.C b/gcc/testsuite/g++.dg/abi/empty18.C
deleted file mode 100644
index 6cad33c..0000000
--- a/gcc/testsuite/g++.dg/abi/empty18.C
+++ /dev/null
@@ -1,17 +0,0 @@
-// PR c++/60336
-// { dg-do run }
-// { dg-options "-Wabi=9 -x c" }
-// { dg-additional-sources "empty18a.c" }
-// { dg-prune-output "command line option" }
-
-#include "empty18.h"
-extern "C" void fun(struct dummy, struct foo);
-
-int main()
-{
- struct dummy d;
- struct foo f = { -1, -2, -3, -4, -5 };
-
- fun(d, f); // { dg-warning "empty" }
- return 0;
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty18.h b/gcc/testsuite/g++.dg/abi/empty18.h
deleted file mode 100644
index 86e7ecd..0000000
--- a/gcc/testsuite/g++.dg/abi/empty18.h
+++ /dev/null
@@ -1,9 +0,0 @@
-struct dummy { int d[0]; };
-struct foo
-{
- int i1;
- int i2;
- int i3;
- int i4;
- int i5;
-};
diff --git a/gcc/testsuite/g++.dg/abi/empty18a.c b/gcc/testsuite/g++.dg/abi/empty18a.c
deleted file mode 100644
index 902860b..0000000
--- a/gcc/testsuite/g++.dg/abi/empty18a.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "empty18.h"
-void fun(struct dummy d, struct foo f)
-{
- if (f.i1 != -1)
- __builtin_abort();
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty19.C b/gcc/testsuite/g++.dg/abi/empty19.C
deleted file mode 100644
index e3e855a..0000000
--- a/gcc/testsuite/g++.dg/abi/empty19.C
+++ /dev/null
@@ -1,17 +0,0 @@
-// PR c++/60336
-// { dg-do run }
-// { dg-options "-Wabi=9 -x c" }
-// { dg-additional-sources "empty19a.c" }
-// { dg-prune-output "command line option" }
-
-#include "empty19.h"
-extern "C" void fun(struct dummy, struct foo);
-
-int main()
-{
- struct dummy d;
- struct foo f = { -1, -2, -3, -4, -5 };
-
- fun(d, f); // { dg-warning "empty" }
- return 0;
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty19.h b/gcc/testsuite/g++.dg/abi/empty19.h
deleted file mode 100644
index 616b87b..0000000
--- a/gcc/testsuite/g++.dg/abi/empty19.h
+++ /dev/null
@@ -1,10 +0,0 @@
-struct dummy0 { };
-struct dummy { struct dummy0 d[0]; };
-struct foo
-{
- int i1;
- int i2;
- int i3;
- int i4;
- int i5;
-};
diff --git a/gcc/testsuite/g++.dg/abi/empty19a.c b/gcc/testsuite/g++.dg/abi/empty19a.c
deleted file mode 100644
index 767b1eb..0000000
--- a/gcc/testsuite/g++.dg/abi/empty19a.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "empty19.h"
-void fun(struct dummy d, struct foo f)
-{
- if (f.i1 != -1)
- __builtin_abort();
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty20.C b/gcc/testsuite/g++.dg/abi/empty20.C
deleted file mode 100644
index be1e826..0000000
--- a/gcc/testsuite/g++.dg/abi/empty20.C
+++ /dev/null
@@ -1,25 +0,0 @@
-// { dg-options "-Wabi=9 -O0" }
-
-struct A { };
-
-void f(A, A) { } // No warning, trailing parms all empty
-void f(A, A, int) { } // { dg-warning "ABI" }
-__attribute__ ((always_inline))
-inline void f(A a, int i) { } // No warning, always inlined
-__attribute__ ((always_inline))
-inline void f2(A a, int i) // But the call within the fn gets a warning
-{ // when it's inlined into main
- f(a,a,i); // { dg-warning "ABI" }
-}
-inline void f3(A a, int i) // This one is never called
-{
- f(a,a,i);
-}
-int main()
-{
- A a;
- f(a,a);
- f(a,a,42); // { dg-warning "ABI" }
- f(a,42);
- f2(a,42);
-}
diff --git a/gcc/testsuite/g++.dg/abi/empty21.C b/gcc/testsuite/g++.dg/abi/empty21.C
deleted file mode 100644
index 7538dd8..0000000
--- a/gcc/testsuite/g++.dg/abi/empty21.C
+++ /dev/null
@@ -1,21 +0,0 @@
-// { dg-options "-Wabi=9" }
-
-#include <stdarg.h>
-
-struct A { };
-
-void f(int i, ...)
-{
- va_list ap;
- va_start (ap, i);
- if (i >= 1)
- va_arg (ap, A); // { dg-warning "ABI" }
- if (i >= 2)
- va_arg (ap, int);
-}
-
-int main()
-{
- f(0);
- f(2, A(), 42); // { dg-warning "ABI" }
-}
diff --git a/gcc/testsuite/g++.dg/abi/pr60336-1.C b/gcc/testsuite/g++.dg/abi/pr60336-1.C
deleted file mode 100644
index af08638..0000000
--- a/gcc/testsuite/g++.dg/abi/pr60336-1.C
+++ /dev/null
@@ -1,17 +0,0 @@
-// { dg-do compile }
-// { dg-options "-O2 -std=c++11 -fno-pic" }
-// { dg-require-effective-target fpic }
-
-struct dummy { };
-struct true_type { struct dummy i; };
-
-extern true_type y;
-extern void xxx (true_type c);
-
-void
-yyy (void)
-{
- xxx (y);
-}
-
-// { dg-final { scan-assembler "jmp\[\t \]+\[^\$\]*?_Z3xxx9true_type" { target i?86-*-* x86_64-*-* } } }
diff --git a/gcc/testsuite/g++.dg/abi/pr60336-10.C b/gcc/testsuite/g++.dg/abi/pr60336-10.C
deleted file mode 100644
index 6c9c990..0000000
--- a/gcc/testsuite/g++.dg/abi/pr60336-10.C
+++ /dev/null
@@ -1,50 +0,0 @@
-// { dg-do run }
-// { dg-options "-O2" }
-
-#include <stdarg.h>
-
-struct dummy0 { };
-struct dummy1 { };
-struct dummy : dummy0, dummy1 { };
-
-void
-test (struct dummy a, int m, ...)
-{
- va_list va_arglist;
- int i;
- int count = 0;
-
- if (m == 0)
- count++;
- va_start (va_arglist, m);
- i = va_arg (va_arglist, int);
- if (i == 1)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 2)
- i = va_arg (va_arglist, int);
- count++;
- if (i == 3)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 4)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 5)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 6)
- count++;
- va_end (va_arglist);
- if (count != 7)
- __builtin_abort ();
-}
-
-struct dummy a0;
-
-int
-main ()
-{
- test (a0, 0, 1, 2, 3, 4, 5, 6);
- return 0;
-}
diff --git a/gcc/testsuite/g++.dg/abi/pr60336-11.C b/gcc/testsuite/g++.dg/abi/pr60336-11.C
deleted file mode 100644
index c92f3d4..0000000
--- a/gcc/testsuite/g++.dg/abi/pr60336-11.C
+++ /dev/null
@@ -1,56 +0,0 @@
-// { dg-do run }
-// { dg-options "-O2" }
-
-#include <stdarg.h>
-
-struct dummy0
-{
- void bar (void);
-};
-struct dummy1
-{
- void foo (void);
-};
-struct dummy : dummy0, dummy1 { };
-
-void
-test (struct dummy a, int m, ...)
-{
- va_list va_arglist;
- int i;
- int count = 0;
-
- if (m == 0)
- count++;
- va_start (va_arglist, m);
- i = va_arg (va_arglist, int);
- if (i == 1)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 2)
- i = va_arg (va_arglist, int);
- count++;
- if (i == 3)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 4)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 5)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 6)
- count++;
- va_end (va_arglist);
- if (count != 7)
- __builtin_abort ();
-}
-
-struct dummy a0;
-
-int
-main ()
-{
- test (a0, 0, 1, 2, 3, 4, 5, 6);
- return 0;
-}
diff --git a/gcc/testsuite/g++.dg/abi/pr60336-12.C b/gcc/testsuite/g++.dg/abi/pr60336-12.C
deleted file mode 100644
index 83a7bb0..0000000
--- a/gcc/testsuite/g++.dg/abi/pr60336-12.C
+++ /dev/null
@@ -1,57 +0,0 @@
-// { dg-do run }
-// { dg-options "-O2" }
-
-#include <stdarg.h>
-
-struct dummy0
-{
-};
-struct dummy1
-{
- unsigned : 15;
-};
-struct dummy : dummy0, dummy1
-{
-};
-
-void
-test (struct dummy a, int m, ...)
-{
- va_list va_arglist;
- int i;
- int count = 0;
-
- if (m == 0)
- count++;
- va_start (va_arglist, m);
- i = va_arg (va_arglist, int);
- if (i == 1)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 2)
- i = va_arg (va_arglist, int);
- count++;
- if (i == 3)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 4)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 5)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 6)
- count++;
- va_end (va_arglist);
- if (count != 7)
- __builtin_abort ();
-}
-
-struct dummy a0;
-
-int
-main ()
-{
- test (a0, 0, 1, 2, 3, 4, 5, 6);
- return 0;
-}
diff --git a/gcc/testsuite/g++.dg/abi/pr60336-2.C b/gcc/testsuite/g++.dg/abi/pr60336-2.C
deleted file mode 100644
index 32eecb3..0000000
--- a/gcc/testsuite/g++.dg/abi/pr60336-2.C
+++ /dev/null
@@ -1,48 +0,0 @@
-// { dg-do run }
-// { dg-options "-O2 -Wabi=9" }
-
-#include <stdarg.h>
-
-struct dummy { };
-
-void
-test (struct dummy a, int m, ...) // { dg-message "empty" }
-{
- va_list va_arglist;
- int i;
- int count = 0;
-
- if (m == 0)
- count++;
- va_start (va_arglist, m);
- i = va_arg (va_arglist, int);
- if (i == 1)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 2)
- i = va_arg (va_arglist, int);
- count++;
- if (i == 3)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 4)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 5)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 6)
- count++;
- va_end (va_arglist);
- if (count != 7)
- __builtin_abort ();
-}
-
-struct dummy a0;
-
-int
-main ()
-{
- test (a0, 0, 1, 2, 3, 4, 5, 6); // { dg-message "empty" }
- return 0;
-}
diff --git a/gcc/testsuite/g++.dg/abi/pr60336-3.C b/gcc/testsuite/g++.dg/abi/pr60336-3.C
deleted file mode 100644
index 8ebd4dd..0000000
--- a/gcc/testsuite/g++.dg/abi/pr60336-3.C
+++ /dev/null
@@ -1,15 +0,0 @@
-// { dg-do compile }
-// { dg-options "-O2 -Wabi=9" }
-
-struct dummy { struct{}__attribute__((aligned (4))) a[7]; };
-
-extern void test1 (struct dummy, ...);
-extern void (*test2) (struct dummy, ...);
-
-void
-foo ()
-{
- struct dummy a0;
- test1 (a0, 42); // { dg-message "empty" }
- test2 (a0, 42); // { dg-message "empty" }
-}
diff --git a/gcc/testsuite/g++.dg/abi/pr60336-4.C b/gcc/testsuite/g++.dg/abi/pr60336-4.C
deleted file mode 100644
index 8790a66..0000000
--- a/gcc/testsuite/g++.dg/abi/pr60336-4.C
+++ /dev/null
@@ -1,48 +0,0 @@
-// { dg-do run { target { { i?86-*-* x86_64-*-* } && { ! { ia32 } } } } }
-// { dg-options "-O2 -fabi-version=9" }
-
-#include <stdarg.h>
-
-struct dummy { };
-
-void
-test (struct dummy a, int m, ...)
-{
- va_list va_arglist;
- int i;
- int count = 0;
-
- if (m == 0)
- count++;
- va_start (va_arglist, m);
- i = va_arg (va_arglist, int);
- if (i == 1)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 2)
- i = va_arg (va_arglist, int);
- count++;
- if (i == 3)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 4)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 5)
- count++;
- i = va_arg (va_arglist, int);
- if (i == 6)
- count++;
- va_end (va_arglist);
- if (count == 7)
- __builtin_abort ();
-}
-
-struct dummy a0;
-
-int
-main ()
-{
- test (a0, 0, 1, 2, 3, 4, 5, 6);
- return 0;
-}
diff --git a/gcc/testsuite/g++.dg/abi/pr60336-5.C b/gcc/testsuite/g++.dg/abi/pr60336-5.C
deleted file mode 100644
index b0c76ad..0000000
--- a/gcc/testsuite/g++.dg/abi/pr60336-5.C
+++ /dev/null
@@ -1,17 +0,0 @@
-// { dg-do compile }
-// { dg-options "-O2 -std=c++11 -fno-pic" }
-// { dg-require-effective-target fpic }
-
-struct dummy { };
-struct true_type { struct dummy i; struct dummy j; };
-
-extern true_type y;
-extern void xxx (true_type c);
-
-void
-yyy (void)
-{
- xxx (y);
-}
-
-// { dg-final { scan-assembler "jmp\[\t \]+\[^\$\]*?_Z3xxx9true_type" { target i?86-*-* x86_64-*-* } } }
diff --git a/gcc/testsuite/g++.dg/abi/pr60336-6.C b/gcc/testsuite/g++.dg/abi/pr60336-6.C
deleted file mode 100644
index 5879651..0000000
--- a/gcc/testsuite/g++.dg/abi/pr60336-6.C
+++ /dev/null
@@ -1,17 +0,0 @@
-// { dg-do compile }
-// { dg-options "-O2 -std=c++11 -fno-pic" }
-// { dg-require-effective-target fpic }
-
-struct dummy { };
-struct true_type { struct dummy i1; struct dummy i2; };
-
-extern true_type y;
-extern void xxx (true_type c);
-
-void
-yyy (void)
-{
- xxx (y);
-}
-
-// { dg-final { scan-assembler "jmp\[\t \]+\[^\$\]*?_Z3xxx9true_type" { target i?86-*-* x86_64-*-* } } }
diff --git a/gcc/testsuite/g++.dg/abi/pr60336-7.C b/gcc/testsuite/g++.dg/abi/pr60336-7.C
deleted file mode 100644
index 0e5d2ef..0000000
--- a/gcc/testsuite/g++.dg/abi/pr60336-7.C
+++ /dev/null
@@ -1,17 +0,0 @@
-// { dg-do compile }
-// { dg-options "-O2 -std=c++11 -fno-pic" }
-// { dg-require-effective-target fpic }
-
-struct dummy { };
-struct true_type { struct dummy i[120]; };
-
-extern true_type y;
-extern void xxx (true_type c);
-
-void
-yyy (void)
-{
- xxx (y);
-}
-
-// { dg-final { scan-assembler "jmp\[\t \]+\[^\$\]*?_Z3xxx9true_type" { target i?86-*-* x86_64-*-* } } }
diff --git a/gcc/testsuite/g++.dg/abi/pr60336-8.C b/gcc/testsuite/g++.dg/abi/pr60336-8.C
deleted file mode 100644
index fdfc924..0000000
--- a/gcc/testsuite/g++.dg/abi/pr60336-8.C
+++ /dev/null
@@ -1,15 +0,0 @@
-// { dg-do compile }
-// { dg-options "-O2 -Wabi=9" }
-
-struct dummy { struct{} a[7][3]; };
-
-extern void test1 (struct dummy, ...);
-extern void (*test2) (struct dummy, ...);
-
-void
-foo ()
-{
- struct dummy a0;
- test1 (a0, 42); // { dg-message "empty" }
- test2 (a0, 42); // { dg-message "empty" }
-}
diff --git a/gcc/testsuite/g++.dg/abi/pr60336-9.C b/gcc/testsuite/g++.dg/abi/pr60336-9.C
deleted file mode 100644
index 4ad333f..0000000
--- a/gcc/testsuite/g++.dg/abi/pr60336-9.C
+++ /dev/null
@@ -1,28 +0,0 @@
-// { dg-do compile }
-// { dg-options "-O2 -std=c++11 -fno-pic" }
-// { dg-require-effective-target fpic }
-
-struct A1 {}; struct A2 {};
-struct B1 { A1 a; A2 b; }; struct B2 { A1 a; A2 b; };
-struct C1 { B1 a; B2 b; }; struct C2 { B1 a; B2 b; };
-struct D1 { C1 a; C2 b; }; struct D2 { C1 a; C2 b; };
-struct E1 { D1 a; D2 b; }; struct E2 { D1 a; D2 b; };
-struct F1 { E1 a; E2 b; }; struct F2 { E1 a; E2 b; };
-struct G1 { F1 a; F2 b; }; struct G2 { F1 a; F2 b; };
-struct H1 { G1 a; G2 b; }; struct H2 { G1 a; G2 b; };
-struct I1 { H1 a; H2 b; }; struct I2 { H1 a; H2 b; };
-struct J1 { I1 a; I2 b; }; struct J2 { I1 a; I2 b; };
-struct dummy { J1 a; J2 b; };
-
-struct true_type { struct dummy i; };
-
-extern true_type y;
-extern void xxx (true_type c);
-
-void
-yyy (void)
-{
- xxx (y);
-}
-
-// { dg-final { scan-assembler "jmp\[\t \]+\[^\$\]*?_Z3xxx9true_type" { target i?86-*-* x86_64-*-* } } }
diff --git a/gcc/testsuite/g++.dg/abi/pr68355.C b/gcc/testsuite/g++.dg/abi/pr68355.C
deleted file mode 100644
index 1354fc4..0000000
--- a/gcc/testsuite/g++.dg/abi/pr68355.C
+++ /dev/null
@@ -1,24 +0,0 @@
-// { dg-do compile }
-// { dg-options "-O2 -std=c++11 -fno-pic" }
-// { dg-require-effective-target fpic }
-
-template<typename _Tp, _Tp __v>
-struct integral_constant
-{
- static constexpr _Tp value = __v;
- typedef _Tp value_type;
- typedef integral_constant<_Tp, __v> type;
- constexpr operator value_type() const { return value; }
-};
-
-typedef integral_constant<bool, true> true_type;
-extern void xxx (true_type c);
-
-void
-yyy (void)
-{
- true_type y;
- xxx (y);
-}
-
-// { dg-final { scan-assembler "jmp\[\t \]+\[^\$\]*?_Z3xxx17integral_constantIbLb1EE" { target i?86-*-* x86_64-*-* } } }