public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/14618] New: Cannot compile test_thread.cpp from boost
@ 2004-03-17  9:38 schmid at snake dot iap dot physik dot tu-darmstadt dot de
  2004-03-17 13:52 ` [Bug c++/14618] " bangerth at dealii dot org
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: schmid at snake dot iap dot physik dot tu-darmstadt dot de @ 2004-03-17  9:38 UTC (permalink / raw)
  To: gcc-bugs

The following code s.C, reduced from the original file libs/thread/test/
test_thread.cpp included in current boost repository, is rejected by gcc 3.4, 
but accepted by gcc 3.3. I have not investigated but given the error messages I 
guess this problem is also responsible for the failure of the libs/python/test/
embedding.cpp test. This looks like a regression to me. 
 
source code s.C  
 
namespace boost { 
class noncopyable 
{ 
 protected: 
    noncopyable() {} 
    ~noncopyable() {} 
 private: 
    noncopyable( const noncopyable& ); 
    const noncopyable& operator=( const noncopyable& ); 
}; 
 
 
class thread : private noncopyable 
{ 
public: 
    bool operator==(const thread& other) const; 
}; 
} // namespace boost 
 
 
void comparison_thread(boost::thread* parent) 
{ 
    boost::thread thrd; 
    if (thrd == boost::thread()) ; 
} 
 
g++ -v -W -Wall -c s.C  
Reading specs from /usr/local/lib/gcc/i686-pc-linux-gnu/3.4.0/specs 
Configured with: ../gcc/configure --enable-threads=posix --enable-languages=c,c
++,f77,objc --enable-__cxa_atexit --enable-libstdcxx-debug 
Thread model: posix 
gcc version 3.4.0 20040313 (prerelease) 
 /usr/local/libexec/gcc/i686-pc-linux-gnu/3.4.0/cc1plus -quiet -v -D_GNU_SOURCE 
s.C -quiet -dumpbase s.C -mtune=pentiumpro -auxbase s -W -Wall -version -o /
tmp/ccRINl8i.s 
ignoring nonexistent directory "NONE/include" 
ignoring nonexistent directory "/usr/local/lib/gcc/
i686-pc-linux-gnu/3.4.0/../../../../i686-pc-linux-gnu/include" 
#include "..." search starts here: 
#include <...> search starts here: 
 /usr/local/lib/gcc/i686-pc-linux-gnu/3.4.0/../../../../include/c++/3.4.0 
 /usr/local/lib/gcc/i686-pc-linux-gnu/3.4.0/../../../../include/c++/3.4.0/
i686-pc-linux-gnu 
 /usr/local/lib/gcc/i686-pc-linux-gnu/3.4.0/../../../../include/c++/3.4.0/
backward 
 /usr/local/include 
 /usr/local/lib/gcc/i686-pc-linux-gnu/3.4.0/include 
 /usr/include 
End of search list. 
GNU C++ version 3.4.0 20040313 (prerelease) (i686-pc-linux-gnu) 
	compiled by GNU C version 3.4.0 20040313 (prerelease). 
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64274 
s.C: In copy constructor `boost::thread::thread(const boost::thread&)': 
s.C:8: error: `boost::noncopyable::noncopyable(const boost::noncopyable&)' is 
private 
s.C:24: error: within this context 
s.C: In function `void comparison_thread(boost::thread*)': 
s.C:22: warning: unused parameter 'parent'

-- 
           Summary: Cannot compile test_thread.cpp from boost
           Product: gcc
           Version: 3.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: schmid at snake dot iap dot physik dot tu-darmstadt dot
                    de
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14618


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/14618] Cannot compile test_thread.cpp from boost
  2004-03-17  9:38 [Bug c++/14618] New: Cannot compile test_thread.cpp from boost schmid at snake dot iap dot physik dot tu-darmstadt dot de
