Hi Everyone,

We had some problems with Clang warnings at Clang 3.8. A sample is shown 
below. We cleared them at https://github.com/weidai11/cryptopp/pull/294 and 
https://github.com/weidai11/cryptopp/issues/300 .

Later we found we broke a couple of platforms at 
https://github.com/weidai11/cryptopp/issues/533. Two runtime tests failed 
on some lesser used platforms.

We had to effectively back-out the fixes for #294 and #300 because we can't 
produce incorrect results like #533.

We are looking for a fix that does not break things. Until we find one we 
will have to tolerate a noisy Clang compile.

Jeff

****************************************

Conceptually here is what we want to do in a header file:

template <class H> class PKCS_DigestDecoration 
{ 
public: 
    static const byte decoration[]; 
    static const unsigned int length; 
};

template<>
PKCS_DigestDecoration<SHA1>::decoration[] = {...}
template<>
PKCS_DigestDecoration<SHA256>::decoration[] = {...}

The problem is, it violates the One Definition Rule (ODR) and leads to 
duplicate symbols in several object files. And wrapping the definition in 
an unnamed namespace fails to compile (though it precisely expresses what 
we want to do):

namespace {
  template<>
  PKCS_DigestDecoration<SHA1>::decoration[] = {...}
  template<>
  PKCS_DigestDecoration<SHA256>::decoration[] = {...}
};

****************************************

In file included from rsa.cpp:4:
In file included from ./rsa.h:14:
./pkcspad.h:81:53: warning: instantiation of variable
      'CryptoPP::PKCS_DigestDecoration<CryptoPP::SHA1>::decoration' required
      here, but no definition is available [-Wundefined-var-template]
  ...return HashIdentifier(PKCS_DigestDecoration<H>::decoration, 
PKCS_DigestD...
                                                     ^
./pubkey.h:627:19: note: in instantiation of member function
      
'CryptoPP::PKCS1v15_SignatureMessageEncodingMethod::HashIdentifierLookup::HashIdentifierLookup2<CryptoPP::SHA1>::Lookup'
      requested here
        return L::Lookup();
                  ^
./pubkey.h:2108:26: note: in instantiation of member function
      'CryptoPP::TF_ObjectImplBase<CryptoPP::TF_SignerBase,
      CryptoPP::TF_SignatureSchemeOptions<CryptoPP::TF_SS<CryptoPP::RSA,
      CryptoPP::PKCS1v15, CryptoPP::SHA1, int>, CryptoPP::RSA,
      CryptoPP::PKCS1v15_SignatureMessageEncodingMethod, CryptoPP::SHA1>,
      CryptoPP::InvertibleRSAFunction>::GetHashIdentifier' requested here
class CRYPTOPP_NO_VTABLE PK_FinalTemplate : public BASE
                         ^
./pkcspad.h:39:20: note: forward declaration of template entity is here
        static const byte decoration[];
                          ^

-- 
-- 
You received this message because you are subscribed to the "Crypto++ Users" 
Google Group.
To unsubscribe, send an email to cryptopp-users-unsubscr...@googlegroups.com.
More information about Crypto++ and this group is available at 
http://www.cryptopp.com.
--- 
You received this message because you are subscribed to the Google Groups 
"Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cryptopp-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to