aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>1999-07-23 04:32:17 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>1999-07-23 04:32:17 +0000
commit638dd8fc323c9eec40f19244afbd965173bf35eb (patch)
treec46a7687f3165965715fa53c9c0afec17af1d630 /gcc
parent19699da4045196c225bcb3a9cac80270617a64e7 (diff)
downloadgcc-638dd8fc323c9eec40f19244afbd965173bf35eb.zip
gcc-638dd8fc323c9eec40f19244afbd965173bf35eb.tar.gz
gcc-638dd8fc323c9eec40f19244afbd965173bf35eb.tar.bz2
pt.c (convert_nontype_argument): Don't call decl_constant_value if we're converting to a reference type.
* pt.c (convert_nontype_argument): Don't call decl_constant_value if we're converting to a reference type. From-SVN: r28224
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/pt.c9
-rw-r--r--gcc/testsuite/g++.old-deja/g++.oliva/template4.C2
3 files changed, 10 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c111a86..7844092 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
1999-07-22 Mark Mitchell <mark@codesourcery.com>
+ * pt.c (convert_nontype_argument): Don't call decl_constant_value
+ if we're converting to a reference type.
+
* call.c (NEED_TEMPORARY_P): New macro.
(standard_conversion): Set it, for derived-to-base conversions.
(reference_related_p): New function.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 0744812..06b6c13 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -2681,9 +2681,12 @@ convert_nontype_argument (type, expr)
--a pointer to member expressed as described in _expr.unary.op_. */
- /* An integral constant-expression can include const variables
- or enumerators. */
- if (INTEGRAL_TYPE_P (expr_type) && TREE_READONLY_DECL_P (expr))
+ /* An integral constant-expression can include const variables or
+ enumerators. Simplify things by folding them to their values,
+ unless we're about to bind the declaration to a reference
+ parameter. */
+ if (INTEGRAL_TYPE_P (expr_type) && TREE_READONLY_DECL_P (expr)
+ && TREE_CODE (type) != REFERENCE_TYPE)
expr = decl_constant_value (expr);
if (is_overloaded_fn (expr))
diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/template4.C b/gcc/testsuite/g++.old-deja/g++.oliva/template4.C
index 5d7f7a6..4c2afc7 100644
--- a/gcc/testsuite/g++.old-deja/g++.oliva/template4.C
+++ b/gcc/testsuite/g++.old-deja/g++.oliva/template4.C
@@ -17,4 +17,4 @@ extern const int c;
X<c> z; // ok, c has external linkage
extern const int c = 3;
-X<c> z_; // gets bogus error - using c as constant - XFAIL *-*-*
+X<c> z_; // gets bogus error - using c as constant