On 8/6/16 9:50 AM, David Blaikie wrote:
Could you provide a small example that fails (warns/doesn't suppress) with 3.9/ToT but succeeds (successfully suppresses the warning) with earlier?
Thanks for testing, David. Below is a standalone test case that reproduces the insuppressible warning even with Xcode's clang (Apple LLVM version 7.3.0 (clang-703.0.31)). So there is a latent clang bug plus a regression that caused Firefox's previously-suppressible warning to no longer be suppressible.
The warning looks like it might only happen when the boolean condition involves an expression with a templated type. In the test case below, a templated local variable gets copy-constructed to form an argument to a boolean helper-function.
I filed clang bug 28918 for this issue: https://llvm.org/bugs/show_bug.cgi?id=28918 $ clang++ -Wunreachable-code test.cpp test.cpp:23:5: warning: code will never be executed [-Wunreachable-code] printf("Does clang warn about this code being unreachable?\n"); ^~~~~~ 1 warning generated. thanks, chris // Compile me like so: // clang++ -Wunreachable-code test.cpp // and see if I produce a build warning. // // Note that if you change aSomeVec to be a non-templated type, then // the build warning goes away. #include "stdio.h" #include <vector> // Note: aSomeVec must be passed by value to trigger the problem, it seems. // Changing to std::vector<int>& reference silences the warning. static bool FuncThatTakesATemplatedArg(std::vector<int> /* aSomeVec */) { return false; } int main() { std::vector<int> myVec; if ((false) && !FuncThatTakesATemplatedArg(myVec)) { printf("Does clang warn about this code being unreachable?\n"); return 1; } return 0; }
_______________________________________________ cfe-users mailing list cfe-users@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users