public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/7008: unexpected error message "var was not declared in this scope"
@ 2002-07-12 23:06 Rafal Dabrowa
  0 siblings, 0 replies; 5+ messages in thread
From: Rafal Dabrowa @ 2002-07-12 23:06 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/7008; it has been noted by GNATS.

From: "Rafal Dabrowa" <rdabrowa@poczta.onet.pl>
To: <lerdsuwa@gcc.gnu.org>, <gcc-bugs@gcc.gnu.org>,
	<gcc-prs@gcc.gnu.org>, <nobody@gcc.gnu.org>,
	<gcc-gnats@gcc.gnu.org>
Cc:  
Subject: Re: c++/7008: unexpected error message "var was not declared in this scope"
Date: Sat, 13 Jul 2002 08:12:10 +0200

 Gcc behaves inconsequently in this case. Consider the
 following code:
 
     void doit( int var )
     { struct st { char s[sizeof(var)]; } zz; }
     int main() { doit(3); }
 
 This code compiles fine, even that var is a function argument,
 not a static/global variable. Now, we convert this function to a
 template:
 
     template<class T> void doit( T var )
     { struct st { char s[sizeof(var)]; } zz; }
     int main() { doit(3); }
 
 Compiler complains in this case. Is it not strange ?
 It may be even worse. Consider we have a global
 varible named "var". In first case, compiler would
 take local variable. In second - global one. This
 inconsequence I treat as a compiler bug, which
 shall be corrected.
 
 Similar problem occurs when use constants.
 See code below. We have two functions with
 identical body, but the first one is an ordinary function,
 and the second one is a template. And compiler takes
 local N in first function, global N in second. This is not a
 correct behavior.
 -------------- code begin ---------------
 const int N = 500;
 
 void f(int var) {
     const int N = 5;
     struct { char str[N]; } zz;
     cout << "sizeof(zz) = " << sizeof(zz) << endl;
 }
 template <class T> void g(T var) {
     const int N = 5;
     struct { char str[N]; } zz;
     cout << "sizeof(zz) = " << sizeof(zz) << endl;
 }
 int main() { f(1); g(1); }
 -------------- code end ---------------
 
 With regards --
 
 Rafal Dabrowa
 
 ----- Original Message -----
 From: <lerdsuwa@gcc.gnu.org>
 To: <gcc-bugs@gcc.gnu.org>; <gcc-prs@gcc.gnu.org>; <nobody@gcc.gnu.org>;
 <rdabrowa@poczta.onet.pl>
 Sent: Thursday, July 11, 2002 4:39 PM
 Subject: Re: c++/7008: unexpected error message "var was not declared in
 this scope"
 
 
 > Synopsis: unexpected error message "var was not declared in this scope"
 >
 > State-Changed-From-To: open->closed
 > State-Changed-By: lerdsuwa
 > State-Changed-When: Thu Jul 11 07:39:20 2002
 > State-Changed-Why:
 >     Not a bug.  According to the standard, section 9.8p1:
 >
 >       Declarations in a local class can use only type names,
 >       static variables, extern variables and functions, and
 >       enumerators from the enclosing scope.
 >
 >     The 'var' which is a function parameter is not allowed.
 >
 >
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&p
 r=7008
 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: c++/7008: unexpected error message "var was not declared in this scope"
@ 2002-07-14  4:56 Rafal Dabrowa
  0 siblings, 0 replies; 5+ messages in thread
From: Rafal Dabrowa @ 2002-07-14  4:56 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/7008; it has been noted by GNATS.

From: "Rafal Dabrowa" <rdabrowa@poczta.onet.pl>
To: <rdabrowa@poczta.onet.pl>, <gcc-gnats@gcc.gnu.org>,
	<gcc-prs@gcc.gnu.org>, <gcc-bugs@gcc.gnu.org>, <nobody@gcc.gnu.org>
