diff options
Diffstat (limited to 'binutils-2.25/gold/testsuite/odr_violation2.cc')
-rw-r--r-- | binutils-2.25/gold/testsuite/odr_violation2.cc | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/binutils-2.25/gold/testsuite/odr_violation2.cc b/binutils-2.25/gold/testsuite/odr_violation2.cc new file mode 100644 index 00000000..e3d30f39 --- /dev/null +++ b/binutils-2.25/gold/testsuite/odr_violation2.cc @@ -0,0 +1,34 @@ +#include <algorithm> +#include "odr_header1.h" + +class Ordering { + public: + bool operator()(int a, int b) __attribute__((never_inline)); +}; + +// This comment makes the line numbers in Ordering::operator() all have +// two digits, which causes gold's output to be independent of which +// instruction the compiler optimizes into the front of the function. +bool Ordering::operator()(int a, int b) { + // Optimization makes this operator() a different size than the one + // in odr_violation1.cc. + return a + 12345 > b / 67; +} + +void SortDescending(int array[], int size) { + std::sort(array, array + size, Ordering()); +} + +// This is weak in odr_violation1.cc. +extern "C" int OverriddenCFunction(int i) { + return i * i; +} +// This is inline in debug_msg.cc, which makes it a weak symbol too. +int SometimesInlineFunction(int i) { + return i * i; +} + +// Instantiate the Derived vtable, with optimization (see Makefile.am). +OdrBase* CreateOdrDerived2() { + return new OdrDerived; +} |