2012-03-26 19:18:29 +00:00
|
|
|
#include <algorithm>
|
2014-09-12 22:14:23 +00:00
|
|
|
#include "odr_header1.h"
|
2012-03-26 19:18:29 +00:00
|
|
|
|
|
|
|
class Ordering {
|
|
|
|
public:
|
2014-09-12 22:14:23 +00:00
|
|
|
bool operator()(int a, int b) __attribute__((never_inline));
|
2012-03-26 19:18:29 +00:00
|
|
|
};
|
|
|
|
|
2014-09-12 22:14:23 +00:00
|
|
|
// 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;
|
|
|
|
}
|
|
|
|
|
2012-03-26 19:18:29 +00:00
|
|
|
void SortDescending(int array[], int size) {
|
|
|
|
std::sort(array, array + size, Ordering());
|
|
|
|
}
|
2014-09-12 22:14:23 +00:00
|
|
|
|
|
|
|
// 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;
|
|
|
|
}
|