llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Nikolas Klauser (philnik777) <details> <summary>Changes</summary> The values for `__has_cpp_attribute` don't have to be guarded behind `LangOpts.CPlusPlus` because `__has_cpp_attribute` isn't available if Clang isn't in a C++ mode. Fixes #<!-- -->82995 --- Full diff: https://github.com/llvm/llvm-project/pull/83065.diff 2 Files Affected: - (added) clang/test/SemaCXX/cxx03-cxx11-attr.cpp (+9) - (modified) clang/utils/TableGen/ClangAttrEmitter.cpp (+1-11) ``````````diff diff --git a/clang/test/SemaCXX/cxx03-cxx11-attr.cpp b/clang/test/SemaCXX/cxx03-cxx11-attr.cpp new file mode 100644 index 00000000000000..5a273c8fe2534a --- /dev/null +++ b/clang/test/SemaCXX/cxx03-cxx11-attr.cpp @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -std=c++03 -fsyntax-only %s + +// Ensure that __has_cpp_attribute and argument parsing work in C++03 + +#if !__has_cpp_attribute(nodiscard) +# error +#endif + +[[gnu::assume_aligned(4)]] void* g() { return __nullptr; } diff --git a/clang/utils/TableGen/ClangAttrEmitter.cpp b/clang/utils/TableGen/ClangAttrEmitter.cpp index 935b9846990ee5..eb5c34d15693d7 100644 --- a/clang/utils/TableGen/ClangAttrEmitter.cpp +++ b/clang/utils/TableGen/ClangAttrEmitter.cpp @@ -3576,10 +3576,6 @@ static void GenerateHasAttrSpellingStringSwitch( const Record *R = Attr->getValueAsDef("Target"); std::vector<StringRef> Arches = R->getValueAsListOfStrings("Arches"); GenerateTargetSpecificAttrChecks(R, Arches, Test, nullptr); - - // If this is the C++11 variety, also add in the LangOpts test. - if (Variety == "CXX11") - Test += " && LangOpts.CPlusPlus11"; } else if (!Attr->getValueAsListOfDefs("TargetSpecificSpellings").empty()) { // Add target checks if this spelling is target-specific. const std::vector<Record *> TargetSpellings = @@ -3597,13 +3593,7 @@ static void GenerateHasAttrSpellingStringSwitch( } } } - - if (Variety == "CXX11") - Test += " && LangOpts.CPlusPlus11"; - } else if (Variety == "CXX11") - // C++11 mode should be checked against LangOpts, which is presumed to be - // present in the caller. - Test = "LangOpts.CPlusPlus11"; + } std::string TestStr = !Test.empty() ? Test + " ? " + llvm::itostr(Version) + " : 0" `````````` </details> https://github.com/llvm/llvm-project/pull/83065 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits