From: Mark Mitchell Date: Fri, 27 Jun 2003 16:24:49 +0000 (+0000) Subject: re PR c++/11332 (Spurious error with casts in ?: expression) X-Git-Tag: releases/gcc-3.4.0~5414 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3a73bcc6870738923820d08fbcd62774d77b4936;p=thirdparty%2Fgcc.git re PR c++/11332 (Spurious error with casts in ?: expression) 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. From-SVN: r68580 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9a22768c1a1a..d0ecbdb7b725 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2003-06-26 Mark Mitchell + + PR c++/11332 + * typeck.c (build_static_cast): Avoid returning expressions with + reference type. + 2003-06-26 Nathan Sidwell * call.c (build_op_delete_call): Use strip_array_call. Correct diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index c84cc84f7dd1..6c17089192d1 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -4814,7 +4814,7 @@ build_static_cast (tree type, tree expr) t. */ result = perform_direct_initialization_if_possible (type, expr); if (result) - return result; + return convert_from_reference (result); /* [expr.static.cast] @@ -4848,8 +4848,9 @@ build_static_cast (tree type, tree expr) /* Convert from B* to D*. */ expr = build_base_path (MINUS_EXPR, build_address (expr), base, /*nonnull=*/false); - /* Convert the pointer to a reference. */ - return build_nop (type, expr); + /* Convert the pointer to a reference -- but then remember that + there are no expressions with reference type in C++. */ + return convert_from_reference (build_nop (type, expr)); } /* [expr.static.cast] diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 51bed0425d69..190e0ef20763 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-06-26 Mark Mitchell + + PR c++/11332 + * g++.dg/expr/static_cast2.C: New test. + 2003-06-26 Roger Sayle Jakub Jelinek diff --git a/gcc/testsuite/g++.dg/expr/static_cast2.C b/gcc/testsuite/g++.dg/expr/static_cast2.C new file mode 100644 index 000000000000..7b5d46dedf87 --- /dev/null +++ b/gcc/testsuite/g++.dg/expr/static_cast2.C @@ -0,0 +1,7 @@ +struct B {}; + +int main () { + B a; + (1 ? static_cast(a) : + *static_cast(&a)); +}