[cfe-commits] [PATCH] Array exception type decay to pointer automatically
Richard Smith
richard at metafoo.co.uk
Tue Nov 20 20:10:28 PST 2012
On Tue, Nov 20, 2012 at 7:20 PM, WenHan Gu (谷汶翰) <wenhan.gu at gmail.com> wrote:
> Hi Richard,
> Thanks your comments.
>
> However, I have no idea whether I should do this patch.
> I've tested by gcc, clang and searched C++ spec draft n3242, the result is
> that both GCC and Clang failed on that and I cannot find any wording on this
> issue.
I suggest you switch to using n3485.
15.4/2:
A type denoted in an exception-specification shall not denote an
incomplete type other than a class
currently being defined or an rvalue reference type. A type denoted in
an exception-specification shall not
denote a pointer or reference to an incomplete type, other than cv
void* or a pointer or reference to a
class currently being defined. A type cv T, “array of T”, or “function
returning T” denoted in an exception-
specification is adjusted to type T, “pointer to T”, or “pointer to
function returning T”, respectively.
We are supposed to apply the decay from S[10] to S* before we check
whether it's an incomplete-or-being-defined type or a pointer to an
incomplete-or-being-defined type, so S[10] is OK.
> Could you teach me more or could some else help?
> Thanks!
>
> 1 struct S {
> 2 void foo() throw (S[10]) { throw 0; } // Both gcc and clang failed
> on this function
> 3 void bar() throw (S) { throw 0; }
> 4 };
> 5
> 6 int main() {
> 7 S().foo();
> 8 S().bar();
> 9 }
>
>
>
>
> 2012/11/21 Richard Smith <richard at metafoo.co.uk>
>>
>> Hi,
>>
>> On Tue, Nov 20, 2012 at 1:54 AM, WenHan Gu (谷汶翰) <wenhan.gu at gmail.com>
>> wrote:
>> > Hi all,
>> >
>> > I've done the patch and testcase to fix PR14338.
>> > http://llvm.org/bugs/show_bug.cgi?id=14388
>> >
>> > Here's the patch, please review:
>> > http://llvm.org/bugs/attachment.cgi?id=9574&action=diff
>> >
>> >
>> > Is that okay to commit?
>>
>> A matching update is needed in SemaTemplateInstantiateDecl. Perhaps
>> you could put this logic into CheckSepcifiedExceptionType (and either
>> return the modified type or pass it through by reference)? One of the
>> checks in CheckSpecifiedExceptionType also needs updating. With your
>> patch, we still reject this:
>>
>> struct S {
>> void f() throw (S[10]);
>> };
>>
>> ... but we should accept it, because the type 'S' is supposed to be
>> considered as complete in exception specifications inside its body.
>
>
>
>
> --
> Best regards,
> Wen-Han Gu (Nowar)
>
More information about the cfe-commits
mailing list