arm-c.c (arm_option_override): Initialize target_option_current_node.

2016-02-24  Christian Bruel  <christian.bruel@st.com>

	* config/arm/arm-c.c (arm_option_override): Initialize
	target_option_current_node.
	* config/arm/arm.c (arm_pragma_target_parse): Replace
	build_target_option_node call by target_option_current_node.
	Set target_option_current_node.
	Fix comments.

From-SVN: r233654
This commit is contained in:
Christian Bruel 2016-02-24 09:19:12 +01:00
parent 641487910a
commit dab73e7317
5 changed files with 62 additions and 6 deletions

View File

@ -1,3 +1,12 @@
2016-02-24 Christian Bruel <christian.bruel@st.com>
* config/arm/arm-c.c (arm_option_override): Initialize
target_option_current_node.
* config/arm/arm.c (arm_pragma_target_parse): Replace
build_target_option_node call by target_option_current_node.
Set target_option_current_node.
Fix comments.
2016-02-23 David Edelsohn <dje.gcc@gmail.com>
PR target/69810

View File

@ -199,7 +199,7 @@ arm_cpu_cpp_builtins (struct cpp_reader * pfile)
static bool
arm_pragma_target_parse (tree args, tree pop_target)
{
tree prev_tree = build_target_option_node (&global_options);
tree prev_tree = target_option_current_node;
tree cur_tree;
struct cl_target_option *prev_opt;
struct cl_target_option *cur_opt;
@ -220,11 +220,16 @@ arm_pragma_target_parse (tree args, tree pop_target)
TREE_TARGET_OPTION (prev_tree));
return false;
}
/* handle_pragma_pop_options and handle_pragma_reset_options will set
target_option_current_node, but not handle_pragma_target. */
target_option_current_node = cur_tree;
}
/* Figure out the previous mode. */
prev_opt = TREE_TARGET_OPTION (prev_tree);
cur_opt = TREE_TARGET_OPTION (cur_tree);
/* Update macros if target_node changes. The global state will be restored
by arm_set_current_function. */
prev_opt = TREE_TARGET_OPTION (prev_tree);
cur_opt = TREE_TARGET_OPTION (cur_tree);
gcc_assert (prev_opt);
gcc_assert (cur_opt);

View File

@ -3453,8 +3453,9 @@ arm_option_override (void)
arm_add_gc_roots ();
/* Save the initial options in case the user does function specific
options. */
target_option_default_node = build_target_option_node (&global_options);
options or #pragma target. */
target_option_default_node = target_option_current_node
= build_target_option_node (&global_options);
/* Init initial mode for testing. */
thumb_flipper = TARGET_THUMB;

View File

@ -1,3 +1,7 @@
2016-02-24 Christian Bruel <christian.bruel@st.com>
* gcc.target/arm/pragma_cpp_fma.c: New test.
2016-02-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/61156
@ -89,6 +93,7 @@
PR c/69900
* gcc.dg/pr69900.c: New test.
>>>>>>> .r233653
2016-02-23 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/69666

View File

@ -0,0 +1,36 @@
/* Test that FMA macro is correctly undef. */
/* { dg-do compile } */
/* { dg-skip-if "Default no fma" { *-*-* } { "-mfpu=*vfpv4*" "-mfpu=*armv8"} } */
/* { dg-require-effective-target arm_fp_ok } */
/* { dg-add-options arm_fp } */
#pragma GCC push_options
#pragma GCC target ("fpu=crypto-neon-fp-armv8")
#ifndef __ARM_FEATURE_FMA
#error "__ARM_FEATURE_FMA is not defined but should be"
#endif
#ifndef __ARM_FEATURE_CRYPTO
#error "__ARM_FEATURE_CRYPTO is not defined but should be"
#endif
#if __ARM_NEON_FP != 6
#error "__ARM_NEON_FP"
#endif
#if __ARM_FP != 14
#error "__ARM_FP"
#endif
#pragma GCC pop_options
#pragma GCC push_options
#pragma GCC target ("fpu=neon-vfpv4")
#pragma GCC pop_options
#ifdef __ARM_FEATURE_FMA
#error "__ARM_FEATURE_FMA is defined but should not be"
#endif