From 8f8828ba556416b266acd3b02192c68f0d3bc393 Mon Sep 17 00:00:00 2001 From: mpolacek Date: Mon, 5 Sep 2016 12:17:09 +0000 Subject: PR c/77423 * doc/invoke.texi: Update -Wlogical-not-parentheses documentation. * c-common.c (bool_promoted_to_int_p): New function. (expr_has_boolean_operands_p): New function. (warn_logical_not_parentheses): Return if expr_has_boolean_operands_p. (maybe_warn_bool_compare): Use bool_promoted_to_int_p. * c-c++-common/Wlogical-not-parentheses-3.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@239988 138bc75d-0d04-0410-961f-82ee72b054a4 --- .../c-c++-common/Wlogical-not-parentheses-3.c | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 gcc/testsuite/c-c++-common/Wlogical-not-parentheses-3.c (limited to 'gcc/testsuite/c-c++-common') diff --git a/gcc/testsuite/c-c++-common/Wlogical-not-parentheses-3.c b/gcc/testsuite/c-c++-common/Wlogical-not-parentheses-3.c new file mode 100644 index 00000000000..00aa747652b --- /dev/null +++ b/gcc/testsuite/c-c++-common/Wlogical-not-parentheses-3.c @@ -0,0 +1,31 @@ +/* PR c/77423 */ +/* { dg-do compile } */ +/* { dg-options "-Wlogical-not-parentheses" } */ + +#ifndef __cplusplus +# define bool _Bool +#endif + +int +f (int a, bool b, bool c) +{ + int r = 0; + + r += !a == (b | c); + r += !a == (b ^ c); + r += !a == (b & c); + r += !a == ~b; + r += !a == ~(int) b; + r += !a == ((b & c) | c); + r += !a == ((b & c) | (b ^ c)); + r += !a == (int) (b ^ c); + r += !a == (int) ~b; + r += !a == ~~b; + r += !a == ~(b | c); + r += !a == ~(b | (a == 1)); + r += !a == ~(a == 1); + + r += !a == ((b & c) | (b ^ a)); /* { dg-warning "logical not is only applied to the left hand side of comparison" } */ + + return r; +} -- cgit v1.2.1 From 4c04bcceefe31b60e6177cb106d046c5720726b0 Mon Sep 17 00:00:00 2001 From: rguenth Date: Tue, 6 Sep 2016 12:49:53 +0000 Subject: 2016-09-06 Richard Biener PR c/77450 c-family/ * c-common.c (c_common_mark_addressable_vec): Handle COMPOUND_LITERAL_EXPR. * c-c++-common/vector-subscript-7.c: Adjust. * c-c++-common/vector-subscript-8.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240006 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/c-c++-common/vector-subscript-7.c | 4 ++-- gcc/testsuite/c-c++-common/vector-subscript-8.c | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/vector-subscript-8.c (limited to 'gcc/testsuite/c-c++-common') diff --git a/gcc/testsuite/c-c++-common/vector-subscript-7.c b/gcc/testsuite/c-c++-common/vector-subscript-7.c index e8418f24be9..8e8fa0c1bdc 100644 --- a/gcc/testsuite/c-c++-common/vector-subscript-7.c +++ b/gcc/testsuite/c-c++-common/vector-subscript-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-ccp1" } */ +/* { dg-options "-O -fdump-tree-fre1" } */ typedef int v4si __attribute__ ((vector_size (16))); @@ -11,4 +11,4 @@ main (int argc, char** argv) return ((v4si){1, 2, 42, 0})[j]; } -/* { dg-final { scan-tree-dump "return 42;" "ccp1" } } */ +/* { dg-final { scan-tree-dump "return 42;" "fre1" } } */ diff --git a/gcc/testsuite/c-c++-common/vector-subscript-8.c b/gcc/testsuite/c-c++-common/vector-subscript-8.c new file mode 100644 index 00000000000..8b0e0ff8977 --- /dev/null +++ b/gcc/testsuite/c-c++-common/vector-subscript-8.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ + +typedef int V __attribute__((vector_size(4))); + +void +foo(void) +{ + (V){ 0 }[0] = 0; +} -- cgit v1.2.1 From b55f1f446d96b97ed5370997c04ce94483835a87 Mon Sep 17 00:00:00 2001 From: rguenth Date: Wed, 7 Sep 2016 08:22:01 +0000 Subject: 2016-09-07 Richard Biener PR c/77450 * c-c++-common/vector-subscript-8.c: Move .. * gcc.dg/pr77450.c: ... here. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240025 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/c-c++-common/vector-subscript-8.c | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 gcc/testsuite/c-c++-common/vector-subscript-8.c (limited to 'gcc/testsuite/c-c++-common') diff --git a/gcc/testsuite/c-c++-common/vector-subscript-8.c b/gcc/testsuite/c-c++-common/vector-subscript-8.c deleted file mode 100644 index 8b0e0ff8977..00000000000 --- a/gcc/testsuite/c-c++-common/vector-subscript-8.c +++ /dev/null @@ -1,9 +0,0 @@ -/* { dg-do compile } */ - -typedef int V __attribute__((vector_size(4))); - -void -foo(void) -{ - (V){ 0 }[0] = 0; -} -- cgit v1.2.1 From 3bb45f768ac518fea4baca349f976a2f30503478 Mon Sep 17 00:00:00 2001 From: vries Date: Sat, 10 Sep 2016 14:38:56 +0000 Subject: Make canonical_va_list_type more strict 2016-09-10 Tom de Vries PR C/71602 * builtins.c (std_canonical_va_list_type): Strictly return non-null for va_list type only. * config/i386/i386.c (ix86_canonical_va_list_type): Same. * gimplify.c (gimplify_va_arg_expr): Handle &va_list. * c-common.c (build_va_arg): Handle more strict targetm.canonical_va_list_type. Replace first argument type error with assert. * c-c++-common/va-arg-va-list-type.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240072 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/c-c++-common/va-arg-va-list-type.c | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 gcc/testsuite/c-c++-common/va-arg-va-list-type.c (limited to 'gcc/testsuite/c-c++-common') diff --git a/gcc/testsuite/c-c++-common/va-arg-va-list-type.c b/gcc/testsuite/c-c++-common/va-arg-va-list-type.c new file mode 100644 index 00000000000..cdd97cfb037 --- /dev/null +++ b/gcc/testsuite/c-c++-common/va-arg-va-list-type.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ + +__builtin_va_list *pap; + +void +fn1 (void) +{ + __builtin_va_arg (pap, double); /* { dg-error "first argument to 'va_arg' not of type 'va_list'" } */ +} -- cgit v1.2.1 From 7a21b590fb5d96a2a925f2a26ea1f20c89ae070f Mon Sep 17 00:00:00 2001 From: edlinger Date: Mon, 12 Sep 2016 20:18:16 +0000 Subject: gcc/c-family: 2016-09-12 Bernd Edlinger PR c++/77496 * c-common.c (warn_for_omitted_condop): Also warn for boolean data. gcc/c: 2016-09-12 Bernd Edlinger PR c++/77496 * c-parser.c (c_parser_conditional_expression): Pass the rightmost COMPOUND_EXPR to warn_for_omitted_condop. gcc/cp: 2016-09-12 Bernd Edlinger PR c++/77496 * call.c (build_conditional_expr_1): Call warn_for_omitted_condop. * class.c (instantiate_type): Look through the SAVE_EXPR. gcc/testsuite: 2016-09-12 Bernd Edlinger PR c++/77496 * c-c++-common/warn-ommitted-condop.c: Add more test cases. * g++.dg/ext/pr77496.C: New test. * g++.dg/warn/pr77496.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240098 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/c-c++-common/warn-ommitted-condop.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'gcc/testsuite/c-c++-common') diff --git a/gcc/testsuite/c-c++-common/warn-ommitted-condop.c b/gcc/testsuite/c-c++-common/warn-ommitted-condop.c index 0726f043916..678373f3d70 100644 --- a/gcc/testsuite/c-c++-common/warn-ommitted-condop.c +++ b/gcc/testsuite/c-c++-common/warn-ommitted-condop.c @@ -1,11 +1,15 @@ /* { dg-options "-Wparentheses -ftrack-macro-expansion=0" } */ +#ifndef __cplusplus +#define bool _Bool +#endif + extern void f2 (int); -void bar (int x, int y, int z) +void bar (int x, int y, int z, bool b) { -#define T(op) f2 (x op y ? : 1) -#define T2(op) f2 (x op y ? 2 : 1) +#define T(op) f2 (x op y ? : 1) +#define T2(op) f2 (x op y ? 2 : 1) T(<); /* { dg-warning "omitted middle operand" } */ T(>); /* { dg-warning "omitted middle operand" } */ @@ -16,6 +20,8 @@ void bar (int x, int y, int z) T(||); /* { dg-warning "omitted middle operand" } */ T(&&); /* { dg-warning "omitted middle operand" } */ f2 (!x ? : 1); /* { dg-warning "omitted middle operand" } */ + f2 ((x,!x) ? : 1); /* { dg-warning "omitted middle operand" } */ + f2 ((x,y,!x) ? : 1); /* { dg-warning "omitted middle operand" } */ T2(<); /* { dg-bogus "omitted middle operand" } */ T2(>); /* { dg-bogus "omitted middle operand" } */ T2(==); /* { dg-bogus "omitted middle operand" } */ @@ -26,4 +32,5 @@ void bar (int x, int y, int z) T(*); /* { dg-bogus "omitted middle operand" } */ T(/); /* { dg-bogus "omitted middle operand" } */ T(^); /* { dg-bogus "omitted middle operand" } */ + f2 (b ? : 1); /* { dg-warning "omitted middle operand" } */ } -- cgit v1.2.1 From 0975f7647395f43d646f214d65aad6e3bf5b36c8 Mon Sep 17 00:00:00 2001 From: jakub Date: Wed, 14 Sep 2016 09:01:49 +0000 Subject: PR sanitizer/68260 * tsan.c: Include target.h. (enum tsan_atomic_action): Add bool_clear and bool_test_and_set. (BOOL_CLEAR, BOOL_TEST_AND_SET): Define. (tsan_atomic_table): Add BUILT_IN_ATOMIC_CLEAR and BUILT_IN_ATOMIC_TEST_AND_SET entries. (instrument_builtin_call): Handle bool_clear and bool_test_and_set. * c-c++-common/tsan/pr68260.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240129 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/c-c++-common/tsan/pr68260.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 gcc/testsuite/c-c++-common/tsan/pr68260.c (limited to 'gcc/testsuite/c-c++-common') diff --git a/gcc/testsuite/c-c++-common/tsan/pr68260.c b/gcc/testsuite/c-c++-common/tsan/pr68260.c new file mode 100644 index 00000000000..86ffd2b2823 --- /dev/null +++ b/gcc/testsuite/c-c++-common/tsan/pr68260.c @@ -0,0 +1,28 @@ +/* PR sanitizer/68260 */ + +#include +#include + +bool lock; +int counter; + +void * +tf (void *arg) +{ + (void) arg; + while (__atomic_test_and_set (&lock, __ATOMIC_ACQUIRE)) + ; + ++counter; + __atomic_clear (&lock, __ATOMIC_RELEASE); + return (void *) 0; +} + +int +main () +{ + pthread_t thr; + pthread_create (&thr, 0, tf, 0); + tf ((void *) 0); + pthread_join (thr, 0); + return 0; +} -- cgit v1.2.1 From 5be60f03446727a9f8951bdccd94e0376bc914bd Mon Sep 17 00:00:00 2001 From: mpolacek Date: Wed, 14 Sep 2016 17:46:59 +0000 Subject: * typeck.c (cp_build_unary_op): Diagnose incrementing boolean expressions. Tweak an error message. * c-c++-common/gomp/atomic-12.c: Use -Wno-deprecated. * c-c++-common/gomp/atomic-13.c: Likewise. * c-c++-common/gomp/atomic-14.c: Likewise. * g++.dg/cpp1y/lambda-init11.C: Remove invalid code. * g++.dg/cpp1z/bool-increment1.C: New test. * c-c++-common/pr60439.c: Add dg-warning. * g++.dg/expr/bitfield4.C: Likewise. * g++.dg/expr/bitfield5.C: Likewise. * g++.dg/expr/bitfield6.C: Likewise. * g++.dg/expr/bool1.C: Likewise. * g++.dg/expr/bool3.C: Likewise. * g++.dg/expr/lval3.C: Likewise. * g++.dg/expr/lval4.C: Likewise. * g++.old-deja/g++.jason/bool5.C: Likewise. * g++.dg/expr/bitfield3.C: Adjust dg-error. * g++.dg/other/error18.C: Likewise. * g++.dg/gomp/atomic-14.C: Likewise. libgomp/ * testsuite/libgomp.c++/atomic-3.C: Use -Wno-deprecated. libstdc++-v3/ * testsuite/23_containers/vector/debug/insert6_neg.cc: Use -Wno-deprecated. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240141 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/c-c++-common/gomp/atomic-12.c | 2 +- gcc/testsuite/c-c++-common/gomp/atomic-13.c | 2 +- gcc/testsuite/c-c++-common/gomp/atomic-14.c | 2 +- gcc/testsuite/c-c++-common/pr60439.c | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) (limited to 'gcc/testsuite/c-c++-common') diff --git a/gcc/testsuite/c-c++-common/gomp/atomic-12.c b/gcc/testsuite/c-c++-common/gomp/atomic-12.c index 145e4201642..e9ca6503cfe 100644 --- a/gcc/testsuite/c-c++-common/gomp/atomic-12.c +++ b/gcc/testsuite/c-c++-common/gomp/atomic-12.c @@ -1,6 +1,6 @@ /* PR middle-end/45423 */ /* { dg-do compile } */ -/* { dg-options "-fopenmp -fdump-tree-gimple -g0" } */ +/* { dg-options "-fopenmp -fdump-tree-gimple -g0 -Wno-deprecated" } */ /* atomicvar should never be referenced in between the barrier and following #pragma omp atomic_load. */ /* { dg-final { scan-tree-dump-not "barrier\[^#\]*atomicvar" "gimple" } } */ diff --git a/gcc/testsuite/c-c++-common/gomp/atomic-13.c b/gcc/testsuite/c-c++-common/gomp/atomic-13.c index 2452035da5b..7f4afcf63ad 100644 --- a/gcc/testsuite/c-c++-common/gomp/atomic-13.c +++ b/gcc/testsuite/c-c++-common/gomp/atomic-13.c @@ -1,6 +1,6 @@ /* PR middle-end/45423 */ /* { dg-do compile } */ -/* { dg-options "-fopenmp -fdump-tree-gimple -g0 -O2" } */ +/* { dg-options "-fopenmp -fdump-tree-gimple -g0 -O2 -Wno-deprecated" } */ /* atomicvar should never be referenced in between the barrier and following #pragma omp atomic_load. */ /* { dg-final { scan-tree-dump-not "barrier\[^#\]*atomicvar" "gimple" } } */ diff --git a/gcc/testsuite/c-c++-common/gomp/atomic-14.c b/gcc/testsuite/c-c++-common/gomp/atomic-14.c index f8fc9d87257..7e2345387d4 100644 --- a/gcc/testsuite/c-c++-common/gomp/atomic-14.c +++ b/gcc/testsuite/c-c++-common/gomp/atomic-14.c @@ -1,6 +1,6 @@ /* PR middle-end/45423 */ /* { dg-do compile } */ -/* { dg-options "-fopenmp" } */ +/* { dg-options "-fopenmp -Wno-deprecated" } */ #ifdef __cplusplus bool *baz (); diff --git a/gcc/testsuite/c-c++-common/pr60439.c b/gcc/testsuite/c-c++-common/pr60439.c index 68bd33c22cb..71b397a1c7d 100644 --- a/gcc/testsuite/c-c++-common/pr60439.c +++ b/gcc/testsuite/c-c++-common/pr60439.c @@ -132,6 +132,7 @@ f6 (bool b) break; } switch (b++) /* { dg-warning "switch condition has" } */ + /* { dg-warning "is deprecated" "" { target c++ } 134 } */ { case 3: break; -- cgit v1.2.1 From fbcb99d5c59d67b8badc5f1ad81e60da6fcc9ce1 Mon Sep 17 00:00:00 2001 From: rguenth Date: Thu, 15 Sep 2016 12:35:13 +0000 Subject: 2016-09-15 Richard Biener PR middle-end/77544 * fold-const.c (split_tree): Do not split constant ~X. * c-c++-common/torture/pr77544.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240164 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/c-c++-common/torture/pr77544.c | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 gcc/testsuite/c-c++-common/torture/pr77544.c (limited to 'gcc/testsuite/c-c++-common') diff --git a/gcc/testsuite/c-c++-common/torture/pr77544.c b/gcc/testsuite/c-c++-common/torture/pr77544.c new file mode 100644 index 00000000000..1d1ce3ff74f --- /dev/null +++ b/gcc/testsuite/c-c++-common/torture/pr77544.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ + +struct { + long a : 17; +} b; +int c, d; +void e() { b.a = d + c + ~(long)(302806U >> 0); } -- cgit v1.2.1