From db8ffb402adef529e224cdc4bd73e09a3aa247f2 Mon Sep 17 00:00:00 2001 From: jason Date: Fri, 9 Sep 2016 21:22:15 +0000 Subject: Implement P0035R4, C++17 new of over-aligned types. gcc/cp/ * cp-tree.h (enum cp_tree_index): Add CPTI_ALIGN_TYPE. (align_type_node): New macro. * call.c (build_operator_new_call): Handle C++17 aligned new. (second_parm_is_size_t, build_op_delete_call): Likewise. (non_placement_deallocation_fn_p): Likewise. Rename to usual_deallocation_fn_p. (aligned_allocation_fn_p, aligned_deallocation_fn_p): New. * decl.c (cxx_init_decl_processing): Add aligned new support. * init.c (type_has_new_extended_alignment): New. (build_new_1): Handle aligned new. * tree.c (vec_copy_and_insert): New. gcc/c-family/ * c.opt: Add -faligned-new and -Waligned-new. * c-common.c (max_align_t_align): Split out from... (cxx_fundamental_alignment_p): ...here. * c-common.h: Declare it. * c-cppbuiltin.c (c_cpp_builtins): Handle aligned new. libstdc++-v3/ * libsupc++/new: Declare aligned new/delete operators. * config/abi/pre/gnu.ver: Export them. * configure.ac: Check for aligned_alloc, posix_memalign, memalign, _aligned_malloc. * libsupc++/new_opa.cc: New. * libsupc++/new_opant.cc: New. * libsupc++/new_opva.cc: New. * libsupc++/new_opva.cc: New. * libsupc++/del_opa.cc: New. * libsupc++/del_opant.cc: New. * libsupc++/del_opsa.cc: New. * libsupc++/del_opva.cc: New. * libsupc++/del_opvant.cc: New. * libsupc++/del_opvsa.cc: New. * libsupc++/Makefile.am: Build them. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240056 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/g++.dg/cpp0x/Wattributes1.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gcc/testsuite/g++.dg/cpp0x') diff --git a/gcc/testsuite/g++.dg/cpp0x/Wattributes1.C b/gcc/testsuite/g++.dg/cpp0x/Wattributes1.C index dd9011b8870..b0a1e864eff 100644 --- a/gcc/testsuite/g++.dg/cpp0x/Wattributes1.C +++ b/gcc/testsuite/g++.dg/cpp0x/Wattributes1.C @@ -5,4 +5,4 @@ #include __attribute__((visibility("hidden")))void*operator new(std::size_t); // { dg-warning "visibility attribute ignored" } -// { dg-message "previous declaration" "" { target *-*-* } 116 } +// { dg-message "previous declaration" "" { target *-*-* } 120 } -- cgit v1.2.1 From 4bdba715a1dbb9b4d556dedcaf404cf2f8ce5f51 Mon Sep 17 00:00:00 2001 From: jakub Date: Tue, 13 Sep 2016 19:20:38 +0000 Subject: Implement P0028R4, C++17 using attribute namespaces without repetition * parser.c (cp_parser_std_attribute): Add ATTR_NS argument. Diagnose non-NULL ATTR_NS with scoped attribute token. Handle non-NULL ATTR_NS with non-scoped attribute tokens. Allow named ops in identifier after ::. (cp_parser_std_attribute_list): Add ATTR_NS argument, pass it down to cp_parser_std_attribute calls. (cp_parser_std_attribute_spec): Parse optional C++17 attribute-using-prefix, adjust grammar in function comment. * g++.dg/cpp0x/gen-attrs-61.C: New test. * g++.dg/cpp1z/gen-attrs1.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240121 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/g++.dg/cpp0x/gen-attrs-61.C | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/gen-attrs-61.C (limited to 'gcc/testsuite/g++.dg/cpp0x') diff --git a/gcc/testsuite/g++.dg/cpp0x/gen-attrs-61.C b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-61.C new file mode 100644 index 00000000000..fd7f4437dbb --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-61.C @@ -0,0 +1,10 @@ +// { dg-do compile { target c++11 } } +int +foo () +{ + int i [[and::bitor, bar::xor_eq, compl::baz(1), bitand::xor_eq(2, 3)]]; // { dg-warning "ignored" } + int j [[using, using::baz, bar::using, using::using (2)]]; // { dg-warning "ignored" } + i = 0; + j = 0; + return i + j; +} -- cgit v1.2.1 From 7b329bca4df903540beab7f60cf20f5b6bc5583b Mon Sep 17 00:00:00 2001 From: clyon Date: Wed, 14 Sep 2016 13:37:23 +0000 Subject: Fix dg-require before dg-run directives in testsuite. libstdc++-v3/ChangeLog: 2016-09-14 Christophe Lyon * testsuite/23_containers/vector/bool/modifiers/insert/31370.cc: Move dg-do directive before dg-skip. * testsuite/21_strings/debug/iterator_self_move_assign_neg.cc: Move dg-do directive before dg-require. * testsuite/21_strings/debug/self_move_assign_neg.cc: Likewise. * testsuite/23_containers/vector/debug/57779_neg.cc: Likewise. * testsuite/23_containers/vector/debug/60587_neg.cc: Likewise. * testsuite/23_containers/vector/debug/assign1_neg.cc: Likewise. * testsuite/23_containers/vector/debug/assign2_neg.cc: Likewise. * testsuite/23_containers/vector/debug/assign3_neg.cc: Likewise. * testsuite/23_containers/vector/debug/construct1_neg.cc: Likewise. * testsuite/23_containers/vector/debug/construct2_neg.cc: Likewise. * testsuite/23_containers/vector/debug/construct3_neg.cc: Likewise. * testsuite/23_containers/vector/debug/insert1_neg.cc: Likewise. * testsuite/23_containers/vector/debug/insert2_neg.cc: Likewise. * testsuite/23_containers/vector/debug/insert3_neg.cc: Likewise. * testsuite/23_containers/vector/debug/insert5_neg.cc: Likewise. * testsuite/25_algorithms/lower_bound/debug/irreflexive.cc: Likewise. * testsuite/25_algorithms/partial_sort_copy/debug/irreflexive_neg.cc: Likewise. * testsuite/25_algorithms/pop_heap/empty2_neg.cc: Likewise. * testsuite/25_algorithms/pop_heap/empty_neg.cc: Likewise. * testsuite/27_io/objects/char/12048-5.cc: Likewise. * testsuite/ext/special_functions/conf_hyperg/check_nan.cc: Likewise. * testsuite/ext/special_functions/hyperg/check_nan.cc: Likewise. gcc/testsuite/ChangeLog: 2016-09-14 Christophe Lyon * g++.dg/cpp0x/lambda/lambda-mangle.C: Move dg-do directive before dg-require. * g++.dg/ext/builtin_alloca.C: Likewise. * g++.dg/template/spec35.C: Likewise. * gcc.dg/builtins-68.c: Likewise. * gcc.misc-tests/gcov-13.c: Likewise. * gcc.misc-tests/gcov-14.c: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240135 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gcc/testsuite/g++.dg/cpp0x') diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C index 20ef282ac24..15b8b79ecbc 100644 --- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C @@ -1,6 +1,6 @@ // Test lambda mangling -// { dg-require-weak "" } // { dg-do compile { target c++11 } } +// { dg-require-weak "" } // { dg-options "-fno-inline" } template int algo(F fn) { return fn(); } -- cgit v1.2.1 From ef45c4c09fc2c9bd4e249f6c8f912d45784f4d7d Mon Sep 17 00:00:00 2001 From: jason Date: Wed, 14 Sep 2016 16:18:10 +0000 Subject: * c-common.c (check_cxx_fundamental_alignment_constraints): Don't limit FIELD_DECL, either. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240139 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/g++.dg/cpp0x/gen-attrs-52.C | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'gcc/testsuite/g++.dg/cpp0x') diff --git a/gcc/testsuite/g++.dg/cpp0x/gen-attrs-52.C b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-52.C index 0f87fd490e5..ad7cffc6b99 100644 --- a/gcc/testsuite/g++.dg/cpp0x/gen-attrs-52.C +++ b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-52.C @@ -3,19 +3,22 @@ struct A {int i;} a [[gnu::aligned(16)]]; struct B {int i;} __attribute__((aligned(16))) b; +constexpr unsigned si = sizeof(int); +constexpr unsigned ai = alignof(int); + int main () { A aa; B bb; - static_assert (sizeof (a) == 4, "sizeof (a) should be 4"); + static_assert (sizeof (a) == si, "sizeof (a) should be 4"); static_assert (sizeof (b) == 16, "sizeof (b) should be 16"); - static_assert (sizeof (aa) == 4, "sizeof (aa) should be 4"); + static_assert (sizeof (aa) == si, "sizeof (aa) should be 4"); static_assert (sizeof (bb) == 16, "sizeof (bb) should be 16"); static_assert (__alignof__ (a) == 16, "alignof (a) should be 16"); static_assert (__alignof__ (b) == 16, "alignof (b) should be 16"); - static_assert (__alignof__ (aa) == 4, "alignof (aa) should be 4"); + static_assert (__alignof__ (aa) == ai, "alignof (aa) should be 4"); static_assert (__alignof__ (bb) == 16, "alignof (bb) should be 16"); } -- cgit v1.2.1 From 24b3d864a8d14aff75561b1bee142e10ddcc725c Mon Sep 17 00:00:00 2001 From: jakub Date: Fri, 16 Sep 2016 20:21:29 +0000 Subject: PR c++/77375 * class.c (check_bases): Set CLASSTYPE_HAS_MUTABLE if any TYPE_HAS_MUTABLE_P for any bases. * g++.dg/cpp0x/mutable1.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240195 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/g++.dg/cpp0x/mutable1.C | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/mutable1.C (limited to 'gcc/testsuite/g++.dg/cpp0x') diff --git a/gcc/testsuite/g++.dg/cpp0x/mutable1.C b/gcc/testsuite/g++.dg/cpp0x/mutable1.C new file mode 100644 index 00000000000..4dd37185d72 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/mutable1.C @@ -0,0 +1,12 @@ +// PR c++/77375 +// { dg-do run { target c++11 } } + +struct Base { mutable int i; }; +struct Derived : Base {}; +const Derived foo{}; + +int +main () +{ + foo.i = 42; +} -- cgit v1.2.1 From 53d2f3de3b77137e56a321eb0c7515d2a6a056a9 Mon Sep 17 00:00:00 2001 From: jakub Date: Fri, 16 Sep 2016 20:22:35 +0000 Subject: PR c++/77338 * constexpr.c (cxx_eval_constant_expression) : Only call is_really_empty_class on complete types. * g++.dg/cpp0x/decltype-77338.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240196 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/g++.dg/cpp0x/decltype-77338.C | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/decltype-77338.C (limited to 'gcc/testsuite/g++.dg/cpp0x') diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype-77338.C b/gcc/testsuite/g++.dg/cpp0x/decltype-77338.C new file mode 100644 index 00000000000..4ba7c96d32c --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/decltype-77338.C @@ -0,0 +1,7 @@ +// PR c++/77338 +// { dg-do compile { target c++11 } } + +struct S; + +template +auto f (S s) -> decltype (s (s)); // { dg-error "no match for call to" } -- cgit v1.2.1 From e6db887a54f49ed28f49371d3326cd0143cc7f18 Mon Sep 17 00:00:00 2001 From: jakub Date: Fri, 16 Sep 2016 20:25:17 +0000 Subject: PR c++/77482 * error.c (dump_simple_decl): Only check DECL_DECLARED_CONCEPT_P if DECL_LANG_SPECIFIC is non-NULL. Fix up formatting. * g++.dg/cpp0x/constexpr-77482.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240198 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/g++.dg/cpp0x/constexpr-77482.C | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/constexpr-77482.C (limited to 'gcc/testsuite/g++.dg/cpp0x') diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-77482.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-77482.C new file mode 100644 index 00000000000..6f5c91621ce --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-77482.C @@ -0,0 +1,6 @@ +// PR c++/77482 +// { dg-do compile { target c++11 } } + +constexpr auto x; // { dg-error "declaration\[^\n\r]*has no initializer" } +extern struct S s; +constexpr auto y = s; // { dg-error "has incomplete type" } -- cgit v1.2.1