@ 2004-03-17 13:52 ` bangerth at dealii dot org
  2004-03-17 14:37 ` giovannibajo at libero dot it
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: bangerth at dealii dot org @ 2004-03-17 13:52 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From bangerth at dealii dot org  2004-03-17 13:52 -------
I think that the error is actually valid here. Consider 
------------------- 
class noncopyable  
{  
  protected:  
    noncopyable() {}  
    ~noncopyable() {}  
  private:  
    noncopyable( const noncopyable& );  
    const noncopyable& operator=( const noncopyable& );  
}; 
  
struct D : private noncopyable {};  
 
int foo(const D &); 
  
int i = foo (D()); 
------------------- 
 
You generate a temporary in the call to foo(), and the standard prescribes 
that when binding the temporary to the const reference, the copy constructor 
of D must be accessible, even if it is unused. Thus, the error 
 
g/x> /home/bangerth/bin/gcc-3.4-pre/bin/c++ -c x.cc 
x.cc: In copy constructor `D::D(const D&)': 
x.cc:7: error: `noncopyable::noncopyable(const noncopyable&)' is private 
x.cc:4: error: within this context 
 
seems sensible to me. However, the error messages do not refer to the 
line where we attempt to perform this copy (or where the compiler wants 
to check that the copy constructor is accessible). 
 
Nathan, Gaby, would you agree? 
 
