This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] c++/61198 backport to gcc-4.9


I wanted to backport r232232 (aka 2edb91b1) which helps with the
compile-time regression tracked by PR60976. On the gcc-4.9 branch
it produces lots of ICEs due to PR61198, which was only fixed for
gcc-5.

This backports the PR61198 fix to the 4.9 branch, which resolves the
ICEs I'm seeing and so would let me also backport the libstdc++
change.

Is this safe for 4.9?

Tested powerpc64le-linux, no new failures.

commit d98a90afa73cecd8c62a93381cde2077471753f2
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Wed Feb 10 12:41:26 2016 +0000

    Backport PR c++/61198 fix
    
    gcc:
    	2014-12-19  Kai Tietz  <ktietz@redhat.com>
    
    	PR c++/61198
    	* pt.c (most_general_template): Don't break for template-alias.
    
    gcc/testsuite:
    
    	2014-12-19  Kai Tietz  <ktietz@redhat.com>
    		    Paolo Carlini  <paolo.carlini@oracle.com>
    
    	PR c++/61198
    	* g++.dg/cpp0x/alias-decl-45.C: New file.

diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 60e9671..7485b95 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -18873,6 +18873,7 @@ most_general_template (tree decl)
 	break;
 
       if (CLASS_TYPE_P (TREE_TYPE (decl))
+	  && !TYPE_DECL_ALIAS_P (TYPE_NAME (TREE_TYPE (decl)))
 	  && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
 	break;
 
diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-45.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-45.C
new file mode 100644
index 0000000..e3434f5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-45.C
@@ -0,0 +1,24 @@
+// PR c++/61198
+// { dg-do compile { target c++11 } }
+
+template<int herp, typename derp_t>
+struct broken
+{
+	template<typename target_t>
+	using rebind = broken<herp, target_t>;
+};
+
+template<typename derp_t>
+struct broken<2, derp_t>
+{
+	template<typename target_t>
+	using rebind = broken<2, target_t>;
+};
+
+int main(int argc, char **argv)
+{		
+	broken<2, float>::rebind<double> u;
+
+	return 0;
+}
+

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]