Cc:  
Subject: Re: c++/7008: unexpected error message "var was not declared in this scope"
Date: Sun, 14 Jul 2002 13:58:10 +0200

 I have a few additional remarks about compiler behavior.
 
     Compiler should not take a global variable because
 use of local one is forbidden. This is unclear and confusing
 people. Compiler should put an error message instead.
 Consider the following code:
 
      const int N = 500;
 
      void f(int var) {
          const int N = 5;
          struct { char str[N]; } z1;    // error: use of local variable is
 forbidden here
          struct { char str[::N]; } z2;    // global variable used, ok
      }
 
 Also, error text: "var was not declared in this scope" is
 unclear, too. In my opinion, better is such like "use of local variable
 is not allowed here".
 
 Rafal Dabrowa
 
 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: c++/7008: unexpected error message "var was not declared in this scope"
@ 2002-07-13  2:41 lerdsuwa
  0 siblings, 0 replies; 5+ messages in thread
From: lerdsuwa @ 2002-07-13  2:41 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, nobody, rdabrowa

Synopsis: unexpected error message "var was not declared in this scope"

State-Changed-From-To: closed->analyzed
State-Changed-By: lerdsuwa
State-Changed-When: Sat Jul 13 02:41:36 2002
State-Changed-Why:
    PR reopened due to inconsistent behavior between ordinary
    and template functions:
     const int N = 500;
     
     void f(int var) {
         const int N = 5;
         struct { char str[N]; } zz;
         cout << "sizeof(zz) = " << sizeof(zz) << endl;
     }
     template <class T> void g(T var) {
         const int N = 5;
         struct { char str[N]; } zz;
         cout << "sizeof(zz) = " << sizeof(zz) << endl;
     }
     int main() { f(1); g(1); }
     

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7008


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: c++/7008: unexpected error message "var was not declared in this scope"
@ 2002-07-11  7:39 lerdsuwa
  0 siblings, 0 replies; 5+ messages in thread
From: lerdsuwa @ 2002-07-11  7:39 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, nobody, rdabrowa

Synopsis: unexpected error message "var was not declared in this scope"

State-Changed-From-To: open->closed
State-Changed-By: lerdsuwa
State-Changed-When: Thu Jul 11 07:39:20 2002
State-Changed-Why:
    Not a bug.  According to the standard, section 9.8p1:
    
      Declarations in a local class can use only type names,
      static variables, extern variables and functions, and
      enumerators from the enclosing scope.
    
    The 'var' which is a function parameter is not allowed.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7008


^ permalink raw reply	[flat|nested] 5+ messages in thread

* c++/7008: unexpected error message "var was not declared in this scope"
@ 2002-06-12 13:16 rdabrowa
  0 siblings, 0 replies; 5+ messages in thread
From: rdabrowa @ 2002-06-12 13:16 UTC (permalink / raw)
  To: gcc-gnats


>Number:         7008
>Category:       c++
>Synopsis:       unexpected error message "var was not declared in this scope"
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          rejects-legal
>Submitter-Id:   net
>Arrival-Date:   Wed Jun 12 13:16:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Rafal Dabrowa
>Release:        gcc-3.1
>Organization:
>Environment:

>Description:
Below is simple program, which demonstrates problem.
During compile, unexpected error message appears:

bug1.cc: In instantiation of `doit(T) [with T = int]::st':
bug1.cc:5:   instantiated from `void doit(T) [with T = int]'
bug1.cc:10:   instantiated from here
bug1.cc:5: `var' was not declared in this scope

This bug occurs in gcc-2.96 and some earlier versions, too.
(I have it submitted to RedHat bugzilla as a gcc-2.96 bug)
>How-To-Repeat:
Please compile code specified below using g++:

template <class T> void doit( T var )
{
    struct st { int i; char s[sizeof(var)]; } zz;
}

int main() { doit(3); }
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2002-07-14 11:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-07-12 23:06 c++/7008: unexpected error message "var was not declared in this scope" Rafal Dabrowa
  -- strict thread matches above, loose matches on Subject: below --
2002-07-14  4:56 Rafal Dabrowa
2002-07-13  2:41 lerdsuwa
2002-07-11  7:39 lerdsuwa
2002-06-12 13:16 rdabrowa

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).