diff --git a/clang/test/AST/regression-new-expr-crash.cpp b/clang/test/AST/regression-new-expr-crash.cpp index 81dd193b93e88..e1d93f92a125b 100644 --- a/clang/test/AST/regression-new-expr-crash.cpp +++ b/clang/test/AST/regression-new-expr-crash.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fsyntax-only %s +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fsyntax-only -verify %s struct Bar {int a;}; const Bar arr[2] = {{1}}; @@ -11,3 +11,8 @@ void foo(int a) { Foo *foo_array; foo_array = new Foo[arr[0].a]; } + +void Test(int N) { + int arr[N]; + decltype([&arr]{}) *p; // expected-error {{lambda expression in an unevaluated operand}} +} diff --git a/clang/unittests/AST/CMakeLists.txt b/clang/unittests/AST/CMakeLists.txt index 185995d5b5a27..2e750ac9ea925 100644 --- a/clang/unittests/AST/CMakeLists.txt +++ b/clang/unittests/AST/CMakeLists.txt @@ -26,7 +26,6 @@ add_clang_unittest(ASTTests DeclTest.cpp EvaluateAsRValueTest.cpp ExternalASTSourceTest.cpp - HasSideEffectsTest.cpp NamedDeclPrinterTest.cpp RecursiveASTVisitorTest.cpp SizelessTypesTest.cpp diff --git a/clang/unittests/AST/HasSideEffectsTest.cpp b/clang/unittests/AST/HasSideEffectsTest.cpp deleted file mode 100644 index 842afd8d7a9c3..0000000000000 --- a/clang/unittests/AST/HasSideEffectsTest.cpp +++ /dev/null @@ -1,86 +0,0 @@ -//===- unittest/AST/HasSideEffectsTest.cpp --------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "clang/AST/RecursiveASTVisitor.h" -#include "clang/AST/ASTConsumer.h" -#include "clang/AST/ASTContext.h" -#include "clang/AST/Attr.h" -#include "clang/Frontend/FrontendAction.h" -#include "clang/Tooling/Tooling.h" -#include "llvm/ADT/FunctionExtras.h" -#include "llvm/ADT/STLExtras.h" -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include - -using namespace clang; - -namespace { -class ProcessASTAction : public clang::ASTFrontendAction { -public: - ProcessASTAction(llvm::unique_function Process) - : Process(std::move(Process)) { - assert(this->Process); - } - - std::unique_ptr CreateASTConsumer(CompilerInstance &CI, - StringRef InFile) { - class Consumer : public ASTConsumer { - public: - Consumer(llvm::function_ref Process) - : Process(Process) {} - - void HandleTranslationUnit(ASTContext &Ctx) override { Process(Ctx); } - - private: - llvm::function_ref Process; - }; - - return std::make_unique(Process); - } - -private: - llvm::unique_function Process; -}; - -class RunHasSideEffects - : public RecursiveASTVisitor { -public: - RunHasSideEffects(ASTContext& Ctx) - : Ctx(Ctx) {} - - bool VisitLambdaExpr(LambdaExpr *LE) { - LE->HasSideEffects(Ctx); - return true; - } - - ASTContext& Ctx; -}; -} // namespace - -TEST(HasSideEffectsTest, All) { - llvm::StringRef Code = R"cpp( -void Test() { - int msize = 4; - float arr[msize]; - [&arr] {}; -} - )cpp"; - - ASSERT_NO_FATAL_FAILURE( - clang::tooling::runToolOnCode( - std::make_unique( - [&](clang::ASTContext &Ctx) { - RunHasSideEffects Visitor(Ctx); - Visitor.TraverseAST(Ctx); - } - ), - Code) - ); - -}