aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2023-03-13 14:06:11 -0400
committerJason Merrill <jason@redhat.com>2023-03-13 16:15:35 -0400
commit538a0d0f29b12cff05681b6de2e0a3d7b33f3ef0 (patch)
treeb625ca1e82e27ad8a617e068ed54c2f5ec0fed92
parent8e9c65d34c799c9dadea1e2e60b4180f26262829 (diff)
downloadgcc-538a0d0f29b12cff05681b6de2e0a3d7b33f3ef0.zip
gcc-538a0d0f29b12cff05681b6de2e0a3d7b33f3ef0.tar.gz
gcc-538a0d0f29b12cff05681b6de2e0a3d7b33f3ef0.tar.bz2
c++: handle _FloatNN redeclaration like bool [PR107128]
It's been inconvenient to compile testcases preprocessed with GCC 12 or earlier because they break on typedef __float128 _Float128; We already had code for handling this with bool and wchar_t, it just needs to be extended to _FloatNN as well. PR c++/107128 gcc/cp/ChangeLog: * parser.cc (cp_parser_set_decl_spec_type): Use redefined_builtin_type for extended_float_type_p. gcc/testsuite/ChangeLog: * g++.dg/warn/pragma-system_header6.h: New test. * g++.dg/warn/pragma-system_header6.C: New test.
-rw-r--r--gcc/cp/parser.cc2
-rw-r--r--gcc/testsuite/g++.dg/warn/pragma-system_header6.C1
-rw-r--r--gcc/testsuite/g++.dg/warn/pragma-system_header6.h3
3 files changed, 6 insertions, 0 deletions
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
index 5330419..a277003 100644
--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -33452,10 +33452,12 @@ cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
C++-safe. */
if (decl_spec_seq_has_spec_p (decl_specs, ds_typedef)
&& !type_definition_p
+ && TYPE_P (type_spec)
&& (type_spec == boolean_type_node
|| type_spec == char8_type_node
|| type_spec == char16_type_node
|| type_spec == char32_type_node
+ || extended_float_type_p (type_spec)
|| type_spec == wchar_type_node)
&& (decl_specs->type
|| decl_spec_seq_has_spec_p (decl_specs, ds_long)
diff --git a/gcc/testsuite/g++.dg/warn/pragma-system_header6.C b/gcc/testsuite/g++.dg/warn/pragma-system_header6.C
new file mode 100644
index 0000000..924e452
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/pragma-system_header6.C
@@ -0,0 +1 @@
+#include "pragma-system_header6.h"
diff --git a/gcc/testsuite/g++.dg/warn/pragma-system_header6.h b/gcc/testsuite/g++.dg/warn/pragma-system_header6.h
new file mode 100644
index 0000000..989ccd8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/pragma-system_header6.h
@@ -0,0 +1,3 @@
+#pragma GCC system_header
+
+typedef float _Float32;