diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1318c7cd2c228bdbdcb09cf34ec516f255b787e7..a55a3d92921322ed9b91fe956a866ee3d5eb9774 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-08-06  Mark Mitchell  <mark@codesourcery.com>
+
+	* config/arm/symbian.h (CC1_SPEC): Avoid passing duplicate options
+	to the compiler.  Use -fshort-wchar by default.
+
 2004-08-06  Pat Haugen  <pthaugen@us.ibm.com>
 
 	* params.def (PARAM_MIN_CROSSJUMP_INSNS): New.
diff --git a/gcc/config/arm/symbian.h b/gcc/config/arm/symbian.h
index 4ad4f46b74a47ee3debad66b0fbf31be3fe6fd71..c03b428e692a612aefc130b7110f65bcaf818415 100644
--- a/gcc/config/arm/symbian.h
+++ b/gcc/config/arm/symbian.h
@@ -34,8 +34,18 @@
 
    Make all symbols hidden by default.  Symbian OS expects that all
    exported symbols will be explicitly marked with
-   "__declspec(dllexport)".  */
-#define CC1_SPEC "-fno-builtin -fvisibility=hidden -fno-short-enums"
+   "__declspec(dllexport)".  
+
+   Enumeration types use 4 bytes, even if the enumerals are small,
+   unless explicitly overridden.
+
+   The wchar_t type is a 2-byte type, unless explicitly
+   overridden.  */
+#define CC1_SPEC						\
+  "%{!fbuiltin:%{!fno-builtin:-fno-builtin}} "			\
+  "%{!fvisibility=*:-fvisibility=hidden} "			\
+  "%{!fshort-enums:%{!fno-short-enums:-fno-short-enums}} "	\
+  "%{!fshort-wchar:%{!fno-short-wchar:-fshort-wchar}} "
 #define CC1PLUS_SPEC CC1_SPEC
 
 /* Symbian OS does not use crt0.o, unlike the generic unknown-elf
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f2d9a977be5d3778b94f2c0c6f992107f4ef4856..63ca7a78c50c575ef716240b3c622b90892bc694 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2004-08-06  Mark Mitchell  <mark@codesourcery.com>
+
+	* gcc.dg/symbian4.c: Expect a 2-byte wchar_t, not a 4-byte
+	wchar_t.
+	* gcc.dg/symbian5.c: Test -fno-short-wchar.
+
 2004-08-06  Paul Brook  <paul@codesourcery.com>
 
 	* gfortran.dg/ret_array_1.f90: New test.
diff --git a/gcc/testsuite/gcc.dg/symbian4.c b/gcc/testsuite/gcc.dg/symbian4.c
index 20585a713208c42afc5d6b142bb7860f2adf655a..aede7f5c66c6014693aa6665ce1d0cca5e3bba47 100644
--- a/gcc/testsuite/gcc.dg/symbian4.c
+++ b/gcc/testsuite/gcc.dg/symbian4.c
@@ -1,5 +1,5 @@
 /* { dg-do compile { target arm*-*-symbianelf* } } */
-/* Check that wchar_t is a 4-byte type.  */
+/* Check that wchar_t is a 2-byte type.  */
 
 extern int i[sizeof (L'a')];
-int i[4];
+int i[2];
diff --git a/gcc/testsuite/gcc.dg/symbian5.c b/gcc/testsuite/gcc.dg/symbian5.c
new file mode 100644
index 0000000000000000000000000000000000000000..0bde6b0cba3ca92f158a57b72d4dbc96ab3ed8db
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/symbian5.c
@@ -0,0 +1,8 @@
+/* { dg-do compile { target arm*-*-symbianelf* } } */
+/* { dg-options "-fno-short-wchar" } */
+/* Check that wchar_t is a 4-byte type when -fno-short-wchar is
+   used.  */
+
+extern int i[sizeof (L'a')];
+int i[4];
+