Bug 11332 - [3.3?/3.4 regression] Spurious error with casts in ?: expression
Summary: [3.3?/3.4 regression] Spurious error with casts in ?: expression
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 3.3.1
: P1 critical
Target Milestone: 3.3.1
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2003-06-26 16:45 UTC by Wolfgang Bangerth
Modified: 2005-07-23 22:49 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Wolfgang Bangerth 2003-06-26 16:45:21 UTC
Mark, I think this is due to your fixes for 10931/10990/... yesterday:
this doesn't compile any more though I think it should
---------------------------
struct B {};

int main () {
  B a;
  (i ? static_cast<B&>(a) :
       *static_cast<B*>(&a));
}
----------------------------

tmp/gg> ~/tmp/build-gcc/gcc-install/bin/c++ -c x.cc
x.cc: In function `int main()':
x.cc:5: error: `i' undeclared (first use this function)
x.cc:5: error: (Each undeclared identifier is reported only once for each
   function it appears in.)

I don't have a recent enough 3.3 branch, but if your patch went to
the branch as well, it should be investigated for 3.3.1 as well. The error
above is from mainline.

W.
Comment 1 Wolfgang Bangerth 2003-06-26 16:46:44 UTC
Forget the code and the error message, of course. On shouldn't change it
in the last minute. Here's the correct code and message:

------------------------------------
struct B {};

int main () {
  B a;
  (1 ? static_cast<B&>(a) :
       *static_cast<B*>(&a));
}
-------------------------------------

tmp/gg> ~/tmp/build-gcc/gcc-install/bin/c++ -c x.cc
x.cc: In function `int main()':
x.cc:6: error: operands to ?: have different types
Comment 2 Mark Mitchell 2003-06-26 22:47:27 UTC
Subject: Re:  [3.3?/3.4 regression] Spurious error with casts
	in ?: expression

On Thu, 2003-06-26 at 09:46, bangerth at dealii dot org wrote:
> PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
> 
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11332
> 
> 
> 
> ------- Additional Comments From bangerth at dealii dot org  2003-06-26 16:46 -------
> Forget the code and the error message, of course. On shouldn't change it
> in the last minute. Here's the correct code and message:

I think I know what's wrong, and I'll get it fixed ASAP.

Thanks,

Comment 3 GCC Commits 2003-06-27 16:24:52 UTC
Subject: Bug 11332

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	mmitchel@gcc.gnu.org	2003-06-27 16:24:50

Modified files:
	gcc/cp         : typeck.c ChangeLog 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/g++.dg/expr: static_cast2.C 

Log message:
	PR c++/11332
	* typeck.c (build_static_cast): Avoid returning expressions with
	reference type.
	
	PR c++/11332
	* g++.dg/expr/static_cast2.C: New test.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/typeck.c.diff?cvsroot=gcc&r1=1.468&r2=1.469
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.3459&r2=1.3460
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/expr/static_cast2.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.2807&r2=1.2808

Comment 4 GCC Commits 2003-06-27 16:27:11 UTC
Subject: Bug 11332

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-3_3-branch
Changes by:	mmitchel@gcc.gnu.org	2003-06-27 16:27:07

Modified files:
	gcc/cp         : typeck.c ChangeLog 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/g++.dg/expr: static_cast2.C 

Log message:
	PR c++/11332
	* typeck.c (build_static_cast): Avoid returning expressions with
	reference type.
	
	PR c++/11332
	* g++.dg/expr/static_cast2.C: New test.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/typeck.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.436.2.9&r2=1.436.2.10
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.3076.2.164&r2=1.3076.2.165
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/expr/static_cast2.C.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=NONE&r2=1.1.2.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.2261.2.203&r2=1.2261.2.204

Comment 5 Mark Mitchell 2003-06-27 16:46:46 UTC
Fixed in GCC 3.3.1, GCC 3.4 with attached patches.