[
https://issues.apache.org/jira/browse/TS-1583?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13503389#comment-13503389
]
Igor Galić edited comment on TS-1583 at 11/24/12 12:31 PM:
-----------------------------------------------------------
Fails on clang/Linux:
{noformat}
clang++ -DHAVE_CONFIG_H -I. -I../../proxy -I../lib/ts
-I../../iocore/eventsystem -I../../iocore/net -I../../iocore/aio
-I../../iocore/hostdb -I../../iocore/cache -I../../iocore/cluster
-I../../iocore/utils -I../../iocore/dns -I../../lib/records -I../../lib/ts
-I../../proxy/http -I../../proxy/logging -I../../proxy/http/remap
-I../../proxy/hdrs -I../../mgmt -I../../mgmt/preparse -I../../mgmt/utils
-I../../proxy/api/ts -I. -I./api/ts -I../../lib -D_LARGEFILE64_SOURCE=1
-D_COMPILE64BIT_SOURCE=1 -D_GNU_SOURCE -D_REENTRANT -Dlinux -DDEBUG -D_DEBUG
-std=c++11 -ggdb3 -Werror -Qunused-arguments -Wno-invalid-offsetof -MT
logstats.o -MD -MP -MF .deps/logstats.Tpo -c -o logstats.o
../../proxy/logstats.cc
../../proxy/logstats.cc:364:48: error: reference to 'hash' is ambiguous
typedef hash_map <const char *, OriginStats *, hash <const char *>, eqstr>
OriginStorage;
^
../../proxy/logstats.cc:81:18: note: candidate found by name lookup is 'hash'
using __gnu_cxx::hash;
^
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/functional_hash.h:57:12:
note: candidate found by name lookup is 'std::hash'
struct hash : public __hash_base<size_t, _Tp>
^
../../proxy/logstats.cc:364:54: error: expected expression
typedef hash_map <const char *, OriginStats *, hash <const char *>, eqstr>
OriginStorage;
^
../../proxy/logstats.cc:364:67: error: expected unqualified-id
typedef hash_map <const char *, OriginStats *, hash <const char *>, eqstr>
OriginStorage;
^
../../proxy/logstats.cc:365:33: error: reference to 'hash' is ambiguous
typedef hash_set <const char *, hash <const char *>, eqstr> OriginSet;
^
../../proxy/logstats.cc:81:18: note: candidate found by name lookup is 'hash'
using __gnu_cxx::hash;
^
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/functional_hash.h:57:12:
note: candidate found by name lookup is 'std::hash'
struct hash : public __hash_base<size_t, _Tp>
^
../../proxy/logstats.cc:365:39: error: expected expression
typedef hash_set <const char *, hash <const char *>, eqstr> OriginSet;
^
../../proxy/logstats.cc:365:52: error: expected unqualified-id
typedef hash_set <const char *, hash <const char *>, eqstr> OriginSet;
^
../../proxy/logstats.cc:374:54: error: reference to 'hash' is ambiguous
typedef hash_map<const char *, LruStack::iterator, hash <const char *>,
eqstr> LruHash;
^
../../proxy/logstats.cc:81:18: note: candidate found by name lookup is 'hash'
using __gnu_cxx::hash;
^
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/functional_hash.h:57:12:
note: candidate found by name lookup is 'std::hash'
struct hash : public __hash_base<size_t, _Tp>
^
../../proxy/logstats.cc:374:60: error: expected expression
typedef hash_map<const char *, LruStack::iterator, hash <const char *>,
eqstr> LruHash;
^
../../proxy/logstats.cc:374:73: error: expected member name or ';' after
declaration specifiers
typedef hash_map<const char *, LruStack::iterator, hash <const char *>,
eqstr> LruHash;
~~~~~~~ ^
../../proxy/logstats.cc:595:3: error: unknown type name 'LruHash'
LruHash _hash;
^
../../proxy/logstats.cc:417:5: error: use of undeclared identifier 'LruHash'
LruHash::iterator h = _hash.find(url);
^
../../proxy/logstats.cc:417:14: error: use of class template iterator requires
template arguments
LruHash::iterator h = _hash.find(url);
^
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_iterator_base_types.h:118:12:
note: template is declared here
struct iterator
^
../../proxy/logstats.cc:605:8: error: unknown type name 'OriginStorage'; did
you mean 'OriginStats'?
static OriginStorage origins;
^~~~~~~~~~~~~
OriginStats
../../proxy/logstats.cc:154:8: note: 'OriginStats' declared here
struct OriginStats
^
../../proxy/logstats.cc:606:8: error: unknown type name 'OriginSet'; did you
mean 'OriginStats'?
static OriginSet *origin_set;
^~~~~~~~~
OriginStats
../../proxy/logstats.cc:154:8: note: 'OriginStats' declared here
struct OriginStats
^
../../proxy/logstats.cc:1198:3: error: use of undeclared identifier
'OriginStorage'; did you mean 'OriginStats'?
OriginStorage::iterator o_iter;
^~~~~~~~~~~~~
OriginStats
../../proxy/logstats.cc:154:8: note: 'OriginStats' declared here
struct OriginStats
^
../../proxy/logstats.cc:1198:18: error: no type named 'iterator' in
'OriginStats'
OriginStorage::iterator o_iter;
~~~~~~~~~~~~~~~^
../../proxy/logstats.cc:1362:43: error: no member named 'find' in 'OriginStats'
if (origin_set ? (origin_set->find(tok) != origin_set->end()) : 1) {
~~~~~~~~~~ ^
../../proxy/logstats.cc:1362:68: error: no member named 'end' in 'OriginStats'
if (origin_set ? (origin_set->find(tok) != origin_set->end()) : 1) {
~~~~~~~~~~ ^
../../proxy/logstats.cc:1363:32: error: no member named 'find' in 'OriginStats'
o_iter = origins.find(tok);
~~~~~~~ ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
gmake[2]: *** [logstats.o] Error 1
{noformat}
So back at square one.
On FreeBSD 10 it fails for yet another reason unrelated to this (mess;):
{noformat}
libtool: compile: clang++ -DHAVE_CONFIG_H -I. -I../../../lib/ts -I../../../lib
-D_LARGEFILE64_SOURCE=1 -D_COMPILE64BIT_SOURCE=1 -D_GNU_SOURCE -D_REENTRANT
-Dfreebsd -DDEBUG -D_DEBUG -I/usr/local/include -I/usr/local/include/tcl8.4
-std=c++11 -ggdb3 -pipe -Wall -Werror -Qunused-arguments -Wno-invalid-offsetof
-MT ink_time.lo -MD -MP -MF .deps/ink_time.Tpo -c ../../../lib/ts/ink_time.cc
-fPIC -DPIC -o .libs/ink_time.o
../../../lib/ts/ink_time.cc:686:41: error: cast from pointer to smaller type
'int' loses information
ink_assert(localtime_r(clock, &tm) != (int) NULL); /* ADK_122100 */
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
../../../lib/ts/ink_assert.h:50:27: note: expanded from macro 'ink_assert'
(void)(likely(EX) ? (void)0 : _ink_assert(#EX, __FILE__, __LINE__))
\
^
../../../lib/ts/ink_apidefs.h:34:40: note: expanded from macro 'likely'
#define likely(x) __builtin_expect (!!(x), 1)
^
1 error generated.
gmake[3]: *** [ink_time.lo] Error 1
{noformat}
I'll look into the latter, but I think [~jamespeach]'s last patch, while
prettier, is a step back.
was (Author: i.galic):
Fails on clang/Linux:
{noformat}
clang++ -DHAVE_CONFIG_H -I. -I../../proxy -I../lib/ts
-I../../iocore/eventsystem -I../../iocore/net -I../../iocore/aio
-I../../iocore/hostdb -I../../iocore/cache -I../../iocore/cluster
-I../../iocore/utils -I../../iocore/dns -I../../lib/records -I../../lib/ts
-I../../proxy/http -I../../proxy/logging -I../../proxy/http/remap
-I../../proxy/hdrs -I../../mgmt -I../../mgmt/preparse -I../../mgmt/utils
-I../../proxy/api/ts -I. -I./api/ts -I../../lib -D_LARGEFILE64_SOURCE=1
-D_COMPILE64BIT_SOURCE=1 -D_GNU_SOURCE -D_REENTRANT -Dlinux -DDEBUG -D_DEBUG
-std=c++11 -ggdb3 -Werror -Qunused-arguments -Wno-invalid-offsetof -MT
logstats.o -MD -MP -MF .deps/logstats.Tpo -c -o logstats.o
../../proxy/logstats.cc
../../proxy/logstats.cc:364:48: error: reference to 'hash' is ambiguous
typedef hash_map <const char *, OriginStats *, hash <const char *>, eqstr>
OriginStorage;
^
../../proxy/logstats.cc:81:18: note: candidate found by name lookup is 'hash'
using __gnu_cxx::hash;
^
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/functional_hash.h:57:12:
note: candidate found by name lookup is 'std::hash'
struct hash : public __hash_base<size_t, _Tp>
^
../../proxy/logstats.cc:364:54: error: expected expression
typedef hash_map <const char *, OriginStats *, hash <const char *>, eqstr>
OriginStorage;
^
../../proxy/logstats.cc:364:67: error: expected unqualified-id
typedef hash_map <const char *, OriginStats *, hash <const char *>, eqstr>
OriginStorage;
^
../../proxy/logstats.cc:365:33: error: reference to 'hash' is ambiguous
typedef hash_set <const char *, hash <const char *>, eqstr> OriginSet;
^
../../proxy/logstats.cc:81:18: note: candidate found by name lookup is 'hash'
using __gnu_cxx::hash;
^
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/functional_hash.h:57:12:
note: candidate found by name lookup is 'std::hash'
struct hash : public __hash_base<size_t, _Tp>
^
../../proxy/logstats.cc:365:39: error: expected expression
typedef hash_set <const char *, hash <const char *>, eqstr> OriginSet;
^
../../proxy/logstats.cc:365:52: error: expected unqualified-id
typedef hash_set <const char *, hash <const char *>, eqstr> OriginSet;
^
../../proxy/logstats.cc:374:54: error: reference to 'hash' is ambiguous
typedef hash_map<const char *, LruStack::iterator, hash <const char *>,
eqstr> LruHash;
^
../../proxy/logstats.cc:81:18: note: candidate found by name lookup is 'hash'
using __gnu_cxx::hash;
^
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/functional_hash.h:57:12:
note: candidate found by name lookup is 'std::hash'
struct hash : public __hash_base<size_t, _Tp>
^
../../proxy/logstats.cc:374:60: error: expected expression
typedef hash_map<const char *, LruStack::iterator, hash <const char *>,
eqstr> LruHash;
^
../../proxy/logstats.cc:374:73: error: expected member name or ';' after
declaration specifiers
typedef hash_map<const char *, LruStack::iterator, hash <const char *>,
eqstr> LruHash;
~~~~~~~ ^
../../proxy/logstats.cc:595:3: error: unknown type name 'LruHash'
LruHash _hash;
^
../../proxy/logstats.cc:417:5: error: use of undeclared identifier 'LruHash'
LruHash::iterator h = _hash.find(url);
^
../../proxy/logstats.cc:417:14: error: use of class template iterator requires
template arguments
LruHash::iterator h = _hash.find(url);
^
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_iterator_base_types.h:118:12:
note: template is declared here
struct iterator
^
../../proxy/logstats.cc:605:8: error: unknown type name 'OriginStorage'; did
you mean 'OriginStats'?
static OriginStorage origins;
^~~~~~~~~~~~~
OriginStats
../../proxy/logstats.cc:154:8: note: 'OriginStats' declared here
struct OriginStats
^
../../proxy/logstats.cc:606:8: error: unknown type name 'OriginSet'; did you
mean 'OriginStats'?
static OriginSet *origin_set;
^~~~~~~~~
OriginStats
../../proxy/logstats.cc:154:8: note: 'OriginStats' declared here
struct OriginStats
^
../../proxy/logstats.cc:1198:3: error: use of undeclared identifier
'OriginStorage'; did you mean 'OriginStats'?
OriginStorage::iterator o_iter;
^~~~~~~~~~~~~
OriginStats
../../proxy/logstats.cc:154:8: note: 'OriginStats' declared here
struct OriginStats
^
../../proxy/logstats.cc:1198:18: error: no type named 'iterator' in
'OriginStats'
OriginStorage::iterator o_iter;
~~~~~~~~~~~~~~~^
../../proxy/logstats.cc:1362:43: error: no member named 'find' in 'OriginStats'
if (origin_set ? (origin_set->find(tok) != origin_set->end()) : 1) {
~~~~~~~~~~ ^
../../proxy/logstats.cc:1362:68: error: no member named 'end' in 'OriginStats'
if (origin_set ? (origin_set->find(tok) != origin_set->end()) : 1) {
~~~~~~~~~~ ^
../../proxy/logstats.cc:1363:32: error: no member named 'find' in 'OriginStats'
o_iter = origins.find(tok);
~~~~~~~ ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
gmake[2]: *** [logstats.o] Error 1
{noformat}
So back at square one.
On FreeBSD 10 it fails for yet another reason:
{noformat}
libtool: compile: clang++ -DHAVE_CONFIG_H -I. -I../../../lib/ts -I../../../lib
-D_LARGEFILE64_SOURCE=1 -D_COMPILE64BIT_SOURCE=1 -D_GNU_SOURCE -D_REENTRANT
-Dfreebsd -DDEBUG -D_DEBUG -I/usr/local/include -I/usr/local/include/tcl8.4
-std=c++11 -ggdb3 -pipe -Wall -Werror -Qunused-arguments -Wno-invalid-offsetof
-MT ink_time.lo -MD -MP -MF .deps/ink_time.Tpo -c ../../../lib/ts/ink_time.cc
-fPIC -DPIC -o .libs/ink_time.o
../../../lib/ts/ink_time.cc:686:41: error: cast from pointer to smaller type
'int' loses information
ink_assert(localtime_r(clock, &tm) != (int) NULL); /* ADK_122100 */
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
../../../lib/ts/ink_assert.h:50:27: note: expanded from macro 'ink_assert'
(void)(likely(EX) ? (void)0 : _ink_assert(#EX, __FILE__, __LINE__))
\
^
../../../lib/ts/ink_apidefs.h:34:40: note: expanded from macro 'likely'
#define likely(x) __builtin_expect (!!(x), 1)
^
1 error generated.
gmake[3]: *** [ink_time.lo] Error 1
{noformat}
I'll look into the latter, but I think [~jamespeach]'s last patch, while
prettier, is a step back.
> Visibility of hash_map unclear to GCC 4.7 when -std=c++11
> ---------------------------------------------------------
>
> Key: TS-1583
> URL: https://issues.apache.org/jira/browse/TS-1583
> Project: Traffic Server
> Issue Type: Bug
> Components: Build
> Affects Versions: 3.3.0
> Environment: Fedora 17 64bit - gcc 4.7
> Reporter: Luca Rea
> Attachments: ts-1583.patch
>
>
> master trunk
> {noformat}
> make[2]: Entering directory `/home/luca/trafficserver/proxy'
> CXX logstats.o
> logstats.cc:349:74: error: template argument 3 is invalid
> logstats.cc:349:89: error: invalid type in declaration before ‘;’ token
> logstats.cc:350:59: error: template argument 2 is invalid
> logstats.cc:350:70: error: invalid type in declaration before ‘;’ token
> logstats.cc:359:80: error: template argument 3 is invalid
> logstats.cc: In member function ‘void UrlLru::add_stat(const char*, int64_t,
> int, int, int, int)’:
> logstats.cc:402:23: error: expected initializer before ‘h’
> logstats.cc:404:9: error: ‘h’ was not declared in this scope
> logstats.cc:404:20: error: request for member ‘end’ in
> ‘((UrlLru*)this)->UrlLru::_hash’, which is of non-class type ‘UrlLru::LruHash
> {aka int}’
> logstats.cc:461:21: error: request for member ‘find’ in
> ‘((UrlLru*)this)->UrlLru::_hash’, which is of non-class type ‘UrlLru::LruHash
> {aka int}’
> logstats.cc:462:26: error: request for member ‘end’ in
> ‘((UrlLru*)this)->UrlLru::_hash’, which is of non-class type ‘UrlLru::LruHash
> {aka int}’
> logstats.cc:463:19: error: request for member ‘erase’ in
> ‘((UrlLru*)this)->UrlLru::_hash’, which is of non-class type ‘UrlLru::LruHash
> {aka int}’
> logstats.cc:522:18: error: assignment of read-only location ‘*(u +
> ((sizetype)((long unsigned int)((UrlLru*)this)->UrlLru::_hash)))’
> logstats.cc:522:18: error: cannot convert ‘std::list<UrlStats>::iterator {aka
> std::_List_iterator<UrlStats>}’ to ‘const char’ in assignment
> logstats.cc: In member function ‘void UrlLru::_init()’:
> logstats.cc:536:13: error: request for member ‘resize’ in
> ‘((UrlLru*)this)->UrlLru::_hash’, which is of non-class type ‘UrlLru::LruHash
> {aka int}’
> logstats.cc: In function ‘int parse_log_buff(LogBufferHeader*, bool)’:
> logstats.cc:1183:27: error: expected initializer before ‘o_iter’
> logstats.cc:1347:43: error: request for member ‘find’ in ‘* origin_set’,
> which is of non-class type ‘OriginSet {aka int}’
> logstats.cc:1347:68: error: request for member ‘end’ in ‘* origin_set’, which
> is of non-class type ‘OriginSet {aka int}’
> logstats.cc:1348:15: error: ‘o_iter’ was not declared in this scope
> logstats.cc:1348:32: error: request for member ‘find’ in ‘origins’, which is
> of non-class type ‘OriginStorage {aka int}’
> logstats.cc:1349:27: error: request for member ‘end’ in ‘origins’, which is
> of non-class type ‘OriginStorage {aka int}’
> logstats.cc:1356:39: error: invalid conversion from ‘OriginStats*’ to ‘char’
> [-fpermissive]
> logstats.cc: In function ‘void my_exit(const ExitStatus&)’:
> logstats.cc:2132:16: error: request for member ‘empty’ in ‘origins’, which is
> of non-class type ‘OriginStorage {aka int}’
> logstats.cc:2134:25: error: invalid use of qualified-name ‘::iterator’
> logstats.cc:2134:34: error: expected ‘;’ before ‘i’
> logstats.cc:2134:34: error: ‘i’ was not declared in this scope
> logstats.cc:2134:46: error: request for member ‘begin’ in ‘origins’, which is
> of non-class type ‘OriginStorage {aka int}’
> logstats.cc:2134:68: error: request for member ‘end’ in ‘origins’, which is
> of non-class type ‘OriginStorage {aka int}’
> logstats.cc:2134:73: error: expected ‘)’ before ‘;’ token
> logstats.cc:2134:75: error: ‘i’ was not declared in this scope
> logstats.cc:2134:78: error: expected ‘;’ before ‘)’ token
> logstats.cc: In function ‘int main(int, char**)’:
> logstats.cc:2295:21: error: request for member ‘insert’ in ‘* origin_set’,
> which is of non-class type ‘OriginSet {aka int}’
> logstats.cc:2330:25: error: request for member ‘insert’ in ‘* origin_set’,
> which is of non-class type ‘OriginSet {aka int}’
> make[2]: *** [logstats.o] Error 1
> make[2]: Leaving directory `/home/luca/trafficserver/proxy'
> make[1]: *** [all-recursive] Error 1
> make[1]: Leaving directory `/home/luca/trafficserver/proxy'
> make: *** [all-recursive] Error 1
> {noformat}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira