Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add more tests, make existing tests harder. #2

Merged
merged 2 commits into from Mar 2, 2017
Merged

Conversation

marc-kdab
Copy link
Contributor

No description provided.

- rrvo: pass-through from another function call (Rvalue RVO)
- variants of the existing tests which define X's not at the
  top-level scope, but more naturally in nested scopes.
- mixtures of URVO and NRVO in the same function

Also define the X copy and move ctor out-of-line (doesn't
change anything, though).

The expected result for all new tests is 'e'. I believe the
C++ standard forbits an 'e' for X a, b; return param ? a : b;
This should not change anything, because even though
reads and writes to volatiles are observable behaviour,
the standard explicitly permits the ctor elision, even
though it's an observable-behaviour change.
@t-b
Copy link
Owner

t-b commented Mar 2, 2016

@marc-kdab Thanks!

I'll have a close look in the next couple of days.

@t-b
Copy link
Owner

t-b commented Mar 12, 2016

@marc-kdab
I've added some more tests see https://github.com/t-b/cpp-copy-elision/tree/marc-kdab-changes.

In case you you have more tests will free to post them. I will produce a new result table in a week or so.

Curren output for linux:

$./run-all.sh 
g++ (GCC) 3.4.6
e e e e e e  e e e e e e  e c e e e c e c  e c c c c c e e e e  e e  c e e  e c c 
g++ (GCC) 4.0.4
e e e e e e  e e e e e e  e c e e e c e c  e c c c c c e e e e  e e  c e e  e c c 
g++ (GCC) 4.1.2
e e e e e e  e e e e e e  e c e e e c e c  e c c c c c e e e e  e e  c e e  e c c 
g++ (GCC) 4.2.4
e e e e e e  e e e e e e  e c e e e c e c  e c c c c c e e e e  e e  c e e  e c c 
g++ (GCC) 4.3.6
e e e e e e  e e e e e e  e m e e e m e m  e m m c m m e e e e  e e  c e e  e c c 
g++ (GCC) 4.4.7
e e e e e e  e e e e e e  e m e e e m e m  e m m c m m e e e e  e e  c e e  e c cm 
g++ (GCC) 4.5.4
e e e e e e  e e e e e e  e m e e e m e m  e m m c m m e e e e  e e  c e e  e c cm 
g++ (GCC) 4.6.4
e e e e e e  e e e e e e  e m e e e m e m  e m m c m m e e e e  e e  m e e  e cm m 
g++ (GCC) 4.7.3
e e e e e e  e e e e e e  e m e e e m e m  e m m c m m e e e e  e e  m e e  e cm m 
g++ (GCC) 4.8.5
e e e e e e  e e e e e e  e m e e e m e m  e m m c m m e e e e  e e  m e e  e cm m 
g++ (GCC) 4.9.3
e e e e e e  e e e e e e  e m e e e m e m  e m m c m m e e e e  e e  m e e  e cm m 
g++ (GCC) 5.1.0
e e e e e e  e e e e e e  e m e e e m e m  e m m c m m e e e e  e e  m e e  e cm m 
g++ (GCC) 5.2.0
e e e e e e  e e e e e e  e m e e e m e m  e m m c m m e e e e  e e  m e e  e cm m 
g++ (GCC) 5.3.0
e e e e e e  e e e e e e  e m e e e m e m  e m m c m m e e e e  e e  m e e  e cm m 
g++ (GCC) 6.0.0 20160307 (experimental)
e e e e e e  e e e e e e  e m e e e m e m  c m m c m m c e c e  e e  m e e  e cm m 
clang version 3.1 (branches/release_31)
e e e e e e  e e e e e e  e e e e e e e e  c m m c m m c e c e  e e  m e e  e cm m 
clang version 3.2 (tags/RELEASE_32/final)
e e e e e e  e e e e e e  e e e e e e e e  c m m c m m c e c e  e e  m e e  e cm m 
clang version 3.3 (tags/RELEASE_33/final)
e e e e e e  e e e e e e  e e e e e e e e  c m m c m m c e c e  e e  m e e  e cm m 
clang version 3.4.2 (tags/RELEASE_34/dot2-final)
e e e e e e  e e e e e e  e e e e e e e e  c m m c m m c e c e  e e  m e e  e cm m 
clang version 3.5.2 (tags/RELEASE_352/final)
e e e e e e  e e e e e e  e e e e e e e e  c m e c m e c e c e  e e  m e e  e cm m 
clang version 3.6.2 (tags/RELEASE_362/final)
e e e e e e  e e e e e e  e e e e e e e e  c m e c m e c e c e  e e  m e e  e cm m 
clang version 3.7.1 (tags/RELEASE_371/final)
e e e e e e  e e e e e e  e e e e e e e e  c m e c m e c e c e  e e  m e e  e cm m 
clang version 3.8.0 (tags/RELEASE_380/final)
e e e e e e  e e e e e e  e e e e e e e e  c m e c m e c e c e  e e  m e e  e cm m 
clang version 3.9.0 (http://llvm.org/git/clang.git 79da8476f3819f45c6cd82c6f68dc63f3e2dcfc8) (http://llvm.org/git/llvm.git f51faf0abdf84f717f50c9592f9696b02259ead6)
e e e e e e  e e e e e e  e e e e e e e e  c m e c m e c e c e  e e  m e e  e cm m 
icc (ICC) 16.0.2 20160204
e e e e e e  e e e e e e  e m e e e m m m  c m m c m m c e c e  e e  m e e  e cm m 
CC: Sun C++ 5.13 Linux_i386 2014/10/20
CC: Warning: failed to detect system linker version, falling back to custom linker usage
e e e e e e  e e e e e e  m m m m m m m m  c m m c m m c m c m  e e  m e e  e cm m 

@t-b t-b merged commit 11df400 into t-b:master Mar 2, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants