annotate gcc/testsuite/g++.dg/cpp0x/Wnarrowing17.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 // PR c++/90805 - detect narrowing in case values.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 // { dg-do compile { target c++11 } }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 void f(int i, char c, unsigned u)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 switch (i)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 case 2149056512u:; // { dg-error "narrowing conversion of .2149056512. from .unsigned int. to .int." }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 case (long long int) 1e10:; // { dg-error "narrowing conversion of .10000000000. from .long long int. to .int." }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 // { dg-warning "overflow in conversion" "overflow" { target *-*-* } .-1 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 switch (c)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 // No narrowing, the adjusted type is int.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 case 300:; // { dg-warning "exceeds maximum value for type" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 switch (u)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 case -42:; // { dg-error "narrowing conversion of .-42. from .int. to .unsigned int." }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 }