diff mbox

[C++] PR 51265

Message ID 4ECBD896.6030805@oracle.com
State New
Headers show

Commit Message

Paolo Carlini Nov. 22, 2011, 5:15 p.m. UTC
Hi,

this is a 4.6/4.7 Regression (the ICE happens also in C++98 mode with 
__decltype).

The problem manifest itself as unhandled PTRMEM_CST in 
finish_decltype_type, and I'm avoiding it by just handling it like 
INTEGER_CST. Is it the correct/best thing to do? Anyway patch passes 
testing on x86_64-linux.

Thanks,
Paolo.

//////////////////////
/cp
2011-11-22  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/51265
	* semantics.c (finish_decltype_type): Handle PTRMEM_CST.

/testsuite
2011-11-22  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/51265
	* g++.dg/cpp0x/decltype36.C: New.

Comments

Jason Merrill Nov. 22, 2011, 8:24 p.m. UTC | #1
OK, just adjust the comment to add "or non-type template parameter".

Jason
diff mbox

Patch

Index: testsuite/g++.dg/cpp0x/decltype36.C
===================================================================
--- testsuite/g++.dg/cpp0x/decltype36.C	(revision 0)
+++ testsuite/g++.dg/cpp0x/decltype36.C	(revision 0)
@@ -0,0 +1,21 @@ 
+// PR c++/51265
+// { dg-options -std=c++0x }
+
+struct Funny
+{
+  int print(int);
+};
+
+template<typename X>
+void c();
+
+template<typename X, X ff>
+void xx()
+{
+  c<decltype(ff)>();
+}
+
+int main()
+{
+  xx<int(Funny::*)(int), &Funny::print>();
+}
Index: cp/semantics.c
===================================================================
--- cp/semantics.c	(revision 181627)
+++ cp/semantics.c	(working copy)
@@ -5234,6 +5234,7 @@  finish_decltype_type (tree expr, bool id_expressio
         case BIT_FIELD_REF:
           gcc_unreachable ();
 
+	case PTRMEM_CST:
         case INTEGER_CST:
           /* We can get here when the id-expression refers to an
              enumerator.  */