aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2017-04-20 19:02:05 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2017-04-20 19:02:05 +0100
commit34d57a10c49908f4f7cec83790d56fb3d51f3ccc (patch)
tree8c4cdf8a858e2c294dc570a7077391e44a7aefa4 /gcc
parent2260d19d4be6218c0dfffe6f87fc7665a09d5ba5 (diff)
downloadgcc-34d57a10c49908f4f7cec83790d56fb3d51f3ccc.zip
gcc-34d57a10c49908f4f7cec83790d56fb3d51f3ccc.tar.gz
gcc-34d57a10c49908f4f7cec83790d56fb3d51f3ccc.tar.bz2
PR c++/80473 allow suppressing notes about over-aligned new
gcc/cp: PR c++/80473 * init.c (build_new_1): Suppress notes about over-aligned new when the warning is suppressed. gcc/testsuite: PR c++/80473 * g++.dg/diagnostic/pr80473.C: New test. From-SVN: r247033
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/init.c16
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/diagnostic/pr80473.C16
4 files changed, 36 insertions, 7 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index d90c298..5e14c41 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2017-04-20 Jonathan Wakely <jwakely@redhat.com>
+
+ PR c++/80473
+ * init.c (build_new_1): Suppress notes about over-aligned new when
+ the warning is suppressed.
+
2017-04-20 Volker Reichelt <v.reichelt@netcologne.de>
* parser.c (cp_parser_member_declaration): Add warning with fixit
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index bfa9020..e9c39ff 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -3126,13 +3126,15 @@ build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts,
|| CP_DECL_CONTEXT (alloc_fn) == global_namespace)
&& !aligned_allocation_fn_p (alloc_fn))
{
- warning (OPT_Waligned_new_, "%<new%> of type %qT with extended "
- "alignment %d", elt_type, TYPE_ALIGN_UNIT (elt_type));
- inform (input_location, "uses %qD, which does not have an alignment "
- "parameter", alloc_fn);
- if (!aligned_new_threshold)
- inform (input_location, "use %<-faligned-new%> to enable C++17 "
- "over-aligned new support");
+ if (warning (OPT_Waligned_new_, "%<new%> of type %qT with extended "
+ "alignment %d", elt_type, TYPE_ALIGN_UNIT (elt_type)))
+ {
+ inform (input_location, "uses %qD, which does not have an alignment "
+ "parameter", alloc_fn);
+ if (!aligned_new_threshold)
+ inform (input_location, "use %<-faligned-new%> to enable C++17 "
+ "over-aligned new support");
+ }
}
/* If we found a simple case of PLACEMENT_EXPR above, then copy it
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a91c9891..2db3322 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-04-20 Jonathan Wakely <jwakely@redhat.com>
+
+ PR c++/80473
+ * g++.dg/diagnostic/pr80473.C: New test.
+
2017-04-20 Volker Reichelt <v.reichelt@netcologne.de>
* g++.dg/warn/Wextra-semi.C: New test.
diff --git a/gcc/testsuite/g++.dg/diagnostic/pr80473.C b/gcc/testsuite/g++.dg/diagnostic/pr80473.C
new file mode 100644
index 0000000..8721213
--- /dev/null
+++ b/gcc/testsuite/g++.dg/diagnostic/pr80473.C
@@ -0,0 +1,16 @@
+// { dg-options "-Wall -w" }
+// { dg-do compile { target c++11 } }
+// { dg-bogus "over-aligned new" "PR c++/80473" { target *-*-* } 0 }
+
+template<typename T> T&& declval();
+
+template<typename T, typename U, typename = void>
+struct is_constructible { enum { value = 0 }; };
+
+template<typename T, typename U>
+struct is_constructible<T, U, decltype(::new T(declval<U>()), void())>
+{ enum { value = 1 }; };
+
+struct alignas(64) A { int i; };
+
+constexpr bool b = is_constructible<A, A>::value;