Hi,
the warning about types of fields seems misplaced:
> ../../third_party/WebKit/public/platform/WebCryptoAlgorithmParams.h:295:0:
> warning: type ???struct WebCryptoEcKeyImportParams??? violates one definition
> rule [-Wodr]
> class WebCryptoEcKeyImportParams : public WebCryptoAlgorithmParams {
> ^
> ../../third_party/WebKit/public/platform/WebCryptoAlgorithmParams.h:295:0:
> note: a different type is defined in another translation unit
> class WebCryptoEcKeyImportParams : public WebCryptoAlgorithmParams {
> ^
> ../../third_party/WebKit/public/platform/WebCryptoAlgorithmParams.h:307:0:
> note: the first difference of corresponding definitions is field
> ???m_namedCurve???
> const WebCryptoNamedCurve m_namedCurve;
> ^
> ../../third_party/WebKit/public/platform/WebCryptoAlgorithmParams.h:295:0:
> note: a field of same name but different type is defined in another
> translation unit
> class WebCryptoEcKeyImportParams : public WebCryptoAlgorithmParams {
> ^
> ../../third_party/WebKit/public/platform/WebCryptoAlgorithm.h:78:0: note:
> type ???const WebCryptoNamedCurve??? should match type ???const
> WebCryptoNamedCurve???
> enum WebCryptoNamedCurve {
> ^
> ../../third_party/WebKit/public/platform/WebCryptoAlgorithm.h:79:0: note: the
> incompatible type is defined here
> WebCryptoNamedCurveP256,
> ^
Not sure how it can happen, but will take a look. The third note should not
point to the type itself but to the field.
> ../../third_party/icu/source/i18n/unicode/fieldpos.h:106:0: warning: virtual
> table of type ???struct FieldPosition??? violates one definition rule
> class U_I18N_API FieldPosition : public UObject {
> ^
> ../../third_party/icu/source/i18n/unicode/fieldpos.h:106:0: note: the
> conflicting type defined in another translation unit
> class U_I18N_API FieldPosition : public UObject {
> ^
> ../../third_party/icu/source/i18n/unicode/fieldpos.h:106:0: note: virtual
> method ???_ZTIN6icu_5213FieldPositionE???
> class U_I18N_API FieldPosition : public UObject {
> ^
> ../../third_party/icu/source/i18n/format.cpp:125:0: note: ought to match
> virtual method ???__comp_dtor ??? but does not
> Format::format(const Formattable& /* unused obj */,
> ^
This should warn about different number of entries in the table rather than
insisting that typeinfo should match destructor.
Jason, I wonder if there is more informative way to print destructor during LTO
than as __comp_dtor? Laos for named types,
perhaps printing just type name instead of the wrong "struct typename" (because
we make no difference between struct and
class at LTO) would be cleaner.
Honza