summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/dfp/Wbad-function-cast-1.c
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gcc.dg/dfp/Wbad-function-cast-1.c
downloadcbb-gcc-4.6.4-upstream.tar.bz2
cbb-gcc-4.6.4-upstream.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/gcc.dg/dfp/Wbad-function-cast-1.c')
-rw-r--r--gcc/testsuite/gcc.dg/dfp/Wbad-function-cast-1.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/dfp/Wbad-function-cast-1.c b/gcc/testsuite/gcc.dg/dfp/Wbad-function-cast-1.c
new file mode 100644
index 000000000..99d8f0655
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/dfp/Wbad-function-cast-1.c
@@ -0,0 +1,44 @@
+/* Test operation of -Wbad-function-cast. */
+/* Based on gcc.dg/Wbad-function-cast-1.c. */
+
+/* { dg-do compile } */
+/* { dg-options "-Wbad-function-cast" } */
+
+int if1(void);
+char if2(void);
+long if3(void);
+float rf1(void);
+double rf2(void);
+_Decimal32 rf3(void);
+_Decimal64 rf4(void);
+_Decimal128 rf5(void);
+_Complex double cf(void);
+
+void
+foo(void)
+{
+ /* Casts to void types are always OK. */
+ (void)rf3();
+ (void)rf4();
+ (void)rf5();
+ (const void)rf3();
+ /* Casts to the same type or similar types are OK. */
+ (_Decimal32)rf1();
+ (_Decimal64)rf2();
+ (_Decimal128)rf3();
+ (_Decimal128)rf4();
+ (_Decimal128)rf5();
+ (float)rf3();
+ (double)rf4();
+ (long double)rf5();
+ /* Casts to types with different TREE_CODE (which is how this
+ warning has been defined) are not OK, except for casts to void
+ types. */
+ (_Decimal32)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type '_Decimal32'" } */
+ (_Decimal64)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type '_Decimal64'" } */
+ (_Decimal128)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Decimal128'" } */
+ (int)rf3(); /* { dg-warning "cast from function call of type '_Decimal32' to non-matching type 'int'" } */
+ (long)rf4(); /* { dg-warning "cast from function call of type '_Decimal64' to non-matching type 'long int'" } */
+ (long int)rf5(); /* { dg-warning "cast from function call of type '_Decimal128' to non-matching type 'long int'" } */
+ (_Decimal32)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type '_Decimal32'" } */
+}