Compiler crash in AnalyseExpressionsTransform / overload resolution with templates
Hi, I'm trying to improve the declarations in libcpp.string and cover them with unit tests. In this process, I've stumbled upon a compiler crash in overload resolution. A simple reproducer below; if the last line is uncommented, the code compiles just fine: cdef extern from *: cdef cppclass string_helper: cppclass iterator: pass string_helper& insert(size_t, char*, size_t) iterator insert[input_iterator](iterator, input_iterator, input_iterator) def test_insert(): cdef string_helper s cdef string_helper.iterator it s.insert[string_helper.iterator](it, it, it) s.insert(0, <char*>0, 0) zaytsev@work:~/src/cython$ ./cython-git/cython.py --cplus crash.pyx Error compiling Cython file: ------------------------------------------------------------ ... def test_insert(): cdef string_helper s cdef string_helper.iterator it s.insert[string_helper.iterator](it, it, it) s.insert(0, <char*>0, 0) ^ ------------------------------------------------------------ crash.pyx:13:12: Compiler crash in AnalyseExpressionsTransform ModuleNode.body = StatListNode(crash.pyx:1:0) StatListNode.stats[1] = DefNode(crash.pyx:9:0, modifiers = [...]/0, name = u'test_insert', py_wrapper_required = True, reqd_kw_flags_cname = '0', used = True) File 'Nodes.py', line 430, in analyse_expressions: StatListNode(crash.pyx:10:4) File 'Nodes.py', line 4755, in analyse_expressions: ExprStatNode(crash.pyx:13:12) File 'ExprNodes.py', line 519, in analyse_expressions: SimpleCallNode(crash.pyx:13:12, analysed = True, use_managed_ref = True) File 'ExprNodes.py', line 4938, in analyse_types: SimpleCallNode(crash.pyx:13:12, analysed = True, use_managed_ref = True) File 'ExprNodes.py', line 4992, in analyse_c_function_call: SimpleCallNode(crash.pyx:13:12, analysed = True, use_managed_ref = True) Compiler crash traceback from this point on: File "/home/zaytsev/src/cython/cython-git/Cython/Compiler/ExprNodes.py", line 4992, in analyse_c_function_call entry = PyrexTypes.best_match(args, alternatives, self.pos, env) File "/home/zaytsev/src/cython/cython-git/Cython/Compiler/PyrexTypes.py", line 4133, in best_match [pattern.type.deduce_template_params(actual) for (pattern, actual) in zip(func_type.args, arg_types)], File "/home/zaytsev/src/cython/cython-git/Cython/Compiler/PyrexTypes.py", line 3594, in deduce_template_params elif self.empty_declaration_code() == actual.template_type.empty_declaration_code(): AttributeError: 'CIntType' object has no attribute 'template_type' -- Sincerely yours, Yury V. Zaytsev
participants (1)
-
Yury V. Zaytsev