From 49bf0d6f8011a1a6c7fddfba237dcf42855fa1a4 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Thu, 26 Mar 1998 10:32:04 +0000 Subject: [PATCH] pt.c (convert_nontype_argument): STRIP_NOPS where appropriate. Thu Mar 26 10:25:52 1998 Mark Mitchell * pt.c (convert_nontype_argument): STRIP_NOPS where appropriate. From-SVN: r18841 --- gcc/cp/ChangeLog | 4 +++ gcc/cp/pt.c | 6 +++-- gcc/testsuite/g++.old-deja/g++.pt/nontype3.C | 28 ++++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/nontype3.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a7ad3374308..6ca4d8d8f4d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +Thu Mar 26 10:25:52 1998 Mark Mitchell + + * pt.c (convert_nontype_argument): STRIP_NOPS where appropriate. + Thu Mar 26 10:24:05 1998 Mark Mitchell * call.c (build_object_call): Complain about ambiguous operator(), diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 7685f48365e..3c72a449b5f 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 00000000000..d6f339453ad --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/nontype3.C @@ -0,0 +1,28 @@ +// Build don't link: + +enum E { e }; + +template +struct S1 +{ + static char* s; +}; + +template +struct S2 {}; + +template <> +struct S2<1> +{ + static E es[1]; +}; + +struct S3 +{ + typedef S1::es> S3_Type; +}; + +E S2<1>::es[1] = {e}; + +template <> +char* S1::es>::s = "abc"; -- 2.30.2