diff options
author | David Majnemer <david.majnemer@gmail.com> | 2013-06-04 17:38:44 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2013-06-04 17:38:44 +0000 |
commit | f69ce860487ec0b1eceb23f8391614d5772aae3b (patch) | |
tree | d6ac45b5978f12878f0ad4741560a5dacbb93743 /clang/test | |
parent | 33a35dff8305e01d15fbf881f500ac7ad1b020f1 (diff) | |
download | bcm5719-llvm-f69ce860487ec0b1eceb23f8391614d5772aae3b.tar.gz bcm5719-llvm-f69ce860487ec0b1eceb23f8391614d5772aae3b.zip |
Analysis: Add a CFG successor to a SwitchStmt if it is both empty and fully covered
Consider the case where a SwitchStmt satisfied isAllEnumCasesCovered()
as well as having no cases at all (i.e. the enum it covers has no
enumerators).
In this case, we should add a successor to repair the CFG.
This fixes PR16212.
llvm-svn: 183237
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/Analysis/cfg.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/clang/test/Analysis/cfg.cpp b/clang/test/Analysis/cfg.cpp index 0587057d724..c2ec2e9bec2 100644 --- a/clang/test/Analysis/cfg.cpp +++ b/clang/test/Analysis/cfg.cpp @@ -66,3 +66,19 @@ void checkDeclStmts() { static_assert(1, "abc"); } + +// CHECK: ENTRY +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B1] +// CHECK-NEXT: 1: e +// CHECK-NEXT: 2: [B1.1] (ImplicitCastExpr, LValueToRValue, enum EmptyE) +// CHECK-NEXT: 3: [B1.2] (ImplicitCastExpr, IntegralCast, int) +// CHECK-NEXT: T: switch [B1.3] +// CHECK-NEXT: Preds (1): B2 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 +enum EmptyE {}; +void F(EmptyE e) { + switch (e) {} +} |