--- gcc/config/avr/avr.h.old 2011-05-01 14:39:19.000000000 +0400
+++ gcc/config/avr/avr.h 2011-05-01 16:33:36.000000000 +0400
@@ -175,6 +175,9 @@
#define SIZE_TYPE (INT_TYPE_SIZE == 8 ? "long unsigned int" : "unsigned int")
#define PTRDIFF_TYPE (INT_TYPE_SIZE == 8 ? "long int" :"int")
+#define CHAR16_TYPE (INT_TYPE_SIZE == 8 ? "long unsigned int" : "unsigned int")
+#define CHAR32_TYPE (INT_TYPE_SIZE == 8 ? "long long unsigned int" : "long unsigned int")
+
#define WCHAR_TYPE_SIZE 16
#define FIRST_PSEUDO_REGISTER 36
--- gcc/defaults.h.old 2011-05-01 14:39:19.000000000 +0400
+++ gcc/defaults.h 2011-05-01 16:33:36.000000000 +0400
@@ -526,17 +526,21 @@
affect C++ name mangling because in C++ these are distinct types
not typedefs. */
+#ifndef CHAR16_TYPE
#ifdef UINT_LEAST16_TYPE
#define CHAR16_TYPE UINT_LEAST16_TYPE
#else
#define CHAR16_TYPE "short unsigned int"
#endif
+#endif
+#ifndef CHAR32_TYPE
#ifdef UINT_LEAST32_TYPE
#define CHAR32_TYPE UINT_LEAST32_TYPE
#else
#define CHAR32_TYPE "unsigned int"
#endif
+#endif
#ifndef WCHAR_TYPE
#define WCHAR_TYPE "int"