aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mmitchell@usa.net>1998-03-26 10:32:04 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>1998-03-26 10:32:04 +0000
commit49bf0d6f8011a1a6c7fddfba237dcf42855fa1a4 (patch)
tree5aa5decc690022faa268537bc6d97e6765299177
parent00459c3ad18896794b3f5939123e6f48b2a4579f (diff)
downloadgcc-49bf0d6f8011a1a6c7fddfba237dcf42855fa1a4.zip
gcc-49bf0d6f8011a1a6c7fddfba237dcf42855fa1a4.tar.gz
gcc-49bf0d6f8011a1a6c7fddfba237dcf42855fa1a4.tar.bz2
pt.c (convert_nontype_argument): STRIP_NOPS where appropriate.
Thu Mar 26 10:25:52 1998 Mark Mitchell <mmitchell@usa.net> * pt.c (convert_nontype_argument): STRIP_NOPS where appropriate. From-SVN: r18841
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/pt.c6
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/nontype3.C28
3 files changed, 36 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a7ad337..6ca4d8d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+Thu Mar 26 10:25:52 1998 Mark Mitchell <mmitchell@usa.net>
+
+ * pt.c (convert_nontype_argument): STRIP_NOPS where appropriate.
+
Thu Mar 26 10:24:05 1998 Mark Mitchell <mmitchell@usa.net>
* call.c (build_object_call): Complain about ambiguous operator(),
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 7685f48..3c72a44 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -1861,8 +1861,10 @@ convert_nontype_argument (type, expr)
|| expr_type == unknown_type_node)
{
tree referent;
+ tree e = expr;
+ STRIP_NOPS (e);
- if (TREE_CODE (expr) != ADDR_EXPR)
+ if (TREE_CODE (e) != ADDR_EXPR)
{
bad_argument:
cp_error ("`%E' is not a valid template argument", expr);
@@ -1874,7 +1876,7 @@ convert_nontype_argument (type, expr)
return NULL_TREE;
}
- referent = TREE_OPERAND (expr, 0);
+ referent = TREE_OPERAND (e, 0);
STRIP_NOPS (referent);
if (TREE_CODE (referent) == STRING_CST)
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/nontype3.C b/gcc/testsuite/g++.old-deja/g++.pt/nontype3.C
new file mode 100644
index 0000000..d6f3394
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/nontype3.C
@@ -0,0 +1,28 @@
+// Build don't link:
+
+enum E { e };
+
+template <const E* ep>
+struct S1
+{
+ static char* s;
+};
+
+template <int D>
+struct S2 {};
+
+template <>
+struct S2<1>
+{
+ static E es[1];
+};
+
+struct S3
+{
+ typedef S1<S2<1>::es> S3_Type;
+};
+
+E S2<1>::es[1] = {e};
+
+template <>
+char* S1<S2<1>::es>::s = "abc";