diff options
author | Iain Sandoe <iains@gcc.gnu.org> | 2010-10-23 19:40:26 +0000 |
---|---|---|
committer | Iain Sandoe <iains@gcc.gnu.org> | 2010-10-23 19:40:26 +0000 |
commit | 505bff7a282203ff50af5bce9db2c932610b4021 (patch) | |
tree | 1605a08544e7158e32cd50c39ab0a6af4d646d20 | |
parent | b8a18805817b17b09764527a86ebc551fa5900b3 (diff) | |
download | gcc-505bff7a282203ff50af5bce9db2c932610b4021.zip gcc-505bff7a282203ff50af5bce9db2c932610b4021.tar.gz gcc-505bff7a282203ff50af5bce9db2c932610b4021.tar.bz2 |
tests for Darwin CFStrings
gcc/testsuite:
Based on the CFString implementation in FSF apple/trunk branch.
* gcc.dg/darwin-cfstring-1.c: New.
* gcc.dg/darwin-cfstring-2.c: New.
* gcc.dg/torture/darwin-cfstring-3.c: New.
* g++.dg/other/darwin-cfstring1.C: New.
* g++.dg/torture/darwin-cfstring-3.C: New.
From-SVN: r165889
-rw-r--r-- | gcc/testsuite/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/other/darwin-cfstring1.C | 25 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/darwin-cfstring-3.C | 30 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/darwin-cfstring-1.c | 28 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/darwin-cfstring-2.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/darwin-cfstring-3.c | 30 |
6 files changed, 135 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 137f965..cfebd35 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2010-10-23 Iain Sandoe <iains@gcc.gnu.org> + + Based on the CFString implementation in FSF apple/trunk branch. + + * gcc.dg/darwin-cfstring-1.c: New. + * gcc.dg/darwin-cfstring-2.c: New. + * gcc.dg/torture/darwin-cfstring-3.c: New. + * g++.dg/other/darwin-cfstring1.C: New. + * g++.dg/torture/darwin-cfstring-3.C: New. + 2010-10-23 Nicola Pero <nicola.pero@meta-innovation.com> * objc.dg/demangle-1.m: New test. diff --git a/gcc/testsuite/g++.dg/other/darwin-cfstring1.C b/gcc/testsuite/g++.dg/other/darwin-cfstring1.C new file mode 100644 index 0000000..b30ba9b --- /dev/null +++ b/gcc/testsuite/g++.dg/other/darwin-cfstring1.C @@ -0,0 +1,25 @@ +/* Test whether the __builtin__CFStringMakeConstantString + "function" fails gracefully when handed a non-constant + argument. This will only work on MacOS X 10.1.2 and later. */ +/* Developed by Ziemowit Laski <zlaski@apple.com>. */ + +/* { dg-do compile { target *-*-darwin* } } */ +/* { dg-options "-mconstant-cfstrings" } */ + +#include <CoreFoundation/CFString.h> + +#ifdef __CONSTANT_CFSTRINGS__ +#undef CFSTR +#define CFSTR(STR) ((CFStringRef) __builtin___CFStringMakeConstantString (STR)) +#endif + +extern int cond; +extern const char *func(void); + +int main(void) { + CFStringRef s1 = CFSTR("Str1"); + CFStringRef s2 = CFSTR(cond? "Str2": "Str3"); /* { dg-error "CFString literal expression is not a string constant" } */ + CFStringRef s3 = CFSTR(func()); /* { dg-error "CFString literal expression is not a string constant" } */ + + return 0; +} diff --git a/gcc/testsuite/g++.dg/torture/darwin-cfstring-3.C b/gcc/testsuite/g++.dg/torture/darwin-cfstring-3.C new file mode 100644 index 0000000..2d755ec --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/darwin-cfstring-3.C @@ -0,0 +1,30 @@ +/* Test whether the __builtin__CFStringMakeConstantString + "function" generates compile-time objects with the correct layout. */ +/* Developed by Ziemowit Laski <zlaski@apple.com>. */ + +/* { dg-do compile { target *-*-darwin* } } */ +/* { dg-options "-mconstant-cfstrings" } */ + +typedef const struct __CFString *CFStringRef; + +#ifdef __CONSTANT_CFSTRINGS__ +#define CFSTR(STR) ((CFStringRef) __builtin___CFStringMakeConstantString (STR)) +#else +#error __CONSTANT_CFSTRINGS__ not defined +#endif + +extern int cond; +extern const char *func(void); + +CFStringRef s0 = CFSTR("Hello" "there"); + +void foo(void) { + const CFStringRef s1 = CFSTR("Str1"); + + s0 = s1; +} + +/* { dg-final { scan-assembler "\\.long\[ \\t\]+___CFConstantStringClassReference\n\[ \\t\]*\\.long\[ \\t\]+1992\n\[ \\t\]*\\.long\[ \\t\]+LC.*\n\[ \\t\]*\\.long\[ \\t\]+4\n" { target { *-*-darwin* && { ! lp64 } } } } } */ +/* { dg-final { scan-assembler "\\.long\[ \\t\]+___CFConstantStringClassReference\n\[ \\t\]*\\.long\[ \\t\]+1992\n\[ \\t\]*\\.long\[ \\t\]+LC.*\n\[ \\t\]*\\.long\[ \\t\]+10\n" { target { *-*-darwin* && { ! lp64 } } } } } */ +/* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992\n\t.space 4\n\t.quad\t.*\n\t.quad\t4\n" { target { *-*-darwin* && { lp64 } } } } } */ +/* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992\n\t.space 4\n\t.quad\t.*\n\t.quad\t10\n" { target { *-*-darwin* && { lp64 } } } } } */ diff --git a/gcc/testsuite/gcc.dg/darwin-cfstring-1.c b/gcc/testsuite/gcc.dg/darwin-cfstring-1.c new file mode 100644 index 0000000..b9565e7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/darwin-cfstring-1.c @@ -0,0 +1,28 @@ +/* Test whether the __builtin__CFStringMakeConstantString + "function" fails gracefully when handed a non-constant + argument. This will only work on MacOS X 10.1.2 and later. */ +/* Developed by Ziemowit Laski <zlaski@apple.com>. */ + +/* { dg-do compile { target *-*-darwin* } } */ +/* { dg-options "-mconstant-cfstrings" } */ + +typedef const struct __CFString *CFStringRef; + +#ifdef __CONSTANT_CFSTRINGS__ +#define CFSTR(STR) ((CFStringRef) __builtin___CFStringMakeConstantString (STR)) +#else +#error __CONSTANT_CFSTRINGS__ not defined +#endif + +extern int cond; +extern const char *func(void); + +const CFStringRef s0 = CFSTR("Hello" "there"); + +int main(void) { + CFStringRef s1 = CFSTR("Str1"); + CFStringRef s2 = CFSTR(cond? "Str2": "Str3"); /* { dg-error "CFString literal expression is not a string constant" } */ + CFStringRef s3 = CFSTR(func()); /* { dg-error "CFString literal expression is not a string constant" } */ + + return 0; +} diff --git a/gcc/testsuite/gcc.dg/darwin-cfstring-2.c b/gcc/testsuite/gcc.dg/darwin-cfstring-2.c new file mode 100644 index 0000000..1c724b2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/darwin-cfstring-2.c @@ -0,0 +1,12 @@ +/* Test whether the __builtin__CFStringMakeConstantString + "function" fails gracefully when used without the + -mconstant-cfstrings flag. */ +/* Developed by Ziemowit Laski <zlaski@apple.com>. */ + +/* { dg-do compile { target *-*-darwin* } } */ +/* { dg-options "-mno-constant-cfstrings" } */ + +typedef const struct __CFString *CFStringRef; + +const CFStringRef S = ((CFStringRef)__builtin___CFStringMakeConstantString("Testing")); +/* { dg-error "built-in" "built-in function .* requires .* flag" { target *-*-* } 11 } */ diff --git a/gcc/testsuite/gcc.dg/torture/darwin-cfstring-3.c b/gcc/testsuite/gcc.dg/torture/darwin-cfstring-3.c new file mode 100644 index 0000000..2d755ec --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/darwin-cfstring-3.c @@ -0,0 +1,30 @@ +/* Test whether the __builtin__CFStringMakeConstantString + "function" generates compile-time objects with the correct layout. */ +/* Developed by Ziemowit Laski <zlaski@apple.com>. */ + +/* { dg-do compile { target *-*-darwin* } } */ +/* { dg-options "-mconstant-cfstrings" } */ + +typedef const struct __CFString *CFStringRef; + +#ifdef __CONSTANT_CFSTRINGS__ +#define CFSTR(STR) ((CFStringRef) __builtin___CFStringMakeConstantString (STR)) +#else +#error __CONSTANT_CFSTRINGS__ not defined +#endif + +extern int cond; +extern const char *func(void); + +CFStringRef s0 = CFSTR("Hello" "there"); + +void foo(void) { + const CFStringRef s1 = CFSTR("Str1"); + + s0 = s1; +} + +/* { dg-final { scan-assembler "\\.long\[ \\t\]+___CFConstantStringClassReference\n\[ \\t\]*\\.long\[ \\t\]+1992\n\[ \\t\]*\\.long\[ \\t\]+LC.*\n\[ \\t\]*\\.long\[ \\t\]+4\n" { target { *-*-darwin* && { ! lp64 } } } } } */ +/* { dg-final { scan-assembler "\\.long\[ \\t\]+___CFConstantStringClassReference\n\[ \\t\]*\\.long\[ \\t\]+1992\n\[ \\t\]*\\.long\[ \\t\]+LC.*\n\[ \\t\]*\\.long\[ \\t\]+10\n" { target { *-*-darwin* && { ! lp64 } } } } } */ +/* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992\n\t.space 4\n\t.quad\t.*\n\t.quad\t4\n" { target { *-*-darwin* && { lp64 } } } } } */ +/* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992\n\t.space 4\n\t.quad\t.*\n\t.quad\t10\n" { target { *-*-darwin* && { lp64 } } } } } */ |