woods@hao.UUCP (Greg Woods) (03/07/85)
I've run across what appears to be yet another bug in the 4.2BSD F77 compiler, and I'm curious to see if the anyone else out there has seen this. The code in question looks like: dimension buf(102,51),nbuf(5) nbuf(2)=102 nbuf(3)=51 c c code here initializes the buf array c write(6,*) buf call sub(buf,nbuf) stop end subroutine sub(buf,nbuf) dimension nbuf(5) dimension buf(nbuf(2),nbuf(3)) write(6,*) buf return end The problem comes in when I attempt to use the elements of a dummy array as variable dimension declarators for another dummy array. I did not find anything in the standard which prohibits this; did I miss something? On our VAX 11/750, this produces incorrect code, as the wrong values are written inside the subroutine. The funny thing is, if I compile the subroutine -g, it works properly. Questions: Why does it matter if I compile it -g? I was under the impression that the generated code was the same except for the added symbol table. Second question: is this even legal according to the standard? Any comments welcome. --Greg -- {ucbvax!hplabs | allegra!nbires | decvax!noao | harpo!seismo | ihnp4!noao} !hao!woods CSNET: woods@NCAR ARPA: woods%ncar@CSNET-RELAY "Please don't dominate the rap Jack, if you got nothing new to say..."
sjc@angband.UUCP (Steve Correll) (03/10/85)
> subroutine sub(buf,nbuf) > dimension nbuf(5) > dimension buf(nbuf(2),nbuf(3)) > write(6,*) buf > return > end > > Second question: is this even legal according to the standard? It may be illegal. Section 5.1.1.1, "Form of a Dimension Declarator", page 5-2 of ANSI X3.9-1978 says: "A dimension bound expression must not contain a function or array element reference." Of course, one would hope the compiler would complain rather than emitting bad code. -- --Steve Correll sjc@s1-b.ARPA, ...!decvax!decwrl!mordor!sjc, or ...!ucbvax!dual!mordor!sjc