[Bug target/41557] gcc.exe: Internal error: (null) (program cc1plus)
Alexander Marquardt
alexander.marquardt@dataface.de
Sun Jan 13 20:25:00 GMT 2013
After spending hours to find the cause of the segmentation fault i found out
that the problem coausing source is the gcc/config/i386/djgpp-stdint.h wich
uses the identifier "signed" to declare signed types.
Reading the top of the c_common_nodes_and_builins() function in c-common.c it
tells:
/* `signed' is the same as `int'. FIXME: the declarations of "signed",
"unsigned long", "long long unsigned" and "unsigned short" were in C++
but not C. Are the conditionals here needed? */
So there is no need to declare "signed [char|int|long]" when char, int and long
are already signed types. The identifier_global_value() function returns 0 if
the type name is not registered causing a segmentation fault in TREE_TYPE()
when calling it with nil.
Solution:
remove all keywords "signed" in djgpp-stdint.h
I've provided a patch for gcc-4.7.2 wich will probalby apply on other versions
too.
------------------------[djcpp-4.7.2.patch]-----------------------------
--- a/gcc/config/i386/djgpp-stdint.h 2013-01-13 15:06:51.567593797 +0100
+++ b/gcc/config/i386/djgpp-stdint.h 2013-01-13 15:31:24.614591760 +0100
@@ -21,10 +21,10 @@
/* Exact-width integer types */
-#define INT8_TYPE "signed char"
-#define INT16_TYPE "signed short int"
-#define INT32_TYPE "signed long int"
-#define INT64_TYPE "signed long long int"
+#define INT8_TYPE "char"
+#define INT16_TYPE "short int"
+#define INT32_TYPE "long int"
+#define INT64_TYPE "long long int"
#define UINT8_TYPE "unsigned char"
#define UINT16_TYPE "short unsigned int"
@@ -33,10 +33,10 @@
/* Minimum-width integer types */
-#define INT_LEAST8_TYPE "signed char"
-#define INT_LEAST16_TYPE "signed short int"
-#define INT_LEAST32_TYPE "signed int"
-#define INT_LEAST64_TYPE "signed long long int"
+#define INT_LEAST8_TYPE "char"
+#define INT_LEAST16_TYPE "short int"
+#define INT_LEAST32_TYPE "int"
+#define INT_LEAST64_TYPE "long long int"
#define UINT_LEAST8_TYPE "unsigned char"
#define UINT_LEAST16_TYPE "short unsigned int"
@@ -45,10 +45,10 @@
/* Fastest minimum-width integer types */
-#define INT_FAST8_TYPE "signed char"
-#define INT_FAST16_TYPE "signed int"
-#define INT_FAST32_TYPE "signed int"
-#define INT_FAST64_TYPE "long long signed int"
+#define INT_FAST8_TYPE "char"
+#define INT_FAST16_TYPE "int"
+#define INT_FAST32_TYPE "int"
+#define INT_FAST64_TYPE "long int"
#define UINT_FAST8_TYPE "unsigned char"
#define UINT_FAST16_TYPE "unsigned int"
----------------------------[END OF PATCH]-------------------------
More information about the Gcc-bugs
mailing list