This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG192c2c5c8947: [clang][Interp] Ignore StaticAssertDecls (authored by tbaeder).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D144272/new/ https://reviews.llvm.org/D144272 Files: clang/lib/AST/Interp/ByteCodeStmtGen.cpp clang/test/AST/Interp/functions.cpp Index: clang/test/AST/Interp/functions.cpp =================================================================== --- clang/test/AST/Interp/functions.cpp +++ clang/test/AST/Interp/functions.cpp @@ -9,11 +9,28 @@ static_assert(gimme5() == 5, ""); -template<typename T> constexpr T identity(T t) { return t; } +template<typename T> constexpr T identity(T t) { + static_assert(true); + return t; +} static_assert(identity(true), ""); static_assert(identity(true), ""); /// Compiled bytecode should be cached static_assert(!identity(false), ""); +template<typename A, typename B> +constexpr bool sameSize() { + static_assert(sizeof(A) == sizeof(B), ""); // expected-error {{static assertion failed}} \ + // ref-error {{static assertion failed}} \ + // expected-note {{evaluates to}} \ + // ref-note {{evaluates to}} + return true; +} +static_assert(sameSize<int, int>(), ""); +static_assert(sameSize<unsigned int, int>(), ""); +static_assert(sameSize<char, long>(), ""); // expected-note {{in instantiation of function template specialization}} \ + // ref-note {{in instantiation of function template specialization}} + + constexpr auto add(int a, int b) -> int { return identity(a) + identity(b); } Index: clang/lib/AST/Interp/ByteCodeStmtGen.cpp =================================================================== --- clang/lib/AST/Interp/ByteCodeStmtGen.cpp +++ clang/lib/AST/Interp/ByteCodeStmtGen.cpp @@ -224,6 +224,9 @@ template <class Emitter> bool ByteCodeStmtGen<Emitter>::visitDeclStmt(const DeclStmt *DS) { for (auto *D : DS->decls()) { + if (isa<StaticAssertDecl>(D)) + continue; + const auto *VD = dyn_cast<VarDecl>(D); if (!VD) return false;
Index: clang/test/AST/Interp/functions.cpp =================================================================== --- clang/test/AST/Interp/functions.cpp +++ clang/test/AST/Interp/functions.cpp @@ -9,11 +9,28 @@ static_assert(gimme5() == 5, ""); -template<typename T> constexpr T identity(T t) { return t; } +template<typename T> constexpr T identity(T t) { + static_assert(true); + return t; +} static_assert(identity(true), ""); static_assert(identity(true), ""); /// Compiled bytecode should be cached static_assert(!identity(false), ""); +template<typename A, typename B> +constexpr bool sameSize() { + static_assert(sizeof(A) == sizeof(B), ""); // expected-error {{static assertion failed}} \ + // ref-error {{static assertion failed}} \ + // expected-note {{evaluates to}} \ + // ref-note {{evaluates to}} + return true; +} +static_assert(sameSize<int, int>(), ""); +static_assert(sameSize<unsigned int, int>(), ""); +static_assert(sameSize<char, long>(), ""); // expected-note {{in instantiation of function template specialization}} \ + // ref-note {{in instantiation of function template specialization}} + + constexpr auto add(int a, int b) -> int { return identity(a) + identity(b); } Index: clang/lib/AST/Interp/ByteCodeStmtGen.cpp =================================================================== --- clang/lib/AST/Interp/ByteCodeStmtGen.cpp +++ clang/lib/AST/Interp/ByteCodeStmtGen.cpp @@ -224,6 +224,9 @@ template <class Emitter> bool ByteCodeStmtGen<Emitter>::visitDeclStmt(const DeclStmt *DS) { for (auto *D : DS->decls()) { + if (isa<StaticAssertDecl>(D)) + continue; + const auto *VD = dyn_cast<VarDecl>(D); if (!VD) return false;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits