r325352 - Use Token::isOneOf method in Parser.
Author: marsupial Date: Fri Feb 16 08:07:33 2018 New Revision: 325352 URL: http://llvm.org/viewvc/llvm-project?rev=325352&view=rev Log: Use Token::isOneOf method in Parser. Summary: Easier to read and possibly optimize. Reviewers: rsmith, sepavloff Reviewed By: sepavloff Subscribers: sepavloff, cfe-commits Differential Revision: https://reviews.llvm.org/D36701 Modified: cfe/trunk/include/clang/Parse/Parser.h Modified: cfe/trunk/include/clang/Parse/Parser.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Parser.h?rev=325352&r1=325351&r2=325352&view=diff == --- cfe/trunk/include/clang/Parse/Parser.h (original) +++ cfe/trunk/include/clang/Parse/Parser.h Fri Feb 16 08:07:33 2018 @@ -379,15 +379,15 @@ private: /// isTokenParen - Return true if the cur token is '(' or ')'. bool isTokenParen() const { -return Tok.getKind() == tok::l_paren || Tok.getKind() == tok::r_paren; +return Tok.isOneOf(tok::l_paren, tok::r_paren); } /// isTokenBracket - Return true if the cur token is '[' or ']'. bool isTokenBracket() const { -return Tok.getKind() == tok::l_square || Tok.getKind() == tok::r_square; +return Tok.isOneOf(tok::l_square, tok::r_square); } /// isTokenBrace - Return true if the cur token is '{' or '}'. bool isTokenBrace() const { -return Tok.getKind() == tok::l_brace || Tok.getKind() == tok::r_brace; +return Tok.isOneOf(tok::l_brace, tok::r_brace); } /// isTokenStringLiteral - True if this token is a string-literal. bool isTokenStringLiteral() const { ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r327528 - Expand clang-interpreter with example of throwing in and from the JIT for Windows64.
Author: marsupial Date: Wed Mar 14 09:04:45 2018 New Revision: 327528 URL: http://llvm.org/viewvc/llvm-project?rev=327528&view=rev Log: Expand clang-interpreter with example of throwing in and from the JIT for Windows64. Summary: Getting this to work is not particularly obvious, and having it as an example should be helpful. Portions of this could be placed into LLVM, but as a whole it seems necessary to do this a higher level. Reviewers: lhames, mehdi_amini Reviewed By: lhames Subscribers: mgrang, martell, cfe-commits, mgorny Differential Revision: https://reviews.llvm.org/D35103 Added: cfe/trunk/examples/clang-interpreter/Invoke.cpp cfe/trunk/examples/clang-interpreter/Invoke.h cfe/trunk/examples/clang-interpreter/Manager.cpp cfe/trunk/examples/clang-interpreter/Manager.h cfe/trunk/examples/clang-interpreter/Test.cxx Modified: cfe/trunk/examples/clang-interpreter/CMakeLists.txt cfe/trunk/examples/clang-interpreter/README.txt cfe/trunk/examples/clang-interpreter/main.cpp Modified: cfe/trunk/examples/clang-interpreter/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/examples/clang-interpreter/CMakeLists.txt?rev=327528&r1=327527&r2=327528&view=diff == --- cfe/trunk/examples/clang-interpreter/CMakeLists.txt (original) +++ cfe/trunk/examples/clang-interpreter/CMakeLists.txt Wed Mar 14 09:04:45 2018 @@ -3,13 +3,17 @@ set(LLVM_LINK_COMPONENTS ExecutionEngine MC MCJIT + OrcJit Option + RuntimeDyld Support native ) add_clang_executable(clang-interpreter main.cpp + Invoke.cpp + Manager.cpp ) add_dependencies(clang-interpreter @@ -23,3 +27,67 @@ target_link_libraries(clang-interpreter clangDriver clangFrontend ) + +export_executable_symbols(clang-interpreter) + +if (MSVC) + # Is this a CMake bug that even with export_executable_symbols, Windows + # needs to explictly export the type_info vtable + set_property(TARGET clang-interpreter + APPEND_STRING PROPERTY LINK_FLAGS /EXPORT:??_7type_info@@6B@) +endif() + +function(clang_enable_exceptions TARGET) + # Really have to jump through hoops to enable exception handling independent + # of how LLVM is being built. + if (NOT LLVM_REQUIRES_EH AND NOT LLVM_REQUIRES_RTTI) +if (MSVC) + # /EHs to allow throwing rom extern "C" + set(excptnExceptions_ON "/D _HAS_EXCEPTIONS=1 /EHs /wd4714") + set(excptnExceptions_OFF "/D _HAS_EXCEPTIONS=0 /EHs-c-") + set(excptnRTTI_ON "/GR") + set(excptnRTTI_OFF "/GR-") + set(excptnEHRTTIRegEx "(/EHs(-c-?)|_HAS_EXCEPTIONS=(0|1))") +else() + set(excptnExceptions_ON "-fexceptions") + set(excptnExceptions_OFF "-fno-exceptions") + set(excptnRTTI_ON "-frtti") + set(excptnRTTI_OFF "-fno-rtti") + set(excptnEHRTTIRegEx "-f(exceptions|no-exceptions)") +endif() +if (LLVM_REQUIRES_EH) + set(excptnExceptions_DFLT ${excptnExceptions_ON}) +else() + set(excptnExceptions_DFLT ${excptnExceptions_OFF}) +endif() +if (LLVM_REQUIRES_RTTI) + set(excptnRTTI_DFLT ${excptnRTTI_ON}) +else() + set(excptnRTTI_DFLT ${excptnRTTI_OFF}) +endif() + +# Strip the exception & rtti flags from the target +get_property(addedFlags TARGET ${TARGET} PROPERTY COMPILE_FLAGS) +string(REGEX REPLACE ${excptnEHRTTIRegEx} "" editedFlags ${addedFlags}) +string(REPLACE ${excptnRTTI_OFF} "" editedFlags ${editedFlags}) +set_property(TARGET ${TARGET} PROPERTY COMPILE_FLAGS ${editedFlags}) + +get_property(addedFlags TARGET ${TARGET} PROPERTY COMPILE_DEFINITIONS) +string(REGEX REPLACE ${excptnEHRTTIRegEx} "" editedFlags ${addedFlags}) +string(REPLACE ${excptnRTTI_OFF} "" editedFlags ${editedFlags}) +set_property(TARGET ${TARGET} PROPERTY COMPILE_DEFINITIONS ${editedFlags}) + +# Re-add the exception & rtti flags from LLVM +set_property(SOURCE main.cpp APPEND_STRING PROPERTY COMPILE_FLAGS + " ${excptnExceptions_DFLT} ${excptnRTTI_DFLT} ") +set_property(SOURCE Manager.cpp APPEND_STRING PROPERTY COMPILE_FLAGS + " ${excptnExceptions_DFLT} ${excptnRTTI_DFLT} ") + +# Invoke with exceptions & rtti +set_property(SOURCE Invoke.cpp APPEND_STRING PROPERTY COMPILE_FLAGS + " ${excptnExceptions_ON} ${excptnRTTI_ON} ") + + endif() +endfunction(clang_enable_exceptions) + +clang_enable_exceptions(clang-interpreter) Added: cfe/trunk/examples/clang-interpreter/Invoke.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/examples/clang-interpreter/Invoke.cpp?rev=327528&view=auto == --- cfe/trunk/examples/clang-interpreter/Invoke.cpp (added) +++ cfe/trunk/examples/clang-interpreter/Invoke.cpp Wed Mar 14 09:04:45 2018 @@ -0,0 +1,31 @@ +//==-- examples/clang-interpreter/Invoke.cpp - Clang C Interpreter Example -==// +// +//
r327531 - [CMake] Properly quote string arguments to quiet errors from r327528 when built
Author: marsupial Date: Wed Mar 14 09:56:02 2018 New Revision: 327531 URL: http://llvm.org/viewvc/llvm-project?rev=327531&view=rev Log: [CMake] Properly quote string arguments to quiet errors from r327528 when built with LLVM_ENABLE_EH and LLVM_ENABLE_RTTI. Modified: cfe/trunk/examples/clang-interpreter/CMakeLists.txt Modified: cfe/trunk/examples/clang-interpreter/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/examples/clang-interpreter/CMakeLists.txt?rev=327531&r1=327530&r2=327531&view=diff == --- cfe/trunk/examples/clang-interpreter/CMakeLists.txt (original) +++ cfe/trunk/examples/clang-interpreter/CMakeLists.txt Wed Mar 14 09:56:02 2018 @@ -42,7 +42,7 @@ function(clang_enable_exceptions TARGET) # of how LLVM is being built. if (NOT LLVM_REQUIRES_EH AND NOT LLVM_REQUIRES_RTTI) if (MSVC) - # /EHs to allow throwing rom extern "C" + # /EHs to allow throwing from extern "C" set(excptnExceptions_ON "/D _HAS_EXCEPTIONS=1 /EHs /wd4714") set(excptnExceptions_OFF "/D _HAS_EXCEPTIONS=0 /EHs-c-") set(excptnRTTI_ON "/GR") @@ -68,14 +68,14 @@ function(clang_enable_exceptions TARGET) # Strip the exception & rtti flags from the target get_property(addedFlags TARGET ${TARGET} PROPERTY COMPILE_FLAGS) -string(REGEX REPLACE ${excptnEHRTTIRegEx} "" editedFlags ${addedFlags}) -string(REPLACE ${excptnRTTI_OFF} "" editedFlags ${editedFlags}) -set_property(TARGET ${TARGET} PROPERTY COMPILE_FLAGS ${editedFlags}) +string(REGEX REPLACE ${excptnEHRTTIRegEx} "" editedFlags "${addedFlags}") +string(REPLACE ${excptnRTTI_OFF} "" editedFlags "${editedFlags}") +set_property(TARGET ${TARGET} PROPERTY COMPILE_FLAGS "${editedFlags}") get_property(addedFlags TARGET ${TARGET} PROPERTY COMPILE_DEFINITIONS) -string(REGEX REPLACE ${excptnEHRTTIRegEx} "" editedFlags ${addedFlags}) -string(REPLACE ${excptnRTTI_OFF} "" editedFlags ${editedFlags}) -set_property(TARGET ${TARGET} PROPERTY COMPILE_DEFINITIONS ${editedFlags}) +string(REGEX REPLACE ${excptnEHRTTIRegEx} "" editedFlags "${addedFlags}") +string(REPLACE ${excptnRTTI_OFF} "" editedFlags "${editedFlags}") +set_property(TARGET ${TARGET} PROPERTY COMPILE_DEFINITIONS "${editedFlags}") # Re-add the exception & rtti flags from LLVM set_property(SOURCE main.cpp APPEND_STRING PROPERTY COMPILE_FLAGS ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r301449 - PPCallbacks::MacroUndefined, change signature and add test.
Author: marsupial Date: Wed Apr 26 14:47:31 2017 New Revision: 301449 URL: http://llvm.org/viewvc/llvm-project?rev=301449&view=rev Log: PPCallbacks::MacroUndefined, change signature and add test. Summary: The PPCallbacks::MacroUndefined callback is currently insufficient for clients that need to track the MacroDirectives. This patch adds an additional argument to PPCallbacks::MacroUndefined that is the undef MacroDirective. Reviewers: bruno, manmanren Reviewed By: bruno Subscribers: nemanjai, cfe-commits Differential Revision: https://reviews.llvm.org/D29923 Modified: cfe/trunk/include/clang/Lex/PPCallbacks.h cfe/trunk/include/clang/Lex/PreprocessingRecord.h cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp cfe/trunk/lib/Lex/PPDirectives.cpp cfe/trunk/lib/Lex/PreprocessingRecord.cpp cfe/trunk/tools/libclang/Indexing.cpp cfe/trunk/unittests/Basic/SourceManagerTest.cpp Modified: cfe/trunk/include/clang/Lex/PPCallbacks.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/PPCallbacks.h?rev=301449&r1=301448&r2=301449&view=diff == --- cfe/trunk/include/clang/Lex/PPCallbacks.h (original) +++ cfe/trunk/include/clang/Lex/PPCallbacks.h Wed Apr 26 14:47:31 2017 @@ -247,10 +247,14 @@ public: } /// \brief Hook called whenever a macro \#undef is seen. + /// \param Token The active Token + /// \param MD A MacroDefinition for the named macro. + /// \param Undef New MacroDirective if the macro was defined, null otherwise. /// /// MD is released immediately following this callback. virtual void MacroUndefined(const Token &MacroNameTok, - const MacroDefinition &MD) { + const MacroDefinition &MD, + const MacroDirective *Undef) { } /// \brief Hook called whenever the 'defined' operator is seen. @@ -439,15 +443,17 @@ public: Second->MacroExpands(MacroNameTok, MD, Range, Args); } - void MacroDefined(const Token &MacroNameTok, const MacroDirective *MD) override { + void MacroDefined(const Token &MacroNameTok, +const MacroDirective *MD) override { First->MacroDefined(MacroNameTok, MD); Second->MacroDefined(MacroNameTok, MD); } void MacroUndefined(const Token &MacroNameTok, - const MacroDefinition &MD) override { -First->MacroUndefined(MacroNameTok, MD); -Second->MacroUndefined(MacroNameTok, MD); + const MacroDefinition &MD, + const MacroDirective *Undef) override { +First->MacroUndefined(MacroNameTok, MD, Undef); +Second->MacroUndefined(MacroNameTok, MD, Undef); } void Defined(const Token &MacroNameTok, const MacroDefinition &MD, Modified: cfe/trunk/include/clang/Lex/PreprocessingRecord.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/PreprocessingRecord.h?rev=301449&r1=301448&r2=301449&view=diff == --- cfe/trunk/include/clang/Lex/PreprocessingRecord.h (original) +++ cfe/trunk/include/clang/Lex/PreprocessingRecord.h Wed Apr 26 14:47:31 2017 @@ -488,7 +488,8 @@ namespace clang { void MacroExpands(const Token &Id, const MacroDefinition &MD, SourceRange Range, const MacroArgs *Args) override; void MacroDefined(const Token &Id, const MacroDirective *MD) override; -void MacroUndefined(const Token &Id, const MacroDefinition &MD) override; +void MacroUndefined(const Token &Id, const MacroDefinition &MD, +const MacroDirective *Undef) override; void InclusionDirective(SourceLocation HashLoc, const Token &IncludeTok, StringRef FileName, bool IsAngled, CharSourceRange FilenameRange, Modified: cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp?rev=301449&r1=301448&r2=301449&view=diff == --- cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp (original) +++ cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp Wed Apr 26 14:47:31 2017 @@ -172,7 +172,8 @@ public: /// MacroUndefined - This hook is called whenever a macro #undef is seen. void MacroUndefined(const Token &MacroNameTok, - const MacroDefinition &MD) override; + const MacroDefinition &MD, + const MacroDirective *Undef) override; }; } // end anonymous namespace @@ -389,7 +390,8 @@ void PrintPPOutputPPCallbacks::MacroDefi } void PrintPPOutputPPCallbacks::MacroUndefined(const Token &MacroNameTok, - const MacroDefinition &MD) { + const MacroDefinition &M
Re: r301449 - PPCallbacks::MacroUndefined, change signature and add test.
My fault, waited too long to land it and didn't catch the addition of the file in between. From: v...@apple.com on behalf of Vedant Kumar Sent: Wednesday, April 26, 2017 9:19 PM To: Frederich Munch Cc: cfe-commits; Vedant Kumar Subject: Re: r301449 - PPCallbacks::MacroUndefined, change signature and add test. And I reverted my revert in r301472. See the thread re: r301470. Sorry for the noise, vedant > On Apr 26, 2017, at 2:12 PM, Vedant Kumar via cfe-commits > wrote: > > Hi Frederich, > > I had to revert this to unblock myself (r301469). > > best, > vedant > >> On Apr 26, 2017, at 1:51 PM, Evgenii Stepanov via cfe-commits >> wrote: >> >> Please change the signature of all overriding definitions as well. >> >> /code/llvm/tools/clang/lib/CodeGen/MacroPPCallbacks.h:114:50: error: >> non-virtual member function marked 'override' hides virtual member >> function >> const MacroDefinition &MD) override; >>^ >> /code/llvm/tools/clang/include/clang/Lex/PPCallbacks.h:255:16: note: >> hidden overloaded virtual function >> 'clang::PPCallbacks::MacroUndefined' declared here: different number >> of parameters (3 vs 2) >> virtual void MacroUndefined(const Token &MacroNameTok, >> >> On Wed, Apr 26, 2017 at 12:47 PM, Frederich Munch via cfe-commits >> wrote: >>> Author: marsupial >>> Date: Wed Apr 26 14:47:31 2017 >>> New Revision: 301449 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=301449&view=rev >>> Log: >>> PPCallbacks::MacroUndefined, change signature and add test. >>> >>> Summary: >>> The PPCallbacks::MacroUndefined callback is currently insufficient for >>> clients that need to track the MacroDirectives. >>> This patch adds an additional argument to PPCallbacks::MacroUndefined that >>> is the undef MacroDirective. >>> >>> Reviewers: bruno, manmanren >>> >>> Reviewed By: bruno >>> >>> Subscribers: nemanjai, cfe-commits >>> >>> Differential Revision: https://reviews.llvm.org/D29923 >>> >>> Modified: >>> cfe/trunk/include/clang/Lex/PPCallbacks.h >>> cfe/trunk/include/clang/Lex/PreprocessingRecord.h >>> cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp >>> cfe/trunk/lib/Lex/PPDirectives.cpp >>> cfe/trunk/lib/Lex/PreprocessingRecord.cpp >>> cfe/trunk/tools/libclang/Indexing.cpp >>> cfe/trunk/unittests/Basic/SourceManagerTest.cpp >>> >>> Modified: cfe/trunk/include/clang/Lex/PPCallbacks.h >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/PPCallbacks.h?rev=301449&r1=301448&r2=301449&view=diff >>> == >>> --- cfe/trunk/include/clang/Lex/PPCallbacks.h (original) >>> +++ cfe/trunk/include/clang/Lex/PPCallbacks.h Wed Apr 26 14:47:31 2017 >>> @@ -247,10 +247,14 @@ public: >>> } >>> >>> /// \brief Hook called whenever a macro \#undef is seen. >>> + /// \param Token The active Token >>> + /// \param MD A MacroDefinition for the named macro. >>> + /// \param Undef New MacroDirective if the macro was defined, null >>> otherwise. >>> /// >>> /// MD is released immediately following this callback. >>> virtual void MacroUndefined(const Token &MacroNameTok, >>> - const MacroDefinition &MD) { >>> + const MacroDefinition &MD, >>> + const MacroDirective *Undef) { >>> } >>> >>> /// \brief Hook called whenever the 'defined' operator is seen. >>> @@ -439,15 +443,17 @@ public: >>>Second->MacroExpands(MacroNameTok, MD, Range, Args); >>> } >>> >>> - void MacroDefined(const Token &MacroNameTok, const MacroDirective *MD) >>> override { >>> + void MacroDefined(const Token &MacroNameTok, >>> +const MacroDirective *MD) override { >>>First->MacroDefined(MacroNameTok, MD); >>>Second->MacroDefined(MacroNameTok, MD); >>> } >>> >>> void MacroUndefined(const Token &MacroNameTok, >>> - const MacroDefinition &MD) override { >>> -First->MacroUndefined(MacroNameTok, MD); >>> -Second->MacroUndefined
[PATCH] D22798: Fix for compiling with clang <= 3.7 and g++6 headers.
marsupial created this revision. marsupial added a reviewer: vsk. marsupial added a subscriber: cfe-commits. marsupial set the repository for this revision to rL LLVM. Make integers explicitly unsigned, so the tuple constructor will resolve properly when but with clang 3.6, 3.7 and gcc 6.1.1 libstdc++ headers. Repository: rL LLVM https://reviews.llvm.org/D22798 Files: lib/Driver/Tools.cpp Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -3715,13 +3715,13 @@ // match that of llvm-gcc and Apple GCC before that. PIC = ToolChain.isPICDefault() && ToolChain.isPICDefaultForced(); -return std::make_tuple(llvm::Reloc::DynamicNoPIC, PIC ? 2 : 0, false); +return std::make_tuple(llvm::Reloc::DynamicNoPIC, PIC ? 2U : 0U, false); } if (PIC) -return std::make_tuple(llvm::Reloc::PIC_, IsPICLevelTwo ? 2 : 1, PIE); +return std::make_tuple(llvm::Reloc::PIC_, IsPICLevelTwo ? 2U : 1U, PIE); - return std::make_tuple(llvm::Reloc::Static, 0, false); + return std::make_tuple(llvm::Reloc::Static, 0U, false); } static const char *RelocationModelName(llvm::Reloc::Model Model) { Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -3715,13 +3715,13 @@ // match that of llvm-gcc and Apple GCC before that. PIC = ToolChain.isPICDefault() && ToolChain.isPICDefaultForced(); -return std::make_tuple(llvm::Reloc::DynamicNoPIC, PIC ? 2 : 0, false); +return std::make_tuple(llvm::Reloc::DynamicNoPIC, PIC ? 2U : 0U, false); } if (PIC) -return std::make_tuple(llvm::Reloc::PIC_, IsPICLevelTwo ? 2 : 1, PIE); +return std::make_tuple(llvm::Reloc::PIC_, IsPICLevelTwo ? 2U : 1U, PIE); - return std::make_tuple(llvm::Reloc::Static, 0, false); + return std::make_tuple(llvm::Reloc::Static, 0U, false); } static const char *RelocationModelName(llvm::Reloc::Model Model) { ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D22798: Fix for compiling with clang <= 3.7 and g++6 headers.
marsupial added a comment. Would be nice...I have no commit access. Repository: rL LLVM https://reviews.llvm.org/D22798 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits