diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2019-11-15 22:56:33 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2019-11-15 22:56:33 +0000 |
commit | 2ab340fe17e7b5021c980badab9f5318d1517646 (patch) | |
tree | 5ddf11c67b73a26f5d9f6044364c25d305ebc795 /gcc | |
parent | f982d12a51cd91c7a16af22f8054bfb648fe54ca (diff) | |
download | gcc-2ab340fe17e7b5021c980badab9f5318d1517646.zip gcc-2ab340fe17e7b5021c980badab9f5318d1517646.tar.gz gcc-2ab340fe17e7b5021c980badab9f5318d1517646.tar.bz2 |
typeck.c (cp_truthvalue_conversion): Add tsubst_flags_t parameter and use it in calls...
/cp
2019-11-15 Paolo Carlini <paolo.carlini@oracle.com>
* typeck.c (cp_truthvalue_conversion): Add tsubst_flags_t parameter
and use it in calls; also pass the location_t of the expression to
cp_build_binary_op and c_common_truthvalue_conversion.
* rtti.c (build_dynamic_cast_1): Adjust call.
* cvt.c (ocp_convert): Likewise.
* cp-gimplify.c (cp_fold): Likewise.
* cp-tree.h (cp_truthvalue_conversion): Update declaration.
/testsuite
2019-11-15 Paolo Carlini <paolo.carlini@oracle.com>
* g++.dg/warn/Walways-true-1.C: Check locations too.
* g++.dg/warn/Walways-true-2.C: Likewise.
* g++.dg/warn/Walways-true-3.C: Likewise.
* g++.dg/warn/Waddress-1.C: Check additional location.
From-SVN: r278320
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/cp/cp-gimplify.c | 4 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 2 | ||||
-rw-r--r-- | gcc/cp/cvt.c | 4 | ||||
-rw-r--r-- | gcc/cp/rtti.c | 2 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Waddress-1.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Walways-true-1.C | 24 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Walways-true-2.C | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Walways-true-3.C | 20 |
11 files changed, 56 insertions, 38 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0129731..429ffd6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,13 @@ +2019-11-15 Paolo Carlini <paolo.carlini@oracle.com> + + * typeck.c (cp_truthvalue_conversion): Add tsubst_flags_t parameter + and use it in calls; also pass the location_t of the expression to + cp_build_binary_op and c_common_truthvalue_conversion. + * rtti.c (build_dynamic_cast_1): Adjust call. + * cvt.c (ocp_convert): Likewise. + * cp-gimplify.c (cp_fold): Likewise. + * cp-tree.h (cp_truthvalue_conversion): Update declaration. + 2019-11-14 Jason Merrill <jason@redhat.com> Implement P1816R0, class template argument deduction for aggregates. diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index 744707e..6076697 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -2573,9 +2573,9 @@ cp_fold (tree x) { warning_sentinel s (warn_int_in_bool_context); if (!VOID_TYPE_P (TREE_TYPE (op1))) - op1 = cp_truthvalue_conversion (op1); + op1 = cp_truthvalue_conversion (op1, tf_warning_or_error); if (!VOID_TYPE_P (TREE_TYPE (op2))) - op2 = cp_truthvalue_conversion (op2); + op2 = cp_truthvalue_conversion (op2, tf_warning_or_error); } else if (VOID_TYPE_P (TREE_TYPE (x))) { diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 56b75ca..d6e9357 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -7450,7 +7450,7 @@ enum compare_bounds_t { bounds_none, bounds_either, bounds_first }; extern bool cxx_mark_addressable (tree, bool = false); extern int string_conv_p (const_tree, const_tree, int); -extern tree cp_truthvalue_conversion (tree); +extern tree cp_truthvalue_conversion (tree, tsubst_flags_t); extern tree contextual_conv_bool (tree, tsubst_flags_t); extern tree condition_conversion (tree); extern tree require_complete_type (tree); diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index 23facb7..bca687f 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -841,13 +841,13 @@ ocp_convert (tree type, tree expr, int convtype, int flags, if (SCOPED_ENUM_P (intype) && (convtype & CONV_STATIC)) e = build_nop (ENUM_UNDERLYING_TYPE (intype), e); if (complain & tf_warning) - return cp_truthvalue_conversion (e); + return cp_truthvalue_conversion (e, complain); else { /* Prevent bogus -Wint-in-bool-context warnings coming from c_common_truthvalue_conversion down the line. */ warning_sentinel w (warn_int_in_bool_context); - return cp_truthvalue_conversion (e); + return cp_truthvalue_conversion (e, complain); } } diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c index 1ba4a46..d987f8b 100644 --- a/gcc/cp/rtti.c +++ b/gcc/cp/rtti.c @@ -782,7 +782,7 @@ build_dynamic_cast_1 (tree type, tree expr, tsubst_flags_t complain) tree neq; result = save_expr (result); - neq = cp_truthvalue_conversion (result); + neq = cp_truthvalue_conversion (result, complain); return cp_convert (type, build3 (COND_EXPR, TREE_TYPE (result), neq, result, bad), complain); diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 3144b7e..747ae42 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -5981,15 +5981,16 @@ cp_build_addressof (location_t loc, tree arg, tsubst_flags_t complain) -1. */ tree -cp_truthvalue_conversion (tree expr) +cp_truthvalue_conversion (tree expr, tsubst_flags_t complain) { tree type = TREE_TYPE (expr); + location_t loc = cp_expr_loc_or_input_loc (expr); if (TYPE_PTR_OR_PTRMEM_P (type) /* Avoid ICE on invalid use of non-static member function. */ || TREE_CODE (expr) == FUNCTION_DECL) - return build_binary_op (input_location, NE_EXPR, expr, nullptr_node, true); + return cp_build_binary_op (loc, NE_EXPR, expr, nullptr_node, complain); else - return c_common_truthvalue_conversion (input_location, expr); + return c_common_truthvalue_conversion (loc, expr); } /* Returns EXPR contextually converted to bool. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8473e7a..997096c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2019-11-15 Paolo Carlini <paolo.carlini@oracle.com> + + * g++.dg/warn/Walways-true-1.C: Check locations too. + * g++.dg/warn/Walways-true-2.C: Likewise. + * g++.dg/warn/Walways-true-3.C: Likewise. + * g++.dg/warn/Waddress-1.C: Check additional location. + 2019-11-15 Joseph Myers <joseph@codesourcery.com> * gcc.dg/c2x-attr-maybe_unused-1.c, diff --git a/gcc/testsuite/g++.dg/warn/Waddress-1.C b/gcc/testsuite/g++.dg/warn/Waddress-1.C index 43a2a70..1783622 100644 --- a/gcc/testsuite/g++.dg/warn/Waddress-1.C +++ b/gcc/testsuite/g++.dg/warn/Waddress-1.C @@ -13,7 +13,7 @@ S s; T t; double d; -void f() { if (z) z(); } // { dg-warning "address" } +void f() { if (z) z(); } // { dg-warning "17:address" } void gl() { if (z != 0) z(); } // { dg-warning "19:address" } void hl() { if (z != (ptrf)0) z(); } // { dg-warning "19:address" } diff --git a/gcc/testsuite/g++.dg/warn/Walways-true-1.C b/gcc/testsuite/g++.dg/warn/Walways-true-1.C index 48b9f72..e74114d 100644 --- a/gcc/testsuite/g++.dg/warn/Walways-true-1.C +++ b/gcc/testsuite/g++.dg/warn/Walways-true-1.C @@ -12,46 +12,46 @@ void bar (int a) { lab: - if (foo) // { dg-warning "always evaluate as|never be NULL" "correct warning" } + if (foo) // { dg-warning "7:the address of .int foo\\(int\\). will never be NULL" "correct warning" } foo (0); if (foo (1)) ; - if (&i) // { dg-warning "always evaluate as|never be NULL" "correct warning" } + if (&i) // { dg-warning "7:the address of .i. will never be NULL" "correct warning" } foo (2); if (i) foo (3); - if (&a) // { dg-warning "always evaluate as|never be NULL" "correct warning" } + if (&a) // { dg-warning "7:the address of .a. will never be NULL" "correct warning" } foo (4); if (a) foo (5); - if (&&lab) // { dg-warning "always evaluate as|never be NULL" "correct warning" } + if (&&lab) // { dg-warning "7:the address of .lab. will never be NULL" "correct warning" } foo (6); - if (foo == 0) // { dg-warning "never be NULL" "correct warning" } + if (foo == 0) // { dg-warning "11:the address of .int foo\\(int\\). will never be NULL" "correct warning" } foo (7); if (foo (1) == 0) foo (8); - if (&i == 0) // { dg-warning "never be NULL" "correct warning" } + if (&i == 0) // { dg-warning "10:the address of .i. will never be NULL" "correct warning" } foo (9); if (i == 0) foo (10); - if (&a == 0) // { dg-warning "never be NULL" "correct warning" } + if (&a == 0) // { dg-warning "10:the address of .a. will never be NULL" "correct warning" } foo (11); if (a == 0) foo (12); - if (&&lab == 0) // { dg-warning "never be NULL" "correct warning" } + if (&&lab == 0) // { dg-warning "13:the address of .lab. will never be NULL" "correct warning" } foo (13); - if (0 == foo) // { dg-warning "never be NULL" "correct warning" } + if (0 == foo) // { dg-warning "9:the address of .int foo\\(int\\). will never be NULL" "correct warning" } foo (14); if (0 == foo (1)) foo (15); - if (0 == &i) // { dg-warning "never be NULL" "correct warning" } + if (0 == &i) // { dg-warning "9:the address of .i. will never be NULL" "correct warning" } foo (16); if (0 == i) foo (17); - if (0 == &a) // { dg-warning "never be NULL" "correct warning" } + if (0 == &a) // { dg-warning "9:the address of .a. will never be NULL" "correct warning" } foo (18); if (0 == a) foo (19); - if (0 == &&lab) // { dg-warning "never be NULL" "correct warning" } + if (0 == &&lab) // { dg-warning "9:the address of .lab. will never be NULL" "correct warning" } foo (20); } diff --git a/gcc/testsuite/g++.dg/warn/Walways-true-2.C b/gcc/testsuite/g++.dg/warn/Walways-true-2.C index e4b5713..29a80e5 100644 --- a/gcc/testsuite/g++.dg/warn/Walways-true-2.C +++ b/gcc/testsuite/g++.dg/warn/Walways-true-2.C @@ -23,11 +23,11 @@ bar (int a) foo (2); if (i) foo (3); - if (&a) // { dg-warning "always evaluate as|never be NULL" "correct warning" } + if (&a) // { dg-warning "7:the address of .a. will never be NULL" "correct warning" } foo (4); if (a) foo (5); - if (&&lab) // { dg-warning "always evaluate as|never be NULL" "correct warning" } + if (&&lab) // { dg-warning "7:the address of .lab. will never be NULL" "correct warning" } foo (6); if (foo == 0) foo (7); @@ -37,11 +37,11 @@ bar (int a) foo (9); if (i == 0) foo (10); - if (&a == 0) // { dg-warning "never be NULL" "correct warning" } + if (&a == 0) // { dg-warning "10:the address of .a. will never be NULL" "correct warning" } foo (11); if (a == 0) foo (12); - if (&&lab == 0) // { dg-warning "never be NULL" "correct warning" } + if (&&lab == 0) // { dg-warning "13:the address of .lab. will never be NULL" "correct warning" } foo (13); if (0 == foo) foo (14); @@ -51,10 +51,10 @@ bar (int a) foo (16); if (0 == i) foo (17); - if (0 == &a) // { dg-warning "never be NULL" "correct warning" } + if (0 == &a) // { dg-warning "9:the address of .a. will never be NULL" "correct warning" } foo (18); if (0 == a) foo (19); - if (0 == &&lab) // { dg-warning "never be NULL" "correct warning" } + if (0 == &&lab) // { dg-warning "9:the address of .lab. will never be NULL" "correct warning" } foo (20); } diff --git a/gcc/testsuite/g++.dg/warn/Walways-true-3.C b/gcc/testsuite/g++.dg/warn/Walways-true-3.C index d6e9df4..0291328 100644 --- a/gcc/testsuite/g++.dg/warn/Walways-true-3.C +++ b/gcc/testsuite/g++.dg/warn/Walways-true-3.C @@ -11,28 +11,28 @@ bar (int &a) { int &b = a; - if ((int *)&a) // { dg-warning "address of" } + if ((int *)&a) // { dg-warning "7:the compiler can assume that the address of" } foo (); - if (&b) // { dg-warning "address of" } + if (&b) // { dg-warning "7:the compiler can assume that the address of" } foo (); - if (!&c) // { dg-warning "address of" } + if (!&c) // { dg-warning "8:the compiler can assume that the address of" } foo (); - if (!&(int &)(int &)a) // { dg-warning "address of" } + if (!&(int &)(int &)a) // { dg-warning "8:the compiler can assume that the address of" } foo (); - if (&a == 0) // { dg-warning "never be NULL" } + if (&a == 0) // { dg-warning "10:the compiler can assume that the address of" } foo (); - if (&b != 0) // { dg-warning "never be NULL" } + if (&b != 0) // { dg-warning "10:the compiler can assume that the address of" } foo (); - if (0 == &(int &)(int &)c) // { dg-warning "never be NULL" } + if (0 == &(int &)(int &)c) // { dg-warning "9:the compiler can assume that the address of" } foo (); - if (&a != (int *)0) // { dg-warning "never be NULL" } + if (&a != (int *)0) // { dg-warning "10:the compiler can assume that the address of" } foo (); } @@ -40,7 +40,7 @@ bool bar_1 (int &a) { if (d == 5) - return &a; // { dg-warning "address of" } + return &a; // { dg-warning "12:the compiler can assume that the address of" } else - return !&(int &)(int &)a; // { dg-warning "address of" } + return !&(int &)(int &)a; // { dg-warning "13:the compiler can assume that the address of" } } |