Patchwork [v2,testsuite] : Add dg-error for unsupported floating suffix

login
register
mail settings
Submitter Uros Bizjak
Date Nov. 16, 2012, 7:53 a.m.
Message ID <CAFULd4bBjteuw=UHT0sCh6-eWASQOaaFW8gAxm5y9+FSTuenYQ@mail.gmail.com>
Download mbox | patch
Permalink /patch/199507/
State New
Headers show

Comments

Uros Bizjak - Nov. 16, 2012, 7:53 a.m.
On Thu, Nov 15, 2012 at 7:44 PM, Uros Bizjak <ubizjak@gmail.com> wrote:

>>> >> No, the intention of this test is to check if target can handle these
>>> >> suffixes through TARGET_C_MODE_FOR_SUFFIX. Please note that in
>>> >> particular tests, -std=x compile switches are added to compile flags.
>>> >
>>> > But -std=c++11 (well, perhaps -std=gnu++11) could be eventually the default.
>>> > As Q/W suffixes are only supported in certain modes through
>>> > TARGET_C_MODE_FOR_SUFFIX, it is better to put the explicit option that
>>> > allows it on the command line of the check_effective_target* test.
>>>
>>> Do you have option in mind that would be appropriate for the test?
>>
>> "-std=gnu++03" ?
>
> Adding "-w" to skip a warning that this option applies only to c++ did
> the trick.

2012-11-16  Uros Bizjak  <ubizjak@gmail.com>

	* lib/target_suports.exp
	(check_effective_target_has_w_floating_suffix): New procedure.
	(check_effective_target_has_q_floating_suffix): Ditto.
	* g++.dg/cpp0x/gnu_fext-numeric-literals.C: Add dg-error directive
	for unsupported non-standard suffix on floating constant.
	* g++.dg/cpp0x/std_fext-numeric-literals.C: Ditto.

Attached patch was re-tested on alphaev68-linux-gnu and
x86_64-linux-gnu and committed to mainline SVN.

Uros.
Jakub Jelinek - Nov. 16, 2012, 8:52 a.m.
On Fri, Nov 16, 2012 at 08:53:54AM +0100, Uros Bizjak wrote:
> 2012-11-16  Uros Bizjak  <ubizjak@gmail.com>
> 
> 	* lib/target_suports.exp
> 	(check_effective_target_has_w_floating_suffix): New procedure.
> 	(check_effective_target_has_q_floating_suffix): Ditto.
> 	* g++.dg/cpp0x/gnu_fext-numeric-literals.C: Add dg-error directive
> 	for unsupported non-standard suffix on floating constant.
> 	* g++.dg/cpp0x/std_fext-numeric-literals.C: Ditto.
> 
> Attached patch was re-tested on alphaev68-linux-gnu and
> x86_64-linux-gnu and committed to mainline SVN.

Perhaps just bike-shed, but I'd write it as:

> +# Return 1 if the target supports 'w' suffix on floating constant
> +# 0 otherwise.
> +
> +proc check_effective_target_has_w_floating_suffix { } {
    if [check_effective_target_c++] {
	opts="-std=gnu++03"
    else
	opts=""
    }
> +    return [check_no_compiler_messages w_fp_suffix object {
> +	float dummy = 1.0w;
       } "$opts"]

but I admit I haven't tested it.

	Jakub

Patch

Index: lib/target-supports.exp
===================================================================
--- lib/target-supports.exp	(revision 193533)
+++ lib/target-supports.exp	(working copy)
@@ -1742,6 +1742,23 @@ 
     }]
 }
 
+# Return 1 if the target supports 'w' suffix on floating constant
+# 0 otherwise.
+
+proc check_effective_target_has_w_floating_suffix { } {
+    return [check_no_compiler_messages w_fp_suffix object {
+	float dummy = 1.0w;
+    } "-std=gnu++03 -w"]
+}
+
+# Return 1 if the target supports 'q' suffix on floating constant
+# 0 otherwise.
+
+proc check_effective_target_has_q_floating_suffix { } {
+    return [check_no_compiler_messages q_fp_suffix object {
+	float dummy = 1.0q;
+    } "-std=gnu++03 -w"]
+}
 # Return 1 if the target supports compiling fixed-point,
 # 0 otherwise.
 
Index: g++.dg/cpp0x/gnu_fext-numeric-literals.C
===================================================================
--- g++.dg/cpp0x/gnu_fext-numeric-literals.C	(revision 193533)
+++ g++.dg/cpp0x/gnu_fext-numeric-literals.C	(working copy)
@@ -91,10 +91,10 @@ 
   auto rfp = 1.0r; // { dg-error "fixed-point types not supported" }
   auto Rfp = 1.0R; // { dg-error "fixed-point types not supported" }
 
-  auto wfp = 1.0w;
-  auto Wfp = 1.0W;
-  auto qfp = 1.0q;
-  auto Qfp = 1.0Q;
+  auto wfp = 1.0w; // { dg-error "unsupported" "" { target { ! has_w_floating_suffix } } }
+  auto Wfp = 1.0W; // { dg-error "unsupported" "" { target { ! has_w_floating_suffix } } }
+  auto qfp = 1.0q; // { dg-error "unsupported" "" { target { ! has_q_floating_suffix } } }
+  auto Qfp = 1.0Q; // { dg-error "unsupported" "" { target { ! has_q_floating_suffix } } }
 }
 
 // { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 7 }
Index: g++.dg/cpp0x/std_fext-numeric-literals.C
===================================================================
--- g++.dg/cpp0x/std_fext-numeric-literals.C	(revision 193533)
+++ g++.dg/cpp0x/std_fext-numeric-literals.C	(working copy)
@@ -91,10 +91,10 @@ 
   auto rfp = 1.0r; // { dg-error "fixed-point types not supported" }
   auto Rfp = 1.0R; // { dg-error "fixed-point types not supported" }
 
-  auto wfp = 1.0w;
-  auto Wfp = 1.0W;
-  auto qfp = 1.0q;
-  auto Qfp = 1.0Q;
+  auto wfp = 1.0w; // { dg-error "unsupported" "" { target { ! has_w_floating_suffix } } }
+  auto Wfp = 1.0W; // { dg-error "unsupported" "" { target { ! has_w_floating_suffix } } }
+  auto qfp = 1.0q; // { dg-error "unsupported" "" { target { ! has_q_floating_suffix } } }
+  auto Qfp = 1.0Q; // { dg-error "unsupported" "" { target { ! has_q_floating_suffix } } }
 }
 
 // { dg-warning "literal operator suffixes not preceded by" "" { target *-*-* } 7 }