Any idea why this test is failing on windows? For example: http://bb.pgr.jp/builders/ninja-clang-i686-msc17-R/builds/2075/steps/test_clang_tools/logs/Clang%20Tools%20%3A%3A%20cpp11-migrate__UseNullptr__basic.cpp
On 9 April 2013 12:54, Ariel J. Bernal <[email protected]> wrote: > Author: ajbernal > Date: Tue Apr 9 11:54:56 2013 > New Revision: 179103 > > URL: http://llvm.org/viewvc/llvm-project?rev=179103&view=rev > Log: > Fix UseNullptr fails to replace c-style explicit cast in a return statement > > This happens whenever there is a c-style explicit cast to nullptr not > surrounded by parentheses following a return statement. > > - Added a white space before nullptr if the character before is alphanumeric > when replacing the null pointer expression. > - Simplified visitor > - Addes tests > > Modified: > clang-tools-extra/trunk/cpp11-migrate/UseNullptr/NullptrActions.cpp > clang-tools-extra/trunk/test/cpp11-migrate/UseNullptr/basic.cpp > > Modified: clang-tools-extra/trunk/cpp11-migrate/UseNullptr/NullptrActions.cpp > URL: > http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/UseNullptr/NullptrActions.cpp?rev=179103&r1=179102&r2=179103&view=diff > ============================================================================== > --- clang-tools-extra/trunk/cpp11-migrate/UseNullptr/NullptrActions.cpp > (original) > +++ clang-tools-extra/trunk/cpp11-migrate/UseNullptr/NullptrActions.cpp Tue > Apr 9 11:54:56 2013 > @@ -20,6 +20,7 @@ > #include "clang/AST/ASTContext.h" > #include "clang/AST/RecursiveASTVisitor.h" > > +#include "clang/Basic/CharInfo.h" > #include "clang/Lex/Lexer.h" > > using namespace clang::ast_matchers; > @@ -42,7 +43,14 @@ bool ReplaceWithNullptr(tooling::Replace > SourceLocation StartLoc, SourceLocation EndLoc) { > if (SM.isFromSameFile(StartLoc, EndLoc) && SM.isFromMainFile(StartLoc)) { > CharSourceRange Range(SourceRange(StartLoc, EndLoc), true); > - Replace.insert(tooling::Replacement(SM, Range, "nullptr")); > + // Add a space if nullptr follows an alphanumeric character. This happens > + // whenever there is an c-style explicit cast to nullptr not surrounded > by > + // parentheses and right beside a return statement. > + SourceLocation PreviousLocation = StartLoc.getLocWithOffset(-1); > + if (isAlphanumeric(*FullSourceLoc(PreviousLocation, > SM).getCharacterData())) > + Replace.insert(tooling::Replacement(SM, Range, " nullptr")); > + else > + Replace.insert(tooling::Replacement(SM, Range, "nullptr")); > return true; > } else > return false; > @@ -93,19 +101,11 @@ public: > // within a cast expression. > bool VisitStmt(Stmt *S) { > CastExpr *C = dyn_cast<CastExpr>(S); > - > if (!C) { > ResetFirstSubExpr(); > return true; > } else if (!FirstSubExpr) { > - // Keep parentheses for implicit casts to avoid cases where an implicit > - // cast within a parentheses expression is right next to a return > - // statement otherwise get the subexpression of the outermost explicit > - // cast. > - if (C->getStmtClass() == Stmt::ImplicitCastExprClass) > - FirstSubExpr = C->IgnoreParenImpCasts(); > - else > - FirstSubExpr = C->getSubExpr(); > + FirstSubExpr = C->getSubExpr()->IgnoreParens(); > } > > if (C->getCastKind() == CK_NullToPointer || > > Modified: clang-tools-extra/trunk/test/cpp11-migrate/UseNullptr/basic.cpp > URL: > http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/cpp11-migrate/UseNullptr/basic.cpp?rev=179103&r1=179102&r2=179103&view=diff > ============================================================================== > --- clang-tools-extra/trunk/test/cpp11-migrate/UseNullptr/basic.cpp (original) > +++ clang-tools-extra/trunk/test/cpp11-migrate/UseNullptr/basic.cpp Tue Apr > 9 11:54:56 2013 > @@ -180,6 +180,18 @@ int test_function_return6() { > // CHECK: return g_null; > } > > +int *test_function_return_cast1() { > + return(int)0; > + // CHECK: return nullptr; > +} > + > +int *test_function_return_cast2() { > + #define RET return > + RET(int)0; > + // CHECK: RET nullptr; > + #undef RET > +} > + > // Test parentheses expressions resulting in a nullptr. > int *test_parentheses_expression1() { > return(0); > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
