From: Stefan Behnel Date: Wed, 3 Nov 2010 20:24:09 +0000 (+0100) Subject: make sure the cname really is unique when overriding its signature X-Git-Tag: 0.14.alpha0~236 X-Git-Url: http://git.tremily.us/gitweb.cgi?a=commitdiff_plain;h=9abfe020a45d5737b744602490a5566ca738fbc4;p=cython.git make sure the cname really is unique when overriding its signature --- diff --git a/Cython/Compiler/Symtab.py b/Cython/Compiler/Symtab.py index 8f176c8e..fb84b836 100644 --- a/Cython/Compiler/Symtab.py +++ b/Cython/Compiler/Symtab.py @@ -552,7 +552,18 @@ class Scope(object): warning(pos, "Function '%s' previously declared as '%s'" % (name, entry.visibility), 1) if not entry.type.same_as(type): if visibility == 'extern' and entry.visibility == 'extern': - if self.is_cpp() or (cname and entry.cname and cname != entry.cname): + can_override = False + if self.is_cpp(): + can_override = True + elif cname: + # if all alternatives have different cnames, + # it's safe to allow signature overrides + for alt_entry in entry.all_alternatives(): + if not alt_entry.cname or cname == alt_entry.cname: + break # cname not unique! + else: + can_override = True + if can_override: temp = self.add_cfunction(name, type, pos, cname, visibility, modifiers) temp.overloaded_alternatives = entry.all_alternatives() entry = temp