public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [C++ Patch] PR 52487
@ 2012-03-20 15:15 Paolo Carlini
  2012-03-20 19:22 ` Jason Merrill
  0 siblings, 1 reply; 9+ messages in thread
From: Paolo Carlini @ 2012-03-20 15:15 UTC (permalink / raw)
  To: gcc-patches; +Cc: Jason Merrill

[-- Attachment #1: Type: text/plain, Size: 690 bytes --]

Hi,

this regression is about literal_type_p ICEing for types which cannot be 
completed. Indeed, for the testcase, complete_type cannot complete the 
type but doesn't error out either, just returns the type as-is, and the 
gcc_assert triggers. We could imagine handling such types in the caller 
- check_field_decls - but in my opinion makes more sense to just allow 
such types and return false. I also considered changing literal_type_p 
to use complete_type_or_else but then it's easy to produce duplicate 
diagnostics, for example. What do you think?

Tested x86_64-linux.

Thanks,
Paolo.

PS: eventually I guess we want to fix this in mainline and 4.7.1.

///////////////////////////

[-- Attachment #2: CL_52487 --]
[-- Type: text/plain, Size: 288 bytes --]

/cp
2012-03-20  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/52487
	* semantics.c (literal_type_p): Simply return false for types
	which cannot be completed.

/testsuite
2012-03-20  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/52487
	* g++.dg/cpp0x/lambda/lambda-ice7.C: New.

[-- Attachment #3: patch_52487 --]
[-- Type: text/plain, Size: 977 bytes --]

Index: testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C
===================================================================
--- testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C	(revision 0)
+++ testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C	(revision 0)
@@ -0,0 +1,9 @@
+// PR c++/52487
+// { dg-options "-std=c++0x" }
+
+struct A;         // { dg-error "forward declaration" }
+
+void foo(A& a)
+{
+  [=](){a;};      // { dg-error "invalid use of incomplete type" }
+}
Index: cp/semantics.c
===================================================================
--- cp/semantics.c	(revision 185571)
+++ cp/semantics.c	(working copy)
@@ -5610,8 +5610,7 @@ literal_type_p (tree t)
   if (CLASS_TYPE_P (t))
     {
       t = complete_type (t);
-      gcc_assert (COMPLETE_TYPE_P (t) || errorcount);
-      return CLASSTYPE_LITERAL_P (t);
+      return COMPLETE_TYPE_P (t) && CLASSTYPE_LITERAL_P (t);
     }
   if (TREE_CODE (t) == ARRAY_TYPE)
     return literal_type_p (strip_array_types (t));

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2012-03-23  1:02 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-20 15:15 [C++ Patch] PR 52487 Paolo Carlini
2012-03-20 19:22 ` Jason Merrill
2012-03-20 20:17   ` Paolo Carlini
2012-03-20 20:38     ` Paolo Carlini
2012-03-22 14:49       ` Jason Merrill
2012-03-22 17:01         ` Paolo Carlini
2012-03-22 17:16           ` Gabriel Dos Reis
2012-03-22 18:29           ` Jason Merrill
2012-03-23  1:02             ` Paolo Carlini

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).