W. 

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |gdr at gcc dot gnu dot org,
                   |                            |nathan at gcc dot gnu dot
                   |                            |org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14618


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/14618] Cannot compile test_thread.cpp from boost
  2004-03-17  9:38 [Bug c++/14618] New: Cannot compile test_thread.cpp from boost schmid at snake dot iap dot physik dot tu-darmstadt dot de
  2004-03-17 13:52 ` [Bug c++/14618] " bangerth at dealii dot org
@ 2004-03-17 14:37 ` giovannibajo at libero dot it
  2004-03-17 15:08 ` gdr at integrable-solutions dot net
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: giovannibajo at libero dot it @ 2004-03-17 14:37 UTC (permalink / raw)
  To: gcc-bugs

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1646 bytes --]


------- Additional Comments From giovannibajo at libero dot it  2004-03-17 14:37 -------
FWIW, I agree. We ran into this very problem also in PR 14528, it seems like 
GCC 3.4.0 is the first compiler to enforce this rule. Not even EDG does this.

Standard paragraphs that apply:

- [basic.lval]/6 says that "D()" is a rvalue.

- [dcl.init.ref]/5, bullet 2 ("Otherwise, the reference shall be to a non-
volatile const type"), sub-bullet 1: 

"If the initializer expression is a rvalue, the refence is bound in one of the 
following ways (the choice is implementation defined):

- The reference is bound to the object represented by the rvalue (see 3.10) 
[...]
— A temporary of type “cv1 T2” [sic] is created, and a constructor is called to 
copy the entire rvalue object into the temporary. The reference is bound to the 
temporary [...]

***The constructor that would be used to make the copy shall be callable 
whether or not the copy is actually done.***"

The last sentence (with my stress) is the one that matters. Either GCC 
internally elides the copy or not, it does not matter, but the copy constructor 
has to be callable.


- [class.temporary]/2 talks about this another time: "Temporaries of class type 
are created in various contexts: binding an rvalue to a reference, [...]. Even 
when the creation of the temporary object is avoided, all the semantic 
restrictions must be respected as if the temporary object was created. 
[Example: even if the copy constructor is not called, all the semantic 
restrictions, such as accessibility (clause 11), shall be satisfied.]".


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14618


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/14618] Cannot compile test_thread.cpp from boost
  2004-03-17  9:38 [Bug c++/14618] New: Cannot compile test_thread.cpp from boost schmid at snake dot iap dot physik dot tu-darmstadt dot de
  2004-03-17 13:52 ` [Bug c++/14618] " bangerth at dealii dot org
  2004-03-17 14:37 ` giovannibajo at libero dot it
@ 2004-03-17 15:08 ` gdr at integrable-solutions dot net
  2004-03-17 15:11 ` gdr at integrable-solutions dot net
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: gdr at integrable-solutions dot net @ 2004-03-17 15:08 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From gdr at integrable-solutions dot net  2004-03-17 15:08 -------
Subject: Re:  Cannot compile test_thread.cpp from boost

"bangerth at dealii dot org" <gcc-bugzilla@gcc.gnu.org> writes:

| You generate a temporary in the call to foo(), and the standard prescribes 
| that when binding the temporary to the const reference, the copy constructor 
| of D must be accessible, even if it is unused. Thus, the error 
|  
| g/x> /home/bangerth/bin/gcc-3.4-pre/bin/c++ -c x.cc 
| x.cc: In copy constructor `D::D(const D&)': 
| x.cc:7: error: `noncopyable::noncopyable(const noncopyable&)' is private 
| x.cc:4: error: within this context 
|  
| seems sensible to me. However, the error messages do not refer to the 
| line where we attempt to perform this copy (or where the compiler wants 
| to check that the copy constructor is accessible). 
|  
| Nathan, Gaby, would you agree? 

Your analysis is correct.  Maybe we would like to put a documentation
for this in the "non bugs" section we used to have.  Any taker?
(that is becoming an FAQ).

-- Gaby


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14618


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/14618] Cannot compile test_thread.cpp from boost
  2004-03-17  9:38 [Bug c++/14618] New: Cannot compile test_thread.cpp from boost schmid at snake dot iap dot physik dot tu-darmstadt dot de
                   ` (2 preceding siblings ...)
  2004-03-17 15:08 ` gdr at integrable-solutions dot net
@ 2004-03-17 15:11 ` gdr at integrable-solutions dot net
  2004-03-17 22:54 ` [Bug c++/14618] Document copy constructor constraints in binding rvalues to references giovannibajo at libero dot it
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: gdr at integrable-solutions dot net @ 2004-03-17 15:11 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From gdr at integrable-solutions dot net  2004-03-17 15:11 -------
Subject: Re:  Cannot compile test_thread.cpp from boost

"giovannibajo at libero dot it" <gcc-bugzilla@gcc.gnu.org> writes:

| FWIW, I agree. We ran into this very problem also in PR 14528, it seems like 
| GCC 3.4.0 is the first compiler to enforce this rule. Not even EDG does this.

Giovanni, please would you like submitring an FAQ  patch that documents
this?  It would save you to repeat yourself in the future -- I
conjecture we would have more reports on this issue.

-- Gaby


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14618


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/14618] Document copy constructor constraints in binding rvalues to references
  2004-03-17  9:38 [Bug c++/14618] New: Cannot compile test_thread.cpp from boost schmid at snake dot iap dot physik dot tu-darmstadt dot de
                   ` (3 preceding siblings ...)
  2004-03-17 15:11 ` gdr at integrable-solutions dot net
@ 2004-03-17 22:54 ` giovannibajo at libero dot it
  2004-03-17 23:22 ` gdr at integrable-solutions dot net
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: giovannibajo at libero dot it @ 2004-03-17 22:54 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From giovannibajo at libero dot it  2004-03-17 22:54 -------
(In reply to comment #4)

> Giovanni, please would you like submitring an FAQ  patch that documents
> this?  

Yes. I will put something also in changes.html.
Keeping this bug as a reminder for the documentation.


-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |giovannibajo at libero dot
                   |dot org                     |it
             Status|UNCONFIRMED                 |ASSIGNED
     Ever Confirmed|                            |1
           Keywords|                            |documentation
   Last reconfirmed|0000-00-00 00:00:00         |2004-03-17 22:54:16
               date|                            |
            Summary|Cannot compile              |Document copy constructor
                   |test_thread.cpp from boost  |constraints in binding
                   |                            |rvalues to references


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14618


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/14618] Document copy constructor constraints in binding rvalues to references
  2004-03-17  9:38 [Bug c++/14618] New: Cannot compile test_thread.cpp from boost schmid at snake dot iap dot physik dot tu-darmstadt dot de
                   ` (4 preceding siblings ...)
  2004-03-17 22:54 ` [Bug c++/14618] Document copy constructor constraints in binding rvalues to references giovannibajo at libero dot it
@ 2004-03-17 23:22 ` gdr at integrable-solutions dot net
  2004-03-21  1:16 ` giovannibajo at libero dot it
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: gdr at integrable-solutions dot net @ 2004-03-17 23:22 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From gdr at integrable-solutions dot net  2004-03-17 23:22 -------
Subject: Re:  Document copy constructor constraints in binding rvalues to references

"giovannibajo at libero dot it" <gcc-bugzilla@gcc.gnu.org> writes:

| > Giovanni, please would you like submitring an FAQ  patch that documents
| > this?  
| 
| Yes. I will put something also in changes.html.
| Keeping this bug as a reminder for the documentation.

Thanks!

-- Gaby


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14618


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/14618] Document copy constructor constraints in binding rvalues to references
  2004-03-17  9:38 [Bug c++/14618] New: Cannot compile test_thread.cpp from boost schmid at snake dot iap dot physik dot tu-darmstadt dot de
                   ` (5 preceding siblings ...)
  2004-03-17 23:22 ` gdr at integrable-solutions dot net
@ 2004-03-21  1:16 ` giovannibajo at libero dot it
  2004-03-29 18:24 ` pinskia at gcc dot gnu dot org
  2004-07-13 17:02 ` pinskia at gcc dot gnu dot org
  8 siblings, 0 replies; 10+ messages in thread
From: giovannibajo at libero dot it @ 2004-03-21  1:16 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From giovannibajo at libero dot it  2004-03-21 01:16 -------
http://gcc.gnu.org/ml/gcc-patches/2004-03/msg01734.html

New documentation is here:
http://gcc.gnu.org/gcc-3.4/changes.html
http://gcc.gnu.org/bugs.html#cxx_rvalbind


-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14618


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/14618] Document copy constructor constraints in binding rvalues to references
  2004-03-17  9:38 [Bug c++/14618] New: Cannot compile test_thread.cpp from boost schmid at snake dot iap dot physik dot tu-darmstadt dot de
                   ` (6 preceding siblings ...)
  2004-03-21  1:16 ` giovannibajo at libero dot it
@ 2004-03-29 18:24 ` pinskia at gcc dot gnu dot org
  2004-07-13 17:02 ` pinskia at gcc dot gnu dot org
  8 siblings, 0 replies; 10+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-03-29 18:24 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2004-03-29 18:24 -------
*** Bug 14774 has been marked as a duplicate of this bug. ***

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |mdorey at bluearc dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14618


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/14618] Document copy constructor constraints in binding rvalues to references
  2004-03-17  9:38 [Bug c++/14618] New: Cannot compile test_thread.cpp from boost schmid at snake dot iap dot physik dot tu-darmstadt dot de
                   ` (7 preceding siblings ...)
  2004-03-29 18:24 ` pinskia at gcc dot gnu dot org
@ 2004-07-13 17:02 ` pinskia at gcc dot gnu dot org
  8 siblings, 0 replies; 10+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-07-13 17:02 UTC (permalink / raw)
  To: gcc-bugs



-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |3.4.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14618


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2004-07-13 17:02 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-03-17  9:38 [Bug c++/14618] New: Cannot compile test_thread.cpp from boost schmid at snake dot iap dot physik dot tu-darmstadt dot de
2004-03-17 13:52 ` [Bug c++/14618] " bangerth at dealii dot org
2004-03-17 14:37 ` giovannibajo at libero dot it
2004-03-17 15:08 ` gdr at integrable-solutions dot net
2004-03-17 15:11 ` gdr at integrable-solutions dot net
2004-03-17 22:54 ` [Bug c++/14618] Document copy constructor constraints in binding rvalues to references giovannibajo at libero dot it
2004-03-17 23:22 ` gdr at integrable-solutions dot net
2004-03-21  1:16 ` giovannibajo at libero dot it
2004-03-29 18:24 ` pinskia at gcc dot gnu dot org
2004-07-13 17:02 ` pinskia at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).