diff options
author | Paolo Carlini <paolo@gcc.gnu.org> | 2014-11-19 17:40:42 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2014-11-19 17:40:42 +0000 |
commit | 0162cb3bb7832f02c355503a04c3d443035bdda4 (patch) | |
tree | f2a5402e5f4c1077a8868f4c5bd65c707e2fc376 | |
parent | 538dd0b78f4b3998a1719a282811cb0caa1b035a (diff) | |
download | gcc-0162cb3bb7832f02c355503a04c3d443035bdda4.zip gcc-0162cb3bb7832f02c355503a04c3d443035bdda4.tar.gz gcc-0162cb3bb7832f02c355503a04c3d443035bdda4.tar.bz2 |
re PR c++/55425 (constexpr does not work in many situations (both built-in and user supplied literals))
/cp
2014-11-19 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/55425
* constexpr.c (constexpr_fn_retval): Accept __func__, __FUNCTION__,
and __PRETTY_FUNCTION__.
/testsuite
2014-11-19 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/55425
* g++.dg/cpp0x/constexpr-__func__.C
From-SVN: r217788
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/constexpr.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-__func__.C | 6 |
4 files changed, 29 insertions, 6 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5769d2a..13a9965 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-11-19 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/55425 + * constexpr.c (constexpr_fn_retval): Accept __func__, __FUNCTION__, + and __PRETTY_FUNCTION__. + 2014-11-18 Jason Merrill <jason@redhat.com> PR c++/63924 diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c index 1303fdc..d98d9b9 100644 --- a/gcc/cp/constexpr.c +++ b/gcc/cp/constexpr.c @@ -616,9 +616,14 @@ constexpr_fn_retval (tree body) return break_out_target_exprs (TREE_OPERAND (body, 0)); case DECL_EXPR: - if (TREE_CODE (DECL_EXPR_DECL (body)) == USING_DECL) - return NULL_TREE; - return error_mark_node; + { + tree decl = DECL_EXPR_DECL (body); + if (TREE_CODE (decl) == USING_DECL + /* Accept __func__, __FUNCTION__, and __PRETTY_FUNCTION__. */ + || DECL_ARTIFICIAL (decl)) + return NULL_TREE; + return error_mark_node; + } case CLEANUP_POINT_EXPR: return constexpr_fn_retval (TREE_OPERAND (body, 0)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 840a1c1..3a2dbf7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,11 +1,17 @@ +2014-11-19 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/55425 + * g++.dg/cpp0x/constexpr-__func__.C + 2014-11-19 Renlin Li <Renlin.Li@arm.com> - PR target/63424 + + PR target/63424 * gcc.target/aarch64/pr63424.c: New test. 2014-11-19 Renlin Li <Renlin.Li@arm.com> - PR middle-end/63762 - * gcc.dg/pr63762.c: New test. + PR middle-end/63762 + * gcc.dg/pr63762.c: New test. 2014-11-19 Marek Polacek <polacek@redhat.com> diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-__func__.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-__func__.C new file mode 100644 index 0000000..a71ed6c --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-__func__.C @@ -0,0 +1,6 @@ +// PR c++/55425 +// { dg-do compile { target c++11 } } + +constexpr const char* x() { return __func__; } +constexpr const char* y() { return __FUNCTION__; } +constexpr const char* z() { return __PRETTY_FUNCTION__; } |