vitaut created this revision. vitaut added reviewers: rsmith, GorNishanov, EricWF. Herald added subscribers: cfe-commits, modocache.
Fix "Invalid operator call kind" error (`llvm_unreachable`) in `DecodeOperatorCall` when compiling the following example with `-emit-pch`: struct S {}; S operator co_await(S) { return S(); } template <typename T> int f3(T x) { co_await x; } Add the example to PCH test cases. Repository: rC Clang https://reviews.llvm.org/D50002 Files: lib/AST/StmtProfile.cpp test/PCH/coroutines.cpp Index: test/PCH/coroutines.cpp =================================================================== --- test/PCH/coroutines.cpp +++ test/PCH/coroutines.cpp @@ -66,6 +66,14 @@ co_return x; // checks coreturn_stmt with expr } +struct S {}; +S operator co_await(S) { return S(); } + +template <typename T> +int f3(T x) { + co_await x; // checks dependent_coawait with overloaded co_await operator +} + #else // expected-no-diagnostics Index: lib/AST/StmtProfile.cpp =================================================================== --- lib/AST/StmtProfile.cpp +++ lib/AST/StmtProfile.cpp @@ -1277,7 +1277,6 @@ case OO_Arrow: case OO_Call: case OO_Conditional: - case OO_Coawait: case NUM_OVERLOADED_OPERATORS: llvm_unreachable("Invalid operator call kind"); @@ -1449,6 +1448,10 @@ case OO_Subscript: return Stmt::ArraySubscriptExprClass; + + case OO_Coawait: + UnaryOp = UO_Coawait; + return Stmt::UnaryOperatorClass; } llvm_unreachable("Invalid overloaded operator expression");
Index: test/PCH/coroutines.cpp =================================================================== --- test/PCH/coroutines.cpp +++ test/PCH/coroutines.cpp @@ -66,6 +66,14 @@ co_return x; // checks coreturn_stmt with expr } +struct S {}; +S operator co_await(S) { return S(); } + +template <typename T> +int f3(T x) { + co_await x; // checks dependent_coawait with overloaded co_await operator +} + #else // expected-no-diagnostics Index: lib/AST/StmtProfile.cpp =================================================================== --- lib/AST/StmtProfile.cpp +++ lib/AST/StmtProfile.cpp @@ -1277,7 +1277,6 @@ case OO_Arrow: case OO_Call: case OO_Conditional: - case OO_Coawait: case NUM_OVERLOADED_OPERATORS: llvm_unreachable("Invalid operator call kind"); @@ -1449,6 +1448,10 @@ case OO_Subscript: return Stmt::ArraySubscriptExprClass; + + case OO_Coawait: + UnaryOp = UO_Coawait; + return Stmt::UnaryOperatorClass; } llvm_unreachable("Invalid overloaded operator expression");
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits