More __comp_ctor () woes
Brendon Costa
bcosta@avdat.com.au
Tue Oct 24 03:43:00 GMT 2006
Sorry that my previous email was unclear. I have tried to clarify what i
meant in this email by answering your questions.
Andrew Pinski wrote:
>On Tue, 2006-10-24 at 02:30 +0000, Brendon Costa wrote:
>
>
>>I am trying to find the corresponding constructor from the basic_string
>>class that should be called in place of the __comp_ctor function. There
>>seems to be no FUNCTION_DECL node for the constructor:
>>
>>basic_string(::char const*, ::char const*, ::std::allocator<char> const&)
>>
>>which I would expect if there is a __comp_ctor () with those parameters.
>>
>>
>
>Wait you say you have a function decl but cannot find the function decl
>for the constructor? I don't understand what you are getting at here.
>Do you understand how templates work because that seems like where you
>are getting lost. Templates are instantiated with different types, in
>this case, with _InputIterator being "const char*"
>
>
>
If there is a simple class like:
class MyClass
{
MyClass()
{}
};
int main()
{
MyClass c;
return 0;
}
This will produce at least 3 FUNCTION_DECL nodes:
1) main()
2) MyClass::MyClass(MyClass* this)
3) MyClass::__comp_ctor (MyClass* this)
I call (2) a "User Constructor" for want of a better name. But note that
BOTH (2) and (3) are considered "constructors" as returned by
DECL_CONSTRUCTOR_P(fndecl)
I have the FUNCTION_DECL node for (3) and want to find (2) from it.
Basically as i understand it, main() will call (3) using a CALL_EXPR
when it constructs the instance of MyClass. This __comp_ctor (MyClass*
this) function (Which does not have an implementation i can find with
DECL_SAVED_TREE) should call (2)
I have noticed that all __comp_ctor () and __base_ctor () FUNCTION_DECL
nodes seem to correspond to a "User Constructor" for the same class that
the __comp_ctor () was found in with exactly the same parameter list as
the __comp_ctor () has.
For example:
SomeClass::__comp_ctor (const SomeClass&)
will some-how call:
SomeClass::SomeClass(const SomeClass&)
and:
SomeClass::__comp_ctor (int)
will some-how call:
SomeClass::SomeClass(int)
So hopefully that helps to understand what i mean by the two
FUNCTION_DECL nodes.
The problem is that with the code in the previous email, i cant seem to
find the associated "User Constructor" FUNCTION_DECL node given the
__comp_ctor constructor FUNCTION_DECL node. In particular:
std::basic_string::__comp_ctor (::char const*, ::char const*, ::std::allocator<char> const&)
exists, but i cant seem to find an associated:
std::basic_string::basic_string(::char const*, ::char const*, ::std::allocator<char> const&)
NOTE: I have left the template parameters out to make this easier to read.
>>My questions are:
>>
>>1) Which of the basic_string constructors would be being called in this
>>situation?
>>
>>
>
>
>template<class _InputIterator>
>basic_string(_InputIterator, _InputIterator, const _Alloc& );
>
>Instantiated with _InputIterator being "const char*".
>
>
>
Ignore this question. I think i know the answer, and yes i do understand
how template instanciation works. I just wanted someone to say yes or no
as to wether the above constructor from std::basic_string is the one
that is being used when compiling the code I provided.
In particular, is the code I provided calling a different constructor
from within std::basic_string class or is it instanciating this
templated cosntructor and using the instanciated constructor with "const
char*" as the template parameter?
I think the answer is yes it is using an instanciation of this
constructor, but I wanted clarification.
I was interested in the answer to this as i am trying to reproduce the
problem with the __comp_ctor () FUNCTION_DECL in a small test case (Not
using std::basic_string). I have tried but seem unable to reproduce the
problem in a smaller test case currently. An answer to that question
above might help me in finding what exactly is causing the problem i
have encountered.
Thanks,
Brendon.
More information about the Gcc
mailing list