llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Oleksandr T. (a-tarasyuk) <details> <summary>Changes</summary> Fixes #<!-- -->159898 --- This PR addresses the issue of Clang asserting when `__has_embed` is used with an empty filename ```c #if __has_embed("") #endif ``` --- Full diff: https://github.com/llvm/llvm-project/pull/159928.diff 3 Files Affected: - (modified) clang/docs/ReleaseNotes.rst (+1) - (modified) clang/lib/Lex/PPMacroExpansion.cpp (+3-1) - (modified) clang/test/Preprocessor/embed___has_embed_parsing_errors.c (+3) ``````````diff diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 46d56bb3f07f5..b229960eff65c 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -366,6 +366,7 @@ Bug Fixes in This Version - Fixed an assertion when an improper use of the ``malloc`` attribute targeting a function without arguments caused us to try to access a non-existent argument. (#GH159080) +- Fixed a failed assertion with empty filename arguments in ``__has_embed``. (#GH159898) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/Lex/PPMacroExpansion.cpp b/clang/lib/Lex/PPMacroExpansion.cpp index 6f12ac80d677e..dec1956ea0f9a 100644 --- a/clang/lib/Lex/PPMacroExpansion.cpp +++ b/clang/lib/Lex/PPMacroExpansion.cpp @@ -1282,11 +1282,13 @@ EmbedResult Preprocessor::EvaluateHasEmbed(Token &Tok, IdentifierInfo *II) { SmallString<128> FilenameBuffer; StringRef Filename = this->getSpelling(FilenameTok, FilenameBuffer); + if (Filename.empty()) + return EmbedResult::Empty; + bool isAngled = this->GetIncludeFilenameSpelling(FilenameTok.getLocation(), Filename); // If GetIncludeFilenameSpelling set the start ptr to null, there was an // error. - assert(!Filename.empty()); const FileEntry *LookupFromFile = this->getCurrentFileLexer() ? *this->getCurrentFileLexer()->getFileEntry() : static_cast<FileEntry *>(nullptr); diff --git a/clang/test/Preprocessor/embed___has_embed_parsing_errors.c b/clang/test/Preprocessor/embed___has_embed_parsing_errors.c index 0591c595253bc..9c512a4882e2d 100644 --- a/clang/test/Preprocessor/embed___has_embed_parsing_errors.c +++ b/clang/test/Preprocessor/embed___has_embed_parsing_errors.c @@ -247,3 +247,6 @@ expected-error@+2 {{expected value in expression}} #if __has_embed (__FILE__ limit(-100000000000000000)) != __STDC_EMBED_NOT_FOUND__ #endif + +#if __has_embed("") // expected-error {{empty filename}} +#endif `````````` </details> https://github.com/llvm/llvm-project/pull/159928 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits