Displaying 8 results from an estimated 8 matches for "return_null_tree".
2007 Dec 08
2
[LLVMdev] Darwin vs exceptions
...ses the unwinder to go into a loop.
this is the bit I don't understand. Why does it go
into a loop? How can the unwinder possibly know that
the original code did not have a catch-all, since we
tell it which catches there are and we say: there is
a catch-all!
> > - lang_eh_catch_all = return_null_tree;
> > +/* lang_eh_catch_all = return_null_tree;*/
> Ok, cool :) Duncan, Anton, what do you guys think about this?
This is wrong - it breaks the semantics of invoke and causes
eh to not work properly in some cases (see my email to Dale).
Ciao,
Duncan.
2007 Dec 08
0
[LLVMdev] Darwin vs exceptions
...========================
> --- cp/except.c (revision 44663)
> +++ cp/except.c (working copy)
> @@ -104,7 +104,7 @@
> lang_eh_runtime_type = build_eh_type_type;
> lang_protect_cleanup_actions = &cp_protect_cleanup_actions;
> /* LLVM local */
> - lang_eh_catch_all = return_null_tree;
> +/* lang_eh_catch_all = return_null_tree;*/
> }
>
> /* Returns an expression to be executed if an unhandled exception is
>
> and that works well for me; i.e., the gcc tests that exercise
> exceptions work as well with the
> two patches above (on x86) as they did befo...
2007 Dec 08
0
[LLVMdev] Darwin vs exceptions
...e IP of the throw and Unwind_Resume call were different, but when
caching the CFA they are the same, which confuses Unwind_Resume.
(This is darwin's unwinder but I think the patch I quoted is the only
relevant change to generic gcc code.
Could be wrong.)
>>> - lang_eh_catch_all = return_null_tree;
>>> +/* lang_eh_catch_all = return_null_tree;*/
>
>> Ok, cool :) Duncan, Anton, what do you guys think about this?
>
> This is wrong - it breaks the semantics of invoke and causes
> eh to not work properly in some cases (see my email to Dale).
Well, it works a lot bet...
2007 Dec 08
4
[LLVMdev] Darwin vs exceptions
...========================================================
--- cp/except.c (revision 44663)
+++ cp/except.c (working copy)
@@ -104,7 +104,7 @@
lang_eh_runtime_type = build_eh_type_type;
lang_protect_cleanup_actions = &cp_protect_cleanup_actions;
/* LLVM local */
- lang_eh_catch_all = return_null_tree;
+/* lang_eh_catch_all = return_null_tree;*/
}
/* Returns an expression to be executed if an unhandled exception is
and that works well for me; i.e., the gcc tests that exercise
exceptions work as well with the
two patches above (on x86) as they did before.
Now I need some help:
- Why was...
2007 Dec 09
1
[LLVMdev] Darwin vs exceptions
...is isn't simply a bug in where labels are placed etc, the
frame info or the exception table setup etc?
> (This is darwin's unwinder but I think the patch I quoted is the only
> relevant change to generic gcc code.
> Could be wrong.)
>
> >>> - lang_eh_catch_all = return_null_tree;
> >>> +/* lang_eh_catch_all = return_null_tree;*/
> >
> >> Ok, cool :) Duncan, Anton, what do you guys think about this?
> >
> > This is wrong - it breaks the semantics of invoke and causes
> > eh to not work properly in some cases (see my email to Da...
2007 Dec 10
0
[LLVMdev] Darwin vs exceptions
...I guess an easy but undesirable fallback position is to tell the
> inliner not to inline anything that invokes Unwind_Resume.
If you push a "cleanup" instead of a catch-all on Darwin, does
everything work? This is exactly what you get if you apply your
patch
- lang_eh_catch_all = return_null_tree;
+/* lang_eh_catch_all = return_null_tree;*/
Ciao,
Duncan.
2007 Dec 10
3
[LLVMdev] Darwin vs exceptions
On Dec 9, 2007, at 1:01 PM, Duncan Sands wrote:
> Hi Dale,
>
>> #include <cstdio>
>> class A {
>> public:
>> A() {}
>> ~A() {}
>> };
>> void f() {
>> A a;
>> throw 5.0;
>> }
>> main() {
>> try {
>> f();
>> } catch(...) { printf("caught\n"); }
>> }
>
> this example
2007 Dec 10
3
[LLVMdev] Darwin vs exceptions
...e fallback position is to tell the
>> inliner not to inline anything that invokes Unwind_Resume.
>
> If you push a "cleanup" instead of a catch-all on Darwin, does
> everything work? This is exactly what you get if you apply your
> patch
>
> - lang_eh_catch_all = return_null_tree;
> +/* lang_eh_catch_all = return_null_tree;*/
No, things are much better than there were, but inlining functions
that call Unwind_Resume still causes the problem we've been talking
about.
Disabling that as well makes everything work.