public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/55443] New: ICE for some placement new expressions inside noexcept operator
@ 2012-11-22 18:22 vlukas at gmx dot de
2012-11-22 19:06 ` [Bug c++/55443] " paolo.carlini at oracle dot com
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: vlukas at gmx dot de @ 2012-11-22 18:22 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55443
Bug #: 55443
Summary: ICE for some placement new expressions inside noexcept
operator
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: vlukas@gmx.de
Created attachment 28762
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28762
Preprocessed c++ source using placement new inside noexcept
The attached code causes an ICE with both GCC 4.7.2 and a GCC 4.8.0 prerelease.
Output of "c++ -v" for the latter is:
-----------------------------------------------------------
Using built-in specs.
COLLECT_GCC=/home/lima/vanilla_installs/gcc_and_tools/bin/c++
COLLECT_LTO_WRAPPER=/home/lima/vanilla_installs/gcc_and_tools/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc_svn/configure
--prefix=/home/lima/vanilla_installs/gcc_and_tools --enable-__cxa_atexit
--enable-languages=c,c++ --disable-nls --disable-multilib
Thread model: posix
gcc version 4.8.0 20121122 (experimental) (GCC)
-----------------------------------------------------------
The command line was:
c++ -std=c++0x noexcept_operator_constexpr.ice.ii
That triggers the following output:
-------------------------------------------------------
noexcept_operator_constexpr.ice.cc: In function 'int main()':
noexcept_operator_constexpr.ice.cc:9:30: in constexpr expansion of
'((X*)<anonymous>)->X::X()'
noexcept_operator_constexpr.ice.cc:9:31: internal compiler error: in
cxx_eval_call_expression, at cp/semantics.c:6687
};
^
0x6b742f cxx_eval_call_expression
../../gcc_svn/gcc/cp/semantics.c:6686
0x6b05bb cxx_eval_constant_expression
../../gcc_svn/gcc/cp/semantics.c:7672
0x6b1f28 is_sub_constant_expr(tree_node*)
../../gcc_svn/gcc/cp/semantics.c:8047
0x6732a7 check_noexcept_r
../../gcc_svn/gcc/cp/except.c:1162
0xcaa5bb walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, pointer_set_t*, tree_node* (*)(tree_node**, int*, tree_node*
(*)(tree_node**, int*, void*), void*, pointer_set_t*))
../../gcc_svn/gcc/tree.c:10655
0xcaaa9d walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, pointer_set_t*, tree_node* (*)(tree_node**, int*, tree_node*
(*)(tree_node**, int*, void*), void*, pointer_set_t*))
../../gcc_svn/gcc/tree.c:10909
0xcaaa9d walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*),
void*, pointer_set_t*, tree_node* (*)(tree_node**, int*, tree_node*
(*)(tree_node**, int*, void*), void*, pointer_set_t*))
../../gcc_svn/gcc/tree.c:10909
0xcaa0e4 walk_tree_without_duplicates_1(tree_node**, tree_node*
(*)(tree_node**, int*, void*), void*, tree_node* (*)(tree_node**, int*,
tree_node* (*)(tree_node**, int*, void*), void*, pointer_set_t*))
../../gcc_svn/gcc/tree.c:10936
0x672e6d expr_noexcept_p(tree_node*, int)
../../gcc_svn/gcc/cp/except.c:1239
0x673004 finish_noexcept_expr(tree_node*, int)
../../gcc_svn/gcc/cp/except.c:1224
0x62d116 cp_parser_unary_expression
../../gcc_svn/gcc/cp/parser.c:6554
0x62db17 cp_parser_binary_expression
../../gcc_svn/gcc/cp/parser.c:7344
0x62dfb6 cp_parser_assignment_expression
../../gcc_svn/gcc/cp/parser.c:7569
0x62fee2 cp_parser_expression
../../gcc_svn/gcc/cp/parser.c:7720
0x6305fe cp_parser_expression_statement
../../gcc_svn/gcc/cp/parser.c:9000
0x626557 cp_parser_statement
../../gcc_svn/gcc/cp/parser.c:8852
0x6277de cp_parser_statement_seq_opt
../../gcc_svn/gcc/cp/parser.c:9118
0x627926 cp_parser_compound_statement
../../gcc_svn/gcc/cp/parser.c:9072
0x638e33 cp_parser_function_body
../../gcc_svn/gcc/cp/parser.c:17648
0x638e33 cp_parser_ctor_initializer_opt_and_function_body
../../gcc_svn/gcc/cp/parser.c:17684
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.
-----------------------------------------------------------
Some variations of the attached code crash the compiler too. One of them is:
------------------------------------------------------------
#include <stddef.h>
struct X {
X() = default;
X(int);
void* operator new(size_t, void*) noexcept;
};
X x;
bool b = noexcept(new(0) X);
-----------------------------------------------------------------
With respect to the code snippet immediately above, the compiler does not
produce an ICE when any single item of the following is applied:
1. Removing the variable definition of "x".
2. Changing the variable definition to "X x{0};".
3. Removing the noexcept specifier from the operator new declaration.
4. Removing the constructor declaration "X(int);"
5. Changing the final line to "bool b = noexcept(new(0) X{});".
(Doing more than one of the above also seems to make the ICE go away, but I
have not tested every combination.)
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/55443] ICE for some placement new expressions inside noexcept operator
2012-11-22 18:22 [Bug c++/55443] New: ICE for some placement new expressions inside noexcept operator vlukas at gmx dot de
@ 2012-11-22 19:06 ` paolo.carlini at oracle dot com
2014-11-18 12:25 ` paolo at gcc dot gnu.org
2014-11-18 12:26 ` paolo.carlini at oracle dot com
2 siblings, 0 replies; 4+ messages in thread
From: paolo.carlini at oracle dot com @ 2012-11-22 19:06 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55443
Paolo Carlini <paolo.carlini at oracle dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2012-11-22
CC| |jason at gcc dot gnu.org,
| |paolo.carlini at oracle dot
| |com
Ever Confirmed|0 |1
--- Comment #1 from Paolo Carlini <paolo.carlini at oracle dot com> 2012-11-22 19:06:42 UTC ---
I find this disturbing. How the evaluation of:
noexcept(new(0) X);
can possibly be affected be a previous:
X x;
???
Jason, any tip?
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/55443] ICE for some placement new expressions inside noexcept operator
2012-11-22 18:22 [Bug c++/55443] New: ICE for some placement new expressions inside noexcept operator vlukas at gmx dot de
2012-11-22 19:06 ` [Bug c++/55443] " paolo.carlini at oracle dot com
@ 2014-11-18 12:25 ` paolo at gcc dot gnu.org
2014-11-18 12:26 ` paolo.carlini at oracle dot com
2 siblings, 0 replies; 4+ messages in thread
From: paolo at gcc dot gnu.org @ 2014-11-18 12:25 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55443
--- Comment #2 from paolo at gcc dot gnu.org <paolo at gcc dot gnu.org> ---
Author: paolo
Date: Tue Nov 18 12:24:34 2014
New Revision: 217711
URL: https://gcc.gnu.org/viewcvs?rev=217711&root=gcc&view=rev
Log:
2014-11-18 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/55443
* g++.dg/cpp0x/noexcept26.C: New.
* g++.dg/cpp0x/noexcept27.C: Likewise.
Added:
trunk/gcc/testsuite/g++.dg/cpp0x/noexcept26.C
trunk/gcc/testsuite/g++.dg/cpp0x/noexcept27.C
Modified:
trunk/gcc/testsuite/ChangeLog
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/55443] ICE for some placement new expressions inside noexcept operator
2012-11-22 18:22 [Bug c++/55443] New: ICE for some placement new expressions inside noexcept operator vlukas at gmx dot de
2012-11-22 19:06 ` [Bug c++/55443] " paolo.carlini at oracle dot com
2014-11-18 12:25 ` paolo at gcc dot gnu.org
@ 2014-11-18 12:26 ` paolo.carlini at oracle dot com
2 siblings, 0 replies; 4+ messages in thread
From: paolo.carlini at oracle dot com @ 2014-11-18 12:26 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55443
Paolo Carlini <paolo.carlini at oracle dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
CC|jason at gcc dot gnu.org, |
|paolo.carlini at oracle dot com |
Resolution|--- |FIXED
Target Milestone|--- |5.0
--- Comment #3 from Paolo Carlini <paolo.carlini at oracle dot com> ---
Fixed.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-11-18 12:26 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-11-22 18:22 [Bug c++/55443] New: ICE for some placement new expressions inside noexcept operator vlukas at gmx dot de
2012-11-22 19:06 ` [Bug c++/55443] " paolo.carlini at oracle dot com
2014-11-18 12:25 ` paolo at gcc dot gnu.org
2014-11-18 12:26 ` paolo.carlini at oracle dot com
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).