Bug 52038 - [4.7 regression] fortran bootstrap failure: no previous prototype for 'symbol_as'
Summary: [4.7 regression] fortran bootstrap failure: no previous prototype for 'symbol...
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.7.0
: P3 normal
Target Milestone: 4.7.0
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-01-29 11:12 UTC by Mikael Pettersson
Modified: 2012-01-30 09:28 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2012-01-29 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Mikael Pettersson 2012-01-29 11:12:12 UTC
Bootstrapping gcc-4.7-20120128 on i686-linux with fortran enabled and --disable-build-poststage1-with-cxx fails in stage 2 due to:

/mnt/scratch/objdir47/./prev-gcc/xgcc -B/mnt/scratch/objdir47/./prev-gcc/ -B/mnt/scratch/install47/i686-pc-linux-gnu/bin/ -B/mnt/scratch/install47/i686-pc-linux-gnu/bin/ -B/mnt/scratch/install47/i686-pc-linux-gnu/lib/ -isystem /mnt/scratch/install47/i686-pc-linux-gnu/include -isystem /mnt/scratch/install47/i686-pc-linux-gnu/sys-include    -c  -DIN_GCC_FRONTEND -g -O2 -gtoggle -DIN_GCC   -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wmissing-format-attribute -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -Werror -Wold-style-definition -Wc++-compat   -DHAVE_CONFIG_H -I. -Ifortran -I/mnt/scratch/gcc-4.7-20120128/gcc -I/mnt/scratch/gcc-4.7-20120128/gcc/fortran -I/mnt/scratch/gcc-4.7-20120128/gcc/../include -I/mnt/scratch/gcc-4.7-20120128/gcc/../libcpp/include -I/home/mikpe/pkgs/linux-x86/gmp-5.0.3/include -I/home/mikpe/pkgs/linux-x86/mpfr-3.1.0/include -I/home/mikpe/pkgs/linux-x86/mpc-0.9/include  -I/mnt/scratch/gcc-4.7-20120128/gcc/../libdecnumber -I/mnt/scratch/gcc-4.7-20120128/gcc/../libdecnumber/bid -I../libdecnumber    /mnt/scratch/gcc-4.7-20120128/gcc/fortran/resolve.c -o fortran/resolve.o
/mnt/scratch/gcc-4.7-20120128/gcc/fortran/resolve.c:1586:1: error: no previous prototype for 'symbol_as' [-Werror=missing-prototypes]
cc1: all warnings being treated as errors

make[3]: *** [fortran/resolve.o] Error 1

The previous weekly snapshot, 4.7-20120121, bootstrapped fine.

Looking at the diff the reason is obvious: a non-static definition of symbol_as() was added to resolve.c, but there's (a) no prototype for it, and (b) no uses either.

Disabling symbol_as() with #if 0 / #endif allowed the bootstrap to complete.
Comment 1 Tobias Burnus 2012-01-29 11:54:51 UTC
Added (accidentally) with Rev. 183620 of 2012-01-27. The function is part of the (uncommitted) patch for PR 50981.
Comment 2 Tobias Burnus 2012-01-29 11:56:23 UTC
Author: burnus
Date: Sun Jan 29 11:56:18 2012
New Revision: 183675

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=183675
Log:
2012-01-29  Tobias Burnus  <burnus@net-b.de>

        PR fortran/52038
        * resolve.c (symbol_as): Remove unused, accidentally
        added function.


Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/resolve.c
Comment 3 Mikael Pettersson 2012-01-29 11:59:26 UTC
Thanks, closing as fixed.
Comment 4 Tobias Burnus 2012-01-29 11:59:59 UTC
FIXED on the trunk (4.7). Thanks for the report!

(In reply to comment #1)
> Added (accidentally) with Rev. 183620 of 2012-01-27
(That's for PR 52016.)
Comment 5 Dominique d'Humieres 2012-01-29 12:04:35 UTC
> Added (accidentally) with Rev. 183620 of 2012-01-27. The function is part of
> the (uncommitted) patch for PR 50981.

AFAICT it was introduced to simplify constructs such as

+      if ((sym->as != NULL && sym->ts.type != BT_CLASS)
+	  || (sym->ts.type == BT_CLASS && sym->attr.class_ok
+	      && CLASS_DATA (sym)->as))

or

+	  e->rank = sym->ts.type == BT_CLASS
+		    ? CLASS_DATA (sym)->as->rank : sym->as->rank;

(see r183622) to

       if (symbol_as (sym) != NULL)
...
 	  gfc_array_spec *as = symbol_as (sym);
 
 	  e->rank = as->rank;

CCed Mikael Morin as a reminder to provide a prototype;-)