diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/charset')
-rw-r--r-- | gcc/testsuite/g++.dg/charset/asm1.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/charset/asm2.c | 33 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/charset/asm3.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/charset/asm4.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/charset/attribute1.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/charset/attribute2.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/charset/charset.exp | 44 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/charset/extern1.cc | 15 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/charset/extern2.cc | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/charset/string.c | 5 |
10 files changed, 152 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/charset/asm1.c b/gcc/testsuite/g++.dg/charset/asm1.c new file mode 100644 index 00000000000..9c0ff2866b0 --- /dev/null +++ b/gcc/testsuite/g++.dg/charset/asm1.c @@ -0,0 +1,14 @@ +/* { dg-do compile { target *-*-* } } + { dg-require-iconv "IBM-1047" } + { dg-final { scan-assembler ".ascii bar" } } + { dg-final { scan-assembler ".ascii foo" } } + */ +extern int x, y; + +asm (".ascii bar"); + +int foo (void) +{ + __asm__ (".ascii foo"); + return 0; +} diff --git a/gcc/testsuite/g++.dg/charset/asm2.c b/gcc/testsuite/g++.dg/charset/asm2.c new file mode 100644 index 00000000000..7cc1379a8a9 --- /dev/null +++ b/gcc/testsuite/g++.dg/charset/asm2.c @@ -0,0 +1,33 @@ +/* Test for complex asm statements. Make sure it compiles + then test for some of the asm statements not being translated. */ +/* { dg-do compile } + { dg-require-iconv "IBM-1047" } + { dg-final { scan-assembler "std" } } + { dg-final { scan-assembler "cld" } } + { dg-final { scan-assembler "rep" } } + { dg-final { scan-assembler "movsb" } } */ +#define size_t int +void * +memmove (void *__dest, __const void *__src, size_t __n) +{ + register unsigned long int __d0, __d1, __d2; + if (__dest < __src) + __asm__ __volatile__ + ("cld\n\t" + "rep\n\t" + "movsb" + : "=&c" (__d0), "=&S" (__d1), "=&D" (__d2) + : "0" (__n), "1" (__src), "2" (__dest) + : "memory"); + else + __asm__ __volatile__ + ("std\n\t" + "rep\n\t" + "movsb\n\t" + "cld" + : "=&c" (__d0), "=&S" (__d1), "=&D" (__d2) + : "0" (__n), "1" (__n - 1 + (const char *) __src), + "2" (__n - 1 + (char *) __dest) + : "memory"); + return __dest; +} diff --git a/gcc/testsuite/g++.dg/charset/asm3.c b/gcc/testsuite/g++.dg/charset/asm3.c new file mode 100644 index 00000000000..cd850c3e81f --- /dev/null +++ b/gcc/testsuite/g++.dg/charset/asm3.c @@ -0,0 +1,10 @@ +/* Simple asm test. */ +/* { dg-do compile } + { dg-require-iconv "IBM-1047" } + { dg-final { scan-assembler "foo" } } */ +extern int bar; + +int main (void) +{ + asm ("foo %0" : "=r" (bar)); +} diff --git a/gcc/testsuite/g++.dg/charset/asm4.c b/gcc/testsuite/g++.dg/charset/asm4.c new file mode 100644 index 00000000000..fa93f40fdaf --- /dev/null +++ b/gcc/testsuite/g++.dg/charset/asm4.c @@ -0,0 +1,8 @@ +/* Test for string translation. */ +/* { dg-do compile } + { dg-require-iconv "IBM-1047" } + { dg-final { scan-assembler-not "translate" } } */ +void foo (void) +{ + asm ("xx" : : "r"("translate") : "cc"); +} diff --git a/gcc/testsuite/g++.dg/charset/attribute1.c b/gcc/testsuite/g++.dg/charset/attribute1.c new file mode 100644 index 00000000000..993c7934c80 --- /dev/null +++ b/gcc/testsuite/g++.dg/charset/attribute1.c @@ -0,0 +1,10 @@ +/* Test for attribute non-translation. */ +/* { dg-do compile } + { dg-require-iconv "IBM-1047" } + { dg-final { scan-assembler "foo" } } */ +int walrus __attribute__ ((section (".foo"))); + +int main (void) +{ + return 0; +} diff --git a/gcc/testsuite/g++.dg/charset/attribute2.c b/gcc/testsuite/g++.dg/charset/attribute2.c new file mode 100644 index 00000000000..3cb766aa63a --- /dev/null +++ b/gcc/testsuite/g++.dg/charset/attribute2.c @@ -0,0 +1,8 @@ +/* Test to make sure that invalid attributes aren't translated. + If error recovery is ever testable then "foobar" should be + translated. */ +/* { dg-do compile } + { dg-require-iconv "IBM-1047" } +*/ +int foo __attribute__ ((walrus)); /* { dg-error "walrus" "ignored" } */ +char x[] = "foobar"; diff --git a/gcc/testsuite/g++.dg/charset/charset.exp b/gcc/testsuite/g++.dg/charset/charset.exp new file mode 100644 index 00000000000..096dc3ec2ea --- /dev/null +++ b/gcc/testsuite/g++.dg/charset/charset.exp @@ -0,0 +1,44 @@ +# Copyright (C) 2004 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# GCC testsuite that uses the 'dg.exp' driver. + +# There's a bunch of headers we need. +if [is_remote host] { + foreach header [glob -nocomplain $srcdir/$subdir/*.{h,def} ] { + remote_download host $header + } +} + +# Load support procs. +load_lib g++-dg.exp +load_lib target-supports.exp + +# If a testcase doesn't have special options, use these. +global DEFAULT_CFLAGS +if ![info exists DEFAULT_CFLAGS] then { + set DEFAULT_CFLAGS "-fexec-charset=IBM-1047" +} + +# Initialize `dg'. +dg-init + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.{c,S} ]] \ + "" $DEFAULT_CFLAGS + +# All done. +dg-finish diff --git a/gcc/testsuite/g++.dg/charset/extern1.cc b/gcc/testsuite/g++.dg/charset/extern1.cc new file mode 100644 index 00000000000..2a68ab7cf78 --- /dev/null +++ b/gcc/testsuite/g++.dg/charset/extern1.cc @@ -0,0 +1,15 @@ +/* Test extern statments not being translated. */ +/* { dg-do compile } + { dg-require-iconv "IBM-1047" } +*/ + +extern "C" { + + +int testbug (void) { + + return 0; + +} + +} //extern block diff --git a/gcc/testsuite/g++.dg/charset/extern2.cc b/gcc/testsuite/g++.dg/charset/extern2.cc new file mode 100644 index 00000000000..82157a6fea4 --- /dev/null +++ b/gcc/testsuite/g++.dg/charset/extern2.cc @@ -0,0 +1,5 @@ +/* Check that we push the declaration and then continue translation. */ +/* { dg-do compile } + { dg-require-iconv "IBM-1047" } + { dg-final { scan-assembler-not "foobar" } } */ +extern "C" { char *foo = "foobar"; } diff --git a/gcc/testsuite/g++.dg/charset/string.c b/gcc/testsuite/g++.dg/charset/string.c new file mode 100644 index 00000000000..375e28a2ed6 --- /dev/null +++ b/gcc/testsuite/g++.dg/charset/string.c @@ -0,0 +1,5 @@ +/* Simple character translation test. */ +/* { dg-do compile } + { dg-require-iconv "IBM-1047" } + { dg-final { scan-assembler-not "string foobar" } } */ +char *foo = "string foobar"; |