aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo@gcc.gnu.org>2015-02-03 17:21:49 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2015-02-03 17:21:49 +0000
commit457d0ace46de02afd84f2ed5bd333a72cb0f414f (patch)
treef58584a32004449f8bc41aa2b394634c095aaadc /gcc
parent2cb844ce9cf37fdd75438e27b515371ad1f71405 (diff)
downloadgcc-457d0ace46de02afd84f2ed5bd333a72cb0f414f.zip
gcc-457d0ace46de02afd84f2ed5bd333a72cb0f414f.tar.gz
gcc-457d0ace46de02afd84f2ed5bd333a72cb0f414f.tar.bz2
re PR c++/64877 (strange warning message from -Waddress)
/cp 2015-02-03 Paolo Carlini <paolo.carlini@oracle.com> PR c++/64877 * typeck.c (cp_build_binary_op): Avoid spurious -Waddress warnings for generated expressions. /testsuite 2015-02-03 Paolo Carlini <paolo.carlini@oracle.com> PR c++/64877 * g++.dg/warn/Waddress-2.C: New. From-SVN: r220374
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/typeck.c9
-rw-r--r--gcc/testsuite/ChangeLog9
-rw-r--r--gcc/testsuite/g++.dg/warn/Waddress-2.C24
4 files changed, 44 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7c200d6..60d7e67 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/64877
+ * typeck.c (cp_build_binary_op): Avoid spurious -Waddress warnings
+ for generated expressions.
+
2015-02-02 Ville Voutilainen <ville.voutilainen@gmail.com>
PR c++/64901
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 32ee78e..4c128b7 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -4415,7 +4415,8 @@ cp_build_binary_op (location_t location,
&& decl_with_nonnull_addr_p (TREE_OPERAND (op0, 0)))
{
if ((complain & tf_warning)
- && c_inhibit_evaluation_warnings == 0)
+ && c_inhibit_evaluation_warnings == 0
+ && !TREE_NO_WARNING (op0))
warning (OPT_Waddress, "the address of %qD will never be NULL",
TREE_OPERAND (op0, 0));
}
@@ -4436,7 +4437,8 @@ cp_build_binary_op (location_t location,
&& decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0)))
{
if ((complain & tf_warning)
- && c_inhibit_evaluation_warnings == 0)
+ && c_inhibit_evaluation_warnings == 0
+ && !TREE_NO_WARNING (op1))
warning (OPT_Waddress, "the address of %qD will never be NULL",
TREE_OPERAND (op1, 0));
}
@@ -4537,6 +4539,9 @@ cp_build_binary_op (location_t location,
op1 = save_expr (op1);
pfn0 = pfn_from_ptrmemfunc (op0);
+ /* Avoid -Waddress warnings (c++/64877). */
+ if (TREE_CODE (pfn0) == ADDR_EXPR)
+ TREE_NO_WARNING (pfn0) = 1;
pfn1 = pfn_from_ptrmemfunc (op1);
delta0 = delta_from_ptrmemfunc (op0);
delta1 = delta_from_ptrmemfunc (op1);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 335f2da..00c0450 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,9 +1,14 @@
+2015-02-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/64877
+ * g++.dg/warn/Waddress-2.C: New.
+
2015-02-03 Segher Boessenkool <segher@kernel.crashing.org>
PR middle-end/61225
- gcc.target/i386/pr49095.c: XFAIL for ia32.
+ * gcc.target/i386/pr49095.c: XFAIL for ia32.
-2015-02-03 <dodji@redhat.com>
+2015-02-03 Dodji Seketeli <dodji@redhat.com>
PR preprocessor/64803
* gcc.dg/cpp/builtin-macro-1.c: New test case.
diff --git a/gcc/testsuite/g++.dg/warn/Waddress-2.C b/gcc/testsuite/g++.dg/warn/Waddress-2.C
new file mode 100644
index 0000000..58594f9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Waddress-2.C
@@ -0,0 +1,24 @@
+// PR c++/64877
+// { dg-options "-Waddress" }
+
+template<class Derived>
+struct S
+{
+ void m() {
+ }
+
+ S()
+ {
+ if (&S<Derived>::Unwrap != &Derived::Unwrap)
+ m();
+ }
+
+ void Unwrap() {
+ }
+};
+
+struct T : public S<T>
+{
+};
+
+T t;