On Mon, Jan 27, 2014 at 9:30 PM, David Blaikie <[email protected]> wrote:
> > > > On Mon, Jan 27, 2014 at 9:16 PM, Saleem Abdulrasool <[email protected] > > wrote: > >> On Mon, Jan 27, 2014 at 9:05 PM, David Blaikie <[email protected]>wrote: >> >>> >>> >>> >>> On Mon, Jan 27, 2014 at 8:51 PM, Saleem Abdulrasool < >>> [email protected]> wrote: >>> >>>> On Mon, Jan 27, 2014 at 8:38 AM, David Blaikie <[email protected]>wrote: >>>> >>>>> >>>>> >>>>> >>>>> On Sat, Jan 25, 2014 at 3:07 PM, Saleem Abdulrasool < >>>>> [email protected]> wrote: >>>>> >>>>>> On Sat, Jan 25, 2014 at 12:38 PM, Richard Smith < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> On Sat, Jan 25, 2014 at 12:04 PM, Saleem Abdulrasool < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> Author: compnerd >>>>>>>> Date: Sat Jan 25 14:04:44 2014 >>>>>>>> New Revision: 200096 >>>>>>>> >>>>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=200096&view=rev >>>>>>>> Log: >>>>>>>> unittests: explicit stringify StringRefs for conversion >>>>>>>> >>>>>>>> When clang is built outside of the LLVM tree (against a >>>>>>>> corresponding version), >>>>>>>> there is no definition providing for operator<<(std::ostream &, >>>>>>>> StringRef) which >>>>>>>> is required for the assertion routines in google-test tests. >>>>>>> >>>>>>> >>>>>>> Hmm, why is this different for an in-tree vs an out-of-tree build? >>>>>>> >>>>>> >>>>>> Ugh, I should have phrased that better. I meant a stand-alone vs >>>>>> combined clang build. >>>>>> >>>>> >>>>> The question, I think, still stands, doesn't it? Why is this different >>>>> and can we make it not different instead of working around the difference? >>>>> >>>> >>>> With this change, it no longer is different, we always convert the >>>> string ref to a string before printing. >>>> >>> >>> Yes - but there's still some difference in the build system that lead >>> to this problem and could lead to others. That's not good... we don't want >>> to keep introducing/chasing down those problems. We should make the build >>> systems similar and not necessitate this change. >>> >>> >>>> The overload is provided by the unit-tests in LLVM (as that is the >>>> only place that the overload is actually used), and when clang is built >>>> standalone, the routine is not available. >>>> >>> >>> I'm still not following. What do you mean by "the overload is provided >>> by the unit-tests"? Is this declared in a unit test library and defined >>> there - how does that declaration get found by the clang unit tests? >>> >> >> Yeah, it is implemented in a unit test library that makes its way into >> the clang unit test link (I didn't track down the exact path that led to >> the library getting included into the clang build). It is not the >> declaration that it is looking for, only the definition. >> > > Where is the function declared, then? (how do we end up calling a function > that's not declared?) > Its a template specialisation of std::ostream & operator<<(std::ostream &, T &); (from iostream) used to construct the assertion message (the StringRef is pushed into a std::ostringstream to construct an assertion message). > > >> >> I suppose that we could provide the extra overload specifically for >>>> making the clang unit-tests compile standalone. >>>> >>>> >>>>> >>>>>> >>>>>>> Avoid the >>>>>>>> compilation failure by explicitly stringifying the StringRef prior >>>>>>>> to use. >>>>>>>> >>>>>>>> Modified: >>>>>>>> cfe/trunk/unittests/AST/DeclPrinterTest.cpp >>>>>>>> cfe/trunk/unittests/AST/StmtPrinterTest.cpp >>>>>>>> cfe/trunk/unittests/Tooling/CompilationDatabaseTest.cpp >>>>>>>> >>>>>>>> Modified: cfe/trunk/unittests/AST/DeclPrinterTest.cpp >>>>>>>> URL: >>>>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/AST/DeclPrinterTest.cpp?rev=200096&r1=200095&r2=200096&view=diff >>>>>>>> >>>>>>>> ============================================================================== >>>>>>>> --- cfe/trunk/unittests/AST/DeclPrinterTest.cpp (original) >>>>>>>> +++ cfe/trunk/unittests/AST/DeclPrinterTest.cpp Sat Jan 25 14:04:44 >>>>>>>> 2014 >>>>>>>> @@ -77,7 +77,8 @@ public: >>>>>>>> OwningPtr<FrontendActionFactory> >>>>>>>> Factory(newFrontendActionFactory(&Finder)); >>>>>>>> >>>>>>>> if (!runToolOnCodeWithArgs(Factory->create(), Code, Args, >>>>>>>> FileName)) >>>>>>>> - return testing::AssertionFailure() << "Parsing error in \"" << >>>>>>>> Code << "\""; >>>>>>>> + return testing::AssertionFailure() >>>>>>>> + << "Parsing error in \"" << Code.str() << "\""; >>>>>>>> >>>>>>>> if (Printer.getNumFoundDecls() == 0) >>>>>>>> return testing::AssertionFailure() >>>>>>>> @@ -90,8 +91,8 @@ public: >>>>>>>> >>>>>>>> if (Printer.getPrinted() != ExpectedPrinted) >>>>>>>> return ::testing::AssertionFailure() >>>>>>>> - << "Expected \"" << ExpectedPrinted << "\", " >>>>>>>> - "got \"" << Printer.getPrinted() << "\""; >>>>>>>> + << "Expected \"" << ExpectedPrinted.str() << "\", " >>>>>>>> + "got \"" << Printer.getPrinted().str() << "\""; >>>>>>>> >>>>>>>> return ::testing::AssertionSuccess(); >>>>>>>> } >>>>>>>> >>>>>>>> Modified: cfe/trunk/unittests/AST/StmtPrinterTest.cpp >>>>>>>> URL: >>>>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/AST/StmtPrinterTest.cpp?rev=200096&r1=200095&r2=200096&view=diff >>>>>>>> >>>>>>>> ============================================================================== >>>>>>>> --- cfe/trunk/unittests/AST/StmtPrinterTest.cpp (original) >>>>>>>> +++ cfe/trunk/unittests/AST/StmtPrinterTest.cpp Sat Jan 25 14:04:44 >>>>>>>> 2014 >>>>>>>> @@ -76,7 +76,8 @@ public: >>>>>>>> OwningPtr<FrontendActionFactory> >>>>>>>> Factory(newFrontendActionFactory(&Finder)); >>>>>>>> >>>>>>>> if (!runToolOnCodeWithArgs(Factory->create(), Code, Args)) >>>>>>>> - return testing::AssertionFailure() << "Parsing error in \"" << >>>>>>>> Code << "\""; >>>>>>>> + return testing::AssertionFailure() >>>>>>>> + << "Parsing error in \"" << Code.str() << "\""; >>>>>>>> >>>>>>>> if (Printer.getNumFoundStmts() == 0) >>>>>>>> return testing::AssertionFailure() >>>>>>>> @@ -89,8 +90,8 @@ public: >>>>>>>> >>>>>>>> if (Printer.getPrinted() != ExpectedPrinted) >>>>>>>> return ::testing::AssertionFailure() >>>>>>>> - << "Expected \"" << ExpectedPrinted << "\", " >>>>>>>> - "got \"" << Printer.getPrinted() << "\""; >>>>>>>> + << "Expected \"" << ExpectedPrinted.str() << "\", " >>>>>>>> + "got \"" << Printer.getPrinted().str() << "\""; >>>>>>>> >>>>>>>> return ::testing::AssertionSuccess(); >>>>>>>> } >>>>>>>> >>>>>>>> Modified: cfe/trunk/unittests/Tooling/CompilationDatabaseTest.cpp >>>>>>>> URL: >>>>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Tooling/CompilationDatabaseTest.cpp?rev=200096&r1=200095&r2=200096&view=diff >>>>>>>> >>>>>>>> ============================================================================== >>>>>>>> --- cfe/trunk/unittests/Tooling/CompilationDatabaseTest.cpp >>>>>>>> (original) >>>>>>>> +++ cfe/trunk/unittests/Tooling/CompilationDatabaseTest.cpp Sat Jan >>>>>>>> 25 14:04:44 2014 >>>>>>>> @@ -24,7 +24,7 @@ static void expectFailure(StringRef JSON >>>>>>>> std::string ErrorMessage; >>>>>>>> EXPECT_EQ(NULL, >>>>>>>> JSONCompilationDatabase::loadFromBuffer(JSONDatabase, >>>>>>>> >>>>>>>> ErrorMessage)) >>>>>>>> - << "Expected an error because of: " << Explanation; >>>>>>>> + << "Expected an error because of: " << Explanation.str(); >>>>>>>> } >>>>>>>> >>>>>>>> TEST(JSONCompilationDatabase, ErrsOnInvalidFormat) { >>>>>>>> >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> cfe-commits mailing list >>>>>>>> [email protected] >>>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >>>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Saleem Abdulrasool >>>>>> compnerd (at) compnerd (dot) org >>>>>> >>>>>> _______________________________________________ >>>>>> cfe-commits mailing list >>>>>> [email protected] >>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >>>>>> >>>>>> >>>>> >>>> >>>> >>>> -- >>>> Saleem Abdulrasool >>>> compnerd (at) compnerd (dot) org >>>> >>> >>> >> >> >> -- >> Saleem Abdulrasool >> compnerd (at) compnerd (dot) org >> > > -- Saleem Abdulrasool compnerd (at) compnerd (dot) org
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
