Hi all, This is the fix for bug 582 (https://bugs.open64.net/show_bug.cgi?id=582). Can gatekeeper help to review it?
I attached the test case (min.i) and patch (582.patch). You can reproduce the
problem with "openCC -O0 -g -c min.i".
This bug caused by merge user declared "log" function with built-in "log"
function. The front-end forgets to copy GSPIN related fields and declaration
assembler name.
If you are interested in the analysis process, here it is:
Breakpoints you need to setup:
b name-lookup.c:615 if strcmp(name.identifier.id.str, "log") == 0
b passes.c:148
Compiler will initial built-in functions first, so those functions declared in
osprey-gcc-4.2.0/gcc/builtins.def will be translated to gcc tree. And built-in
"log" will be translated twice, one into global namespace, one into std
namespace.
Then the second breakpoint is triggered. This method checks whether the
declared function has "alias" attribute or not. If the answer is yes, it will
translate gcc tree to open64 gspin tree:
#ifdef KEY
/* Put aliases into the list of decls emitted by g++ so that we can
* iterate through the list when expanding aliases to WHIRL. An alias
* can be expanded only if its target, which can be another alias, is
* expanded. Bug 4393. */
if (flag_spin_file)
gspin_gxx_emits_decl(decl);
#endif
In this test case, it declares:
extern __typeof(pthread_once) __gthrw_pthread_once __attribute__
((__weakref__("pthread_once")));
__weakref__ means "alias" attribute, so compiler start translation at this
time. At this time, only built-in log can be found by compiler.
After that, compiler parsed user defined "log". It then find out we have
already defined a "log" in the global namespace. (name-lookup.c, line 623) So
it tries to merge the declarations. (duplicate_decls function in decl.c)
I patched this file, to let it also copy gspin related fields and declaration
assembler name.
Then after compiler parsed the whole file, it will translate gcc tree to gspin
tree again. Without the patch, it just re-use the built-in log gspin tree. With
this patch, it will rebuild the log gspin tree using the new log declaration.
Regards,
Roger
min.i
Description: min.i
582.patch
Description: 582.patch
------------------------------------------------------------------------------ This SF.net email is sponsored by Make an app they can't live without Enter the BlackBerry Developer Challenge http://p.sf.net/sfu/RIM-dev2dev
_______________________________________________ Open64-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/open64-devel
