Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

With 32-bit target, icc generates remarks about cast of void * to 64-bit integer in PrintTo #476

Open
GoogleCodeExporter opened this issue Jul 23, 2015 · 0 comments

Comments

@GoogleCodeExporter
Copy link

IMPORTANT NOTE: PLEASE send issues or requests to
http://groups.google.com/group/googletestframework *instead of here*.
This issue tracker is NOT regularly monitored.

If you really need to create a new issue, please provide the information
asked for below.

What steps will reproduce the problem?
1. Compile test source files against gmock-1.7.0 with icc 15 in 32-bit mode
2.
3.

What is the expected output? What do you see instead?

What is the expected output? What do you see instead?

The expected output is no remarks. I observe the following, one per source file 
with tests

../src/external/gmock-1.7.0/gtest/include/gtest/gtest-printers.h(326): remark 
#1195: conversion from integer to smaller pointer
        *os << reinterpret_cast<const void*>(
               ^
          detected during instantiation of "void testing::internal::PrintTo(const T &, std::ostream *) [with T=const void *]" at line 416


What version of Google Test are you using? On what operating system?

1.7.0. ubuntu 14.04 running under VMWare 6 (thus somehow not fully 64-bit 
compliant, at least as far as Intel's compiler is concerned)


Please provide any additional information below, such as a code snippet.

As we can see at 
https://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest-pri
nters.h#324, the code is working around a limitation of old version(s) of gcc 
by casting a pointer non-portably to a 64-bit integer. The code runs fine, 
because the return cast makes things all OK, but icc doesn't look that far 
before making a remark.

uintptr_t is available from stdint.h/cstdint to solve this problem, but only in 
C99 and (generally) compilers that support C++03 (and more recent C++ 
flavours). There's no standard preprocessor macro for "how wide is a pointer?" 
or even "is this a 64-bit architecture?"

If there's interest, I could write a GTEST_HAS_STDINT that could use uintptr_t 
to handle this case, and perhaps future issues, in a way that is fully correct 
when the toolchain suports that header. GTEST_HAS_STDINT would have to default 
to be off, since even in C++11 providing cstdint header is optional.

Original issue reported on code.google.com by Mark.J.A...@gmail.com on 28 Sep 2014 at 1:41

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant