Commit dcb466ec by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/77948 (Option processing of -std=c++11 -std=gnu++11 doesn't reset ext_numeric_literals)

	PR c++/77948
	* c.opt (fext-numeric-literals): Add Var and Init.
	* c-opts.c (c_common_handle_option): Don't clear
	cpp_opts->ext_numeric_literals for -std=c++{11,14,1z}.
	(c_common_post_options): Clear it here if not set
	explicitly.

	* g++.dg/cpp0x/pr77948-1.C: New test.
	* g++.dg/cpp0x/pr77948-2.C: New test.
	* g++.dg/cpp0x/pr77948-3.C: New test.
	* g++.dg/cpp0x/pr77948-4.C: New test.
	* g++.dg/cpp0x/pr77948-5.C: New test.
	* g++.dg/cpp0x/pr77948-6.C: New test.

From-SVN: r241707
parent 1e4fa9b1
2016-10-31 Jakub Jelinek <jakub@redhat.com>
PR c++/77948
* c.opt (fext-numeric-literals): Add Var and Init.
* c-opts.c (c_common_handle_option): Don't clear
cpp_opts->ext_numeric_literals for -std=c++{11,14,1z}.
(c_common_post_options): Clear it here if not set
explicitly.
2016-10-28 Aldy Hernandez <aldyh@redhat.com> 2016-10-28 Aldy Hernandez <aldyh@redhat.com>
PR debug/77773 PR debug/77773
......
...@@ -624,31 +624,19 @@ c_common_handle_option (size_t scode, const char *arg, int value, ...@@ -624,31 +624,19 @@ c_common_handle_option (size_t scode, const char *arg, int value,
case OPT_std_c__11: case OPT_std_c__11:
case OPT_std_gnu__11: case OPT_std_gnu__11:
if (!preprocessing_asm_p) if (!preprocessing_asm_p)
{ set_std_cxx11 (code == OPT_std_c__11 /* ISO */);
set_std_cxx11 (code == OPT_std_c__11 /* ISO */);
if (code == OPT_std_c__11)
cpp_opts->ext_numeric_literals = 0;
}
break; break;
case OPT_std_c__14: case OPT_std_c__14:
case OPT_std_gnu__14: case OPT_std_gnu__14:
if (!preprocessing_asm_p) if (!preprocessing_asm_p)
{ set_std_cxx14 (code == OPT_std_c__14 /* ISO */);
set_std_cxx14 (code == OPT_std_c__14 /* ISO */);
if (code == OPT_std_c__14)
cpp_opts->ext_numeric_literals = 0;
}
break; break;
case OPT_std_c__1z: case OPT_std_c__1z:
case OPT_std_gnu__1z: case OPT_std_gnu__1z:
if (!preprocessing_asm_p) if (!preprocessing_asm_p)
{ set_std_cxx1z (code == OPT_std_c__1z /* ISO */);
set_std_cxx1z (code == OPT_std_c__1z /* ISO */);
if (code == OPT_std_c__1z)
cpp_opts->ext_numeric_literals = 0;
}
break; break;
case OPT_std_c90: case OPT_std_c90:
...@@ -923,6 +911,11 @@ c_common_post_options (const char **pfilename) ...@@ -923,6 +911,11 @@ c_common_post_options (const char **pfilename)
if (warn_narrowing == -1) if (warn_narrowing == -1)
warn_narrowing = 1; warn_narrowing = 1;
/* Unless -f{,no-}ext-numeric-literals has been used explicitly,
for -std=c++{11,14,1z} default to -fno-ext-numeric-literals. */
if (flag_iso && !global_options_set.x_flag_ext_numeric_literals)
cpp_opts->ext_numeric_literals = 0;
} }
else if (warn_narrowing == -1) else if (warn_narrowing == -1)
warn_narrowing = 0; warn_narrowing = 0;
......
...@@ -1705,7 +1705,7 @@ C ObjC C++ ObjC++ Joined ...@@ -1705,7 +1705,7 @@ C ObjC C++ ObjC++ Joined
-femit-struct-debug-detailed=<spec-list> Detailed reduced debug info for structs. -femit-struct-debug-detailed=<spec-list> Detailed reduced debug info for structs.
fext-numeric-literals fext-numeric-literals
C++ ObjC++ C++ ObjC++ Var(flag_ext_numeric_literals) Init(1)
Interpret imaginary, fixed-point, or other gnu number suffix as the corresponding Interpret imaginary, fixed-point, or other gnu number suffix as the corresponding
number literal rather than a user-defined number literal. number literal rather than a user-defined number literal.
......
2016-10-31 Jakub Jelinek <jakub@redhat.com> 2016-10-31 Jakub Jelinek <jakub@redhat.com>
PR c++/77948
* g++.dg/cpp0x/pr77948-1.C: New test.
* g++.dg/cpp0x/pr77948-2.C: New test.
* g++.dg/cpp0x/pr77948-3.C: New test.
* g++.dg/cpp0x/pr77948-4.C: New test.
* g++.dg/cpp0x/pr77948-5.C: New test.
* g++.dg/cpp0x/pr77948-6.C: New test.
PR tree-optimization/77860 PR tree-optimization/77860
* gcc.dg/pr77860.c: New test. * gcc.dg/pr77860.c: New test.
......
// PR c++/77948
// { dg-do compile }
// { dg-options "-std=c++11 -std=gnu++11" }
void
foo ()
{
auto qfp = 1.0q; // { dg-error "unsupported" "" { target { ! has_q_floating_suffix } } }
auto Qfp = 1.0Q; // { dg-error "unsupported" "" { target { ! has_q_floating_suffix } } }
}
// PR c++/77948
// { dg-do compile }
// { dg-options "-std=gnu++11 -std=c++11" }
void
foo ()
{
auto qfp = 1.0q; // { dg-error "unable to find numeric literal operator" }
auto Qfp = 1.0Q; // { dg-error "unable to find numeric literal operator" }
}
// PR c++/77948
// { dg-do compile }
// { dg-options "-std=c++11 -std=gnu++98" }
void
foo ()
{
double qfp = 1.0q; // { dg-error "unsupported" "" { target { ! has_q_floating_suffix } } }
double Qfp = 1.0Q; // { dg-error "unsupported" "" { target { ! has_q_floating_suffix } } }
}
// PR c++/77948
// { dg-do compile }
// { dg-options "-std=c++11 -std=c++98" }
void
foo ()
{
double qfp = 1.0q; // { dg-error "unsupported" "" { target { ! has_q_floating_suffix } } }
double Qfp = 1.0Q; // { dg-error "unsupported" "" { target { ! has_q_floating_suffix } } }
}
// PR c++/77948
// { dg-do compile }
// { dg-options "-std=gnu++98 -std=c++11" }
void
foo ()
{
auto qfp = 1.0q; // { dg-error "unable to find numeric literal operator" }
auto Qfp = 1.0Q; // { dg-error "unable to find numeric literal operator" }
}
// PR c++/77948
// { dg-do compile }
// { dg-options "-std=c++98 -std=c++11" }
void
foo ()
{
auto qfp = 1.0q; // { dg-error "unable to find numeric literal operator" }
auto Qfp = 1.0Q; // { dg-error "unable to find numeric literal operator" }
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment