aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo@gcc.gnu.org>2014-11-19 17:40:42 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2014-11-19 17:40:42 +0000
commit0162cb3bb7832f02c355503a04c3d443035bdda4 (patch)
treef2a5402e5f4c1077a8868f4c5bd65c707e2fc376 /gcc
parent538dd0b78f4b3998a1719a282811cb0caa1b035a (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/constexpr.c11
-rw-r--r--gcc/testsuite/ChangeLog12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-__func__.C6
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__; }