OSDN Git Service

* stor-layout.c (layout_type): Complain if an array's size can
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 5 Sep 2001 13:16:46 +0000 (13:16 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 5 Sep 2001 13:16:46 +0000 (13:16 +0000)
        not be represented in a size_t.

        * config/h8300/elf.h (ENDFILE_SPEC, STARTFILE_SPEC): Define.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45413 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/h8300/elf.h
gcc/stor-layout.c

index 1352561..bc21be5 100644 (file)
@@ -1,3 +1,11 @@
+2001-09-05  Jeffrey A Law  (law@cygnus.com)
+           Jason Merrill (jason@redhat.com)
+
+       * stor-layout.c (layout_type): Complain if an array's size can
+       not be represented in a size_t.
+
+       * config/h8300/elf.h (ENDFILE_SPEC, STARTFILE_SPEC): Define.
+
 2001-09-05  David Billinghurst <David.Billinghurst@riotinto.com>
 
        * gcc.c: (process_command) Add parentheses around assignment 
index 7cf0b64..20aa4cf 100644 (file)
 
 #include "elfos.h"
 
+
+#undef  ENDFILE_SPEC
+#define ENDFILE_SPEC "crtend.o%s %{pg:gcrtn.o%s}%{!pg:crtn.o%s}"
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC "%{!shared: \
+                        %{!symbolic: \
+                         %{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}}\
+                       %{pg:gcrti.o%s}%{!pg:crti.o%s} \
+                       crtbegin.o%s"
+
 /* Output at beginning/end of assembler file.  */
 #undef ASM_FILE_START
 #define ASM_FILE_START(FILE)                            \
index dfa4c10..3a4f998 100644 (file)
@@ -1442,6 +1442,19 @@ layout_type (type)
            if (TYPE_SIZE_UNIT (element) != 0 && ! integer_onep (element_size))
              TYPE_SIZE_UNIT (type)
                = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (element), length);
+
+           /* Complain if the user has requested an array too large to
+              fit in size_t.  */
+           if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
+               && TREE_OVERFLOW (TYPE_SIZE (type)))
+             {
+               error ("requested array too large for target");
+
+               /* Avoid crashing later.  */
+               TYPE_SIZE (type) = element_size;
+               if (TYPE_SIZE_UNIT (type))
+                 TYPE_SIZE_UNIT (type) = TYPE_SIZE_UNIT (element);
+             }
          }
 
        /* Now round the alignment and size,