Hi!
I have testcase which creduce FAIl to reduce.
But i'm not sure what is the root of the problem
-- may be i incorrectly adopt creduce to new clang (see prev.message)
-- may be there are some (latent) bugs in creduce + clang-trunk +
gcc-4.7 + Fedora 18. And bugs prevent creduce to work correctly
at least, there are indetetminism : i run creduce 2 times and got two
different output files.
i'm not sure how it may be related to err.messages
from shel-init:getcwd : "getcwd: cannot access parent directories'
or to hang compiler' invocations...
i'll try to investigate them. But it'll a different story.
-- may be creduce cant do such transformation
Original .ii file was 14KLOC, after creduce 33 lines, after manual
reduction 6 lines
how to reproduce
1) use clang-current, i use clang version 3.3 (trunk 179456)
2) compile .ii file (see at end of message)
clang++ -fsyntax-only callback.ii
must fail with err.message
callback.ii:5:29: error: cannot initialize a variable of type
'CPC_get_thread_id_Callback *' (aka 'unsigned long (*)()') with an
lvalue of type 'unsigned long ()'
CPC_get_thread_id_Callback *ptr = get_thread_id;
^ ~~~~~~~~~~~~~
1 error generated.
Thank You,
Dmitry
creduced callback.ii
--------------------------
extern "C" typedef unsigned long
__attribute__ ((regparm (0))) CPC_get_thread_id_Callback ();
typedef struct
{
CPC_get_thread_id_Callback *get_thread_id;
}
CPC_LOG_CONFIG;
struct A
{
CPC_LOG_CONFIG logConfig;
};
typedef struct
{
A CSPConfig;
}
PrivatePlugIn;
extern "C" typedef struct
{
int fSMP;
int nCPUs;
}
CPC_LFMM_CONFIG;
PrivatePlugIn *PI (int *);
unsigned long get_thread_id ();
int
do_init ()
{
int *plg;
CPC_LFMM_CONFIG memcfg;
memcfg.nCPUs = memcfg.fSMP ? : 0;
PI (plg)->CSPConfig.logConfig.get_thread_id = get_thread_id;
return 0;
}
--------------------------
manually reduced
---------------------------
extern "C" typedef unsigned long
__attribute__ ((regparm (0))) CPC_get_thread_id_Callback ();
unsigned long get_thread_id ();
CPC_get_thread_id_Callback *ptr = get_thread_id;
--------------------------
2013/4/5 Yang Chen <[email protected]>:
> Thanks, Dmitry!
>
> - Yang
>
>
> Дмитрий Дьяченко wrote:
>>
>> Hi,
>>
>> To build current creduce from Git with current clang from trunk it's
>> needed for me 4 additional patches:
>>
>> follow API changes
>> - clang_delta/RemoveNamespace.cpp
>> - clang_delta/Transformation.cpp
>> - clang_delta/TransformationManager.cpp
>>
>> follow changes in include-files' layout
>> - m4/ax_llvm.m4
>>
>> creduce-Git : today, branch master
>> llvm+clang: today, trunk, clang version 3.3 (trunk 178679)
>> Target: x86_64-unknown-linux-gnu
>> Thread model: posix
>>
>> Fedora 18 / x86_64
>>
>> Modified creduce
>> - PASS tests/run_tests
>> - successfully reduce 4Mb .ii into 2Kb
>>
>> Thanks,
>> Dmitry
>>
>>