[LLVMbugs] [Bug 6457] New: Clang fails to model explicitly created temporaries correctly
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Mon Mar 1 17:13:15 PST 2010
http://llvm.org/bugs/show_bug.cgi?id=6457
Summary: Clang fails to model explicitly created temporaries
correctly
Product: clang
Version: trunk
Platform: PC
OS/Version: All
Status: NEW
Severity: normal
Priority: P5
Component: C++
AssignedTo: unassignedclangbugs at nondot.org
ReportedBy: chandlerc at gmail.com
CC: llvmbugs at cs.uiuc.edu, dgregor at apple.com
The summary is based on the discussion with John and Doug about the cause of a
rather mysterious diagnostic for entirely valid C++ code. Here is the test case
chandlerc at osiris build % cat t.cc
template <typename T> struct X { explicit X(T* p = 0) { }; };
template <typename T> struct Y { Y(int, const T& x); };
struct A { };
template <typename T>
struct B {
B() : y(0, X<A>()) { }
Y<X<A> > y;
};
B<int> b;
chandlerc at osiris build % ./bin/clang -fsyntax-only t.cc
t.cc:6:9: error: no matching constructor for initialization of 'Y<X<struct A>
>'
B() : y(0, X<A>()) { }
^
t.cc:9:8: note: in instantiation of member function 'B<int>::B' requested here
B<int> b;
^
t.cc:2:34: note: candidate constructor not viable: no known conversion from
'struct A *' to 'struct X<struct A> const' for 2nd argument
template <typename T> struct Y { Y(int, const T& x); };
^
t.cc:2:30: note: candidate constructor (the implicit copy constructor) not
viable: requires 1 argument, but 2 were provided
template <typename T> struct Y { Y(int, const T& x); };
^
4 diagnostics generated.
After some digging and discussion, the root cause of the problem is that we are
somehow no longer building CXXTemporaryObjectExpr objects to represent explict
calls to constructors, and instead are building a CXXConstructCall, which as
Doug said, should actually be called CXXImplicitConstructCall or some such. In
fact, we never construct CXXTemporaryObjectExprs any more, probably a bad sign.
;]
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list