diff options
author | Jason Merrill <jason@redhat.com> | 2009-10-08 12:09:22 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2009-10-08 12:09:22 -0400 |
commit | ccb05613cfd1d37ce6473244e28c56e75d1d0e66 (patch) | |
tree | 0b5aca150e69844718e291632a5913000e0f6868 /gcc/cp/semantics.c | |
parent | 6728ee79872ffd3dbcf858dab076c96c71ec95e5 (diff) | |
download | gcc-ccb05613cfd1d37ce6473244e28c56e75d1d0e66.zip gcc-ccb05613cfd1d37ce6473244e28c56e75d1d0e66.tar.gz gcc-ccb05613cfd1d37ce6473244e28c56e75d1d0e66.tar.bz2 |
re PR c++/37177 ([c++0x] ICE on decltype(rel_ops::operator><int>);)
PR c++/37177
* pt.c (resolve_nondeduced_context): New.
* cvt.c (convert_to_void): Call it.
* semantics.c (finish_decltype_type): Likewise.
* typeck.c (decay_conversion): Here too.
* pt.c (tsubst_decl): Don't clobber input_location.
Don't register a bad specialization.
From-SVN: r152564
Diffstat (limited to 'gcc/cp/semantics.c')
-rw-r--r-- | gcc/cp/semantics.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 391228b..6cf2220 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -4741,6 +4741,7 @@ finish_decltype_type (tree expr, bool id_expression_or_member_access_p) /* The type denoted by decltype(e) is defined as follows: */ + expr = resolve_nondeduced_context (expr); if (id_expression_or_member_access_p) { /* If e is an id-expression or a class member access (5.2.5 @@ -4766,9 +4767,13 @@ finish_decltype_type (tree expr, bool id_expression_or_member_access_p) /* See through BASELINK nodes to the underlying functions. */ expr = BASELINK_FUNCTIONS (expr); + if (TREE_CODE (expr) == TEMPLATE_ID_EXPR) + expr = TREE_OPERAND (expr, 0); + if (TREE_CODE (expr) == OVERLOAD) { - if (OVL_CHAIN (expr)) + if (OVL_CHAIN (expr) + || TREE_CODE (OVL_FUNCTION (expr)) == TEMPLATE_DECL) { error ("%qE refers to a set of overloaded functions", orig_expr); return error_mark_node; |