stor-layout.c (layout_type): Compute TYPE_SIZE_UNIT correctly for arrays of bits.
authorDave Brolley <brolley@cygnus.com>
Thu, 20 Aug 1998 10:29:22 +0000 (10:29 +0000)
committerDave Brolley <brolley@gcc.gnu.org>
Thu, 20 Aug 1998 10:29:22 +0000 (06:29 -0400)
Thu Aug 20 13:15:11 1998  Dave Brolley  <brolley@cygnus.com>
* stor-layout.c (layout_type): Compute TYPE_SIZE_UNIT correctly for
arrays of bits.
* cpplib.c (cpp_define): Handle macros with parameters.

From-SVN: r21872

gcc/ChangeLog
gcc/cpplib.c
gcc/stor-layout.c

index 4c159968997849065dfbdf1f3614c8b3b042b0ff..16292f4ea3aa78c6acc35b6b6effbc411bf5c288 100644 (file)
@@ -1,3 +1,9 @@
+Thu Aug 20 13:15:11 1998  Dave Brolley  <brolley@cygnus.com>
+
+       * stor-layout.c (layout_type): Compute TYPE_SIZE_UNIT correctly for
+       arrays of bits.
+       * cpplib.c (cpp_define): Handle macros with parameters.
+
 Wed Aug 19 21:33:19 1998  David Edelsohn  <edelsohn@mhpcc.edu>
 
        * rs6000.c (rs6000_output_load_toc_table): Use ld for 64-bit.
index 5b1034935ffe70eee50348ff8d92e88bf1275017..b9ded523c1d022a92b81465fd547074cda852a21 100644 (file)
@@ -534,6 +534,12 @@ cpp_define (pfile, str)
     }
   while (is_idchar[*++p])
     ;
+  if (*p == '(') {
+    while (is_idchar[*++p] || *p == ',' || is_hor_space[*p])
+      ;
+    if (*p++ != ')')
+      p = (U_CHAR *) str;                      /* Error */
+  }
   if (*p == 0)
     {
       buf = (U_CHAR *) alloca (p - buf + 4);
index b44a411e9da5b9c56021dd49ac3249b4f8f7de8d..3c7cf23d7d37f3c59301ae34649fe874947a58c8 100644 (file)
@@ -834,8 +834,12 @@ layout_type (type)
               size directly, rather than do some division thing below.
               This optimization helps Fortran assumed-size arrays
               (where the size of the array is determined at runtime)
-              substantially.  */
-           if (TYPE_SIZE_UNIT (element) != 0)
+              substantially.
+              Note that we can't do this in the case where the size of
+              the elements is one bit since TYPE_SIZE_UNIT cannot be
+              set correctly in that case.  */
+           if (TYPE_SIZE_UNIT (element) != 0
+               && element_size != integer_one_node)
              {
                TYPE_SIZE_UNIT (type)
                  = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (element), length);