aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPatrick Palka <ppalka@redhat.com>2023-05-07 12:10:39 -0400
committerPatrick Palka <ppalka@redhat.com>2023-05-07 12:10:39 -0400
commitf9777f1b56f2794ff6cbbbd69ca588747d8ccf67 (patch)
tree0eec6b90857be90a2fd83e1da7700fc47497edb4 /gcc
parentb81785eacef2a28e17e17141fcd334f51640feec (diff)
downloadgcc-f9777f1b56f2794ff6cbbbd69ca588747d8ccf67.zip
gcc-f9777f1b56f2794ff6cbbbd69ca588747d8ccf67.tar.gz
gcc-f9777f1b56f2794ff6cbbbd69ca588747d8ccf67.tar.bz2
c++: fix pretty printing of 'alignof' vs '__alignof__' [PR85979]
PR c++/85979 gcc/cp/ChangeLog: * cxx-pretty-print.cc (cxx_pretty_printer::unary_expression) <case ALIGNOF_EXPR>: Consider ALIGNOF_EXPR_STD_P. * error.cc (dump_expr) <case ALIGNOF_EXPR>: Likewise. gcc/testsuite/ChangeLog: * g++.dg/diagnostic/alignof4.C: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/cxx-pretty-print.cc7
-rw-r--r--gcc/cp/error.cc7
-rw-r--r--gcc/testsuite/g++.dg/diagnostic/alignof4.C21
3 files changed, 30 insertions, 5 deletions
diff --git a/gcc/cp/cxx-pretty-print.cc b/gcc/cp/cxx-pretty-print.cc
index 950295e..4b547c7 100644
--- a/gcc/cp/cxx-pretty-print.cc
+++ b/gcc/cp/cxx-pretty-print.cc
@@ -844,7 +844,12 @@ cxx_pretty_printer::unary_expression (tree t)
/* Fall through */
case ALIGNOF_EXPR:
- pp_cxx_ws_string (this, code == SIZEOF_EXPR ? "sizeof" : "__alignof__");
+ if (code == SIZEOF_EXPR)
+ pp_cxx_ws_string (this, "sizeof");
+ else if (ALIGNOF_EXPR_STD_P (t))
+ pp_cxx_ws_string (this, "alignof");
+ else
+ pp_cxx_ws_string (this, "__alignof__");
pp_cxx_whitespace (this);
if (TREE_CODE (t) == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (t))
{
diff --git a/gcc/cp/error.cc b/gcc/cp/error.cc
index 1cfa4f1..9b967ce 100644
--- a/gcc/cp/error.cc
+++ b/gcc/cp/error.cc
@@ -2840,11 +2840,10 @@ dump_expr (cxx_pretty_printer *pp, tree t, int flags)
case ALIGNOF_EXPR:
if (TREE_CODE (t) == SIZEOF_EXPR)
pp_cxx_ws_string (pp, "sizeof");
+ else if (ALIGNOF_EXPR_STD_P (t))
+ pp_cxx_ws_string (pp, "alignof");
else
- {
- gcc_assert (TREE_CODE (t) == ALIGNOF_EXPR);
- pp_cxx_ws_string (pp, "__alignof__");
- }
+ pp_cxx_ws_string (pp, "__alignof__");
op = TREE_OPERAND (t, 0);
if (PACK_EXPANSION_P (op))
{
diff --git a/gcc/testsuite/g++.dg/diagnostic/alignof4.C b/gcc/testsuite/g++.dg/diagnostic/alignof4.C
new file mode 100644
index 0000000..f6fc5c3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/diagnostic/alignof4.C
@@ -0,0 +1,21 @@
+// PR c++/85979
+// { dg-do compile { target c++11 } }
+
+template<int N> struct A { };
+
+template<class T>
+void f(A<alignof(T)>) { }
+
+#if __cpp_concepts
+template<class T>
+void g() requires (alignof(T) == 0);
+#endif
+
+int main() {
+ f<int>(); // { dg-error "no match" }
+#if __cpp_concepts
+ g<int>(); // { dg-error "no match" "" { target c++20 } }
+#endif
+}
+
+// { dg-bogus "__alignof__" "" { target *-*-* } 0 }