From bfef399519ca9b8a4b4c6b563253bad7e0eeffe0 Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Sun, 22 Dec 2013 00:07:40 +0000 Subject: Vendor import of clang release_34 branch r197841 (effectively, 3.4 RC3): https://llvm.org/svn/llvm-project/cfe/branches/release_34@197841 --- test/.clang-format | 2 + test/ARCMT/Inputs/test1.m.in | 10 + test/ARCMT/Inputs/test1.m.in.result | 10 + test/ARCMT/checking-in-arc.m | 51 + test/ARCMT/checking.m | 14 +- test/ARCMT/driver-migrate.m | 3 + test/ARCMT/lit.local.cfg | 2 + test/ARCMT/objcmt-arc-cf-annotations.m | 2047 ++ test/ARCMT/objcmt-arc-cf-annotations.m.result | 2093 ++ test/ARCMT/objcmt-atomic-property.m | 229 + test/ARCMT/objcmt-atomic-property.m.result | 202 + test/ARCMT/objcmt-deprecated-category.m | 48 + test/ARCMT/objcmt-deprecated-category.m.result | 48 + test/ARCMT/objcmt-instancetype-2.m | 103 + test/ARCMT/objcmt-instancetype-2.m.result | 103 + test/ARCMT/objcmt-instancetype.m | 111 + test/ARCMT/objcmt-instancetype.m.result | 111 + test/ARCMT/objcmt-migrate-all.m | 135 + test/ARCMT/objcmt-migrate-all.m.result | 134 + test/ARCMT/objcmt-ns-macros.m | 296 + test/ARCMT/objcmt-ns-macros.m.result | 279 + test/ARCMT/objcmt-ns-nonatomic-iosonly.m | 236 + test/ARCMT/objcmt-ns-nonatomic-iosonly.m.result | 209 + test/ARCMT/objcmt-ns-returns-inner-pointer.m | 129 + .../ARCMT/objcmt-ns-returns-inner-pointer.m.result | 129 + test/ARCMT/objcmt-property-availability.m | 46 + test/ARCMT/objcmt-property-availability.m.result | 43 + test/ARCMT/objcmt-property.m | 237 + test/ARCMT/objcmt-property.m.result | 210 + test/ARCMT/objcmt-protocol-conformance.m | 114 + test/ARCMT/objcmt-protocol-conformance.m.result | 114 + test/ARCMT/verify.m | 2 +- test/ARCMT/whitelisted/Inputs/header1.h | 1 + test/ARCMT/whitelisted/header1.h | 5 + test/ARCMT/whitelisted/header1.h.result | 4 + test/ARCMT/whitelisted/header2.h | 5 + test/ARCMT/whitelisted/header2.h.result | 4 + test/ARCMT/whitelisted/objcmt-with-whitelist.m | 12 + test/ARCMT/with-arc-mode-check.m | 9 - test/ARCMT/with-arc-mode-migrate.m | 13 - test/ARCMT/with-arc-mode-migrate.m.result | 12 - test/ASTMerge/Inputs/lit.local.cfg | 1 - test/ASTMerge/category.m | 2 +- test/ASTMerge/class-template.cpp | 2 +- test/ASTMerge/class.cpp | 2 +- test/ASTMerge/enum.c | 2 +- test/ASTMerge/function.c | 2 +- test/ASTMerge/interface.m | 2 +- test/ASTMerge/namespace.cpp | 2 +- test/ASTMerge/property.m | 2 +- test/ASTMerge/struct.c | 2 +- test/ASTMerge/typedef.c | 2 +- test/ASTMerge/var.c | 2 +- test/Analysis/Inputs/system-header-simulator-cxx.h | 89 + .../Analysis/Inputs/system-header-simulator-objc.h | 1 + test/Analysis/Inputs/system-header-simulator.h | 4 +- .../Analysis/MismatchedDeallocator-checker-test.mm | 3 +- test/Analysis/MismatchedDeallocator-path-notes.cpp | 2 +- test/Analysis/NSContainers.m | 88 +- test/Analysis/NewDelete-checker-test.cpp | 152 + test/Analysis/NewDelete-path-notes.cpp | 140 +- test/Analysis/NoReturn.m | 8 + test/Analysis/analyzer-config.cpp | 3 +- test/Analysis/array-struct-region.cpp | 25 +- test/Analysis/auto-obj-dtors-cfg-output.cpp | 1415 +- test/Analysis/blocks.m | 45 +- test/Analysis/builtin-functions.cpp | 24 + test/Analysis/casts.cpp | 12 + test/Analysis/casts.m | 13 +- test/Analysis/cfg.cpp | 152 +- test/Analysis/conditional-operator-path-notes.c | 1083 - test/Analysis/conditional-operator.cpp | 2 +- test/Analysis/conditional-path-notes.c | 1582 ++ test/Analysis/crash-trace.c | 19 + test/Analysis/ctor-inlining.mm | 502 - test/Analysis/ctor.mm | 676 + test/Analysis/cxx-for-range.cpp | 1668 ++ test/Analysis/cxx11-crashes.cpp | 29 + test/Analysis/derived-to-base.cpp | 25 + .../include/report-issues-within-main-file.h | 43 + .../diagnostics/Inputs/include/sys/queue.h | 1 - .../diagnostics/deref-track-symbolic-region.c | 2 +- test/Analysis/diagnostics/explicit-suppression.cpp | 2 +- .../diagnostics/report-issues-within-main-file.cpp | 1756 ++ test/Analysis/diagnostics/text-diagnostics.c | 21 + test/Analysis/diagnostics/undef-value-caller.c | 2 +- test/Analysis/diagnostics/undef-value-param.c | 2 +- test/Analysis/diagnostics/undef-value-param.m | 2 +- test/Analysis/dtor.cpp | 35 + test/Analysis/edges-new.mm | 19628 +++++++++++++++++++ test/Analysis/func.c | 14 + test/Analysis/html-diags-multifile.c | 4 +- test/Analysis/html-diags.c | 8 + test/Analysis/identical-expressions.cpp | 942 + test/Analysis/initializer.cpp | 34 + test/Analysis/initializers-cfg-output.cpp | 20 +- test/Analysis/inline-plist.c | 2 +- test/Analysis/inline-unique-reports.c | 2 +- test/Analysis/inline.c | 6 + test/Analysis/inline.cpp | 16 + test/Analysis/inlining/DynDispatchBifurcate.m | 4 +- test/Analysis/inlining/InlineObjCClassMethod.m | 27 +- .../inlining/eager-reclamation-path-notes.c | 2 +- .../inlining/eager-reclamation-path-notes.cpp | 2 +- .../Analysis/inlining/false-positive-suppression.c | 8 + test/Analysis/inlining/inline-defensive-checks.c | 29 + test/Analysis/inlining/path-notes.c | 2 +- test/Analysis/inlining/path-notes.cpp | 488 +- test/Analysis/inlining/path-notes.m | 1005 +- test/Analysis/inlining/stl.cpp | 19 +- test/Analysis/lambdas.cpp | 2 +- test/Analysis/lit.local.cfg | 2 + test/Analysis/live-variables.cpp | 23 + test/Analysis/live-variables.m | 24 + test/Analysis/logical-ops.c | 12 + test/Analysis/malloc-plist.c | 2 +- test/Analysis/malloc.c | 131 +- test/Analysis/malloc.m | 15 + test/Analysis/method-call-path-notes.cpp | 2 +- test/Analysis/misc-ps-arm.m | 2 +- test/Analysis/misc-ps-region-store.cpp | 65 +- test/Analysis/misc-ps.c | 18 +- test/Analysis/new-with-exceptions.cpp | 32 +- test/Analysis/new.cpp | 155 + ...il-receiver-undefined-larger-than-voidptr-ret.m | 6 +- test/Analysis/null-deref-path-notes.m | 2 +- test/Analysis/nullptr.cpp | 6 + test/Analysis/objc-arc.m | 1874 +- test/Analysis/objc-for.m | 256 + test/Analysis/objc-properties.m | 2 +- ...direct-ivar-assignment-in-annotated-functions.m | 2 +- test/Analysis/objc_invalidation.m | 4 +- test/Analysis/operator-calls.cpp | 47 +- test/Analysis/out-of-bounds.c | 12 + test/Analysis/plist-macros.cpp | 1597 ++ test/Analysis/plist-output-alternate.m | 10 +- test/Analysis/plist-output.m | 10 +- test/Analysis/pointer-to-member.cpp | 1 + test/Analysis/ptr-arith.c | 16 + test/Analysis/ptr-arith.cpp | 22 + test/Analysis/rdar-6540084.m | 4 +- test/Analysis/reference.cpp | 7 + test/Analysis/reinterpret-cast.cpp | 17 + test/Analysis/retain-release-path-notes-gc.m | 18 +- test/Analysis/retain-release-path-notes.m | 1977 +- test/Analysis/retain-release.m | 98 + test/Analysis/security-syntax-checks.m | 3 +- test/Analysis/self-init.m | 4 +- test/Analysis/simple-stream-checks.c | 4 +- test/Analysis/stack-addr-ps.cpp | 4 + test/Analysis/string.c | 6 +- test/Analysis/taint-tester.cpp | 10 +- test/Analysis/temp-obj-dtors-cfg-output.cpp | 51 + test/Analysis/templates.cpp | 22 + test/Analysis/temporaries.cpp | 146 + test/Analysis/uninit-sometimes.cpp | 58 +- test/Analysis/uninit-vals-ps-region.m | 15 + test/Analysis/unions.cpp | 61 +- test/Analysis/unix-fns.c | 108 +- test/Analysis/unreachable-code-path.c | 19 + test/Analysis/weak-functions.c | 117 + test/CXX/basic/basic.link/p6.cpp | 53 +- test/CXX/basic/basic.link/p7.cpp | 73 + .../basic/basic.lookup/basic.lookup.argdep/p2.cpp | 10 +- .../basic/basic.scope/basic.scope.hiding/p2.cpp | 45 + test/CXX/basic/basic.start/basic.start.main/p2.cpp | 16 + test/CXX/class.access/class.friend/p1.cpp | 34 +- test/CXX/class.access/class.friend/p11.cpp | 80 + test/CXX/class.access/class.friend/p3-cxx0x.cpp | 13 +- test/CXX/class.access/class.friend/p6.cpp | 4 + test/CXX/class.access/p4.cpp | 10 +- test/CXX/class.access/p6.cpp | 4 +- test/CXX/class.derived/class.abstract/p16.cpp | 4 +- test/CXX/class.derived/class.member.lookup/p7.cpp | 11 + test/CXX/class.derived/class.virtual/p3-0x.cpp | 20 + test/CXX/class/class.friend/p6.cpp | 4 + test/CXX/class/class.nested.type/p1.cpp | 8 +- .../dcl.dcl/basic.namespace/namespace.def/p8.cpp | 4 +- test/CXX/dcl.dcl/dcl.attr/dcl.align/p7.cpp | 4 + .../dcl.dcl/dcl.attr/dcl.attr.deprecated/p1.cpp | 30 + test/CXX/dcl.dcl/dcl.link/p7-2.cpp | 8 +- test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p1.cpp | 3 +- test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp | 12 + test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp | 20 + .../dcl.spec/dcl.type/dcl.spec.auto/p12-1y.cpp | 17 + .../dcl.spec.auto/p3-generic-lambda-1y.cpp | 74 + .../dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p4.cpp | 2 +- .../dcl.spec/dcl.type/dcl.spec.auto/p6-1y.cpp | 97 - .../dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp | 6 +- .../dcl.spec/dcl.type/dcl.spec.auto/p7-1y.cpp | 94 + .../dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp | 13 + .../dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p3.cpp | 2 +- test/CXX/dcl.decl/dcl.init/dcl.init.aggr/p7.cpp | 2 +- test/CXX/dcl.decl/dcl.init/dcl.init.list/p3-0x.cpp | 10 +- test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp | 209 + .../dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp | 6 +- test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp | 2 +- test/CXX/drs/dr0xx.cpp | 1040 + test/CXX/drs/dr1xx.cpp | 1011 + test/CXX/drs/dr2xx.cpp | 726 + test/CXX/drs/dr4xx.cpp | 32 + test/CXX/except/except.spec/p14.cpp | 4 +- test/CXX/except/except.spec/p4.cpp | 5 + test/CXX/expr/expr.const/p2-0x.cpp | 12 +- test/CXX/expr/expr.const/p3-0x.cpp | 2 +- test/CXX/expr/expr.post/expr.call/p7-0x.cpp | 7 +- test/CXX/expr/expr.post/expr.const.cast/p1-0x.cpp | 20 +- .../CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp | 32 +- .../expr.prim/expr.prim.lambda/blocks-irgen.mm | 2 +- .../generic-lambda-unimplemented-1y.cpp | 31 + .../CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp | 77 + test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp | 12 + .../expr.prim.lambda/p2-generic-lambda-1y.cpp | 25 + test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp | 2 +- test/CXX/expr/expr.prim/expr.prim.lambda/p23.cpp | 25 +- test/CXX/expr/expr.prim/expr.prim.lambda/p4-1y.cpp | 66 + test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp | 8 +- test/CXX/expr/expr.prim/expr.prim.lambda/p4.mm | 2 +- .../expr.prim.lambda/p5-generic-lambda-1y.cpp | 131 + test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp | 5 +- test/CXX/expr/expr.unary/expr.new/p2-cxx0x.cpp | 2 +- test/CXX/expr/expr.unary/expr.sizeof/p1.cpp | 28 + .../expr/expr.unary/expr.unary.noexcept/sema.cpp | 9 +- test/CXX/expr/expr.unary/expr.unary.op/p4.cpp | 4 +- test/CXX/lex/lex.literal/lex.ext/p11.cpp | 22 + test/CXX/lex/lex.literal/lex.ext/p12.cpp | 21 + test/CXX/lex/lex.literal/lex.ext/p3.cpp | 2 +- test/CXX/lex/lex.literal/lex.ext/p5.cpp | 4 +- test/CXX/lex/lex.literal/lex.ext/p7.cpp | 4 +- .../over.over/p2-resolve-single-template-id.cpp | 2 +- test/CXX/over/over.over/p2.cpp | 3 +- test/CXX/special/class.copy/implicit-move-def.cpp | 2 +- test/CXX/special/class.copy/implicit-move.cpp | 147 +- test/CXX/special/class.copy/p11.0x.copy.cpp | 8 + test/CXX/special/class.copy/p11.0x.move.cpp | 21 +- test/CXX/special/class.copy/p12-0x.cpp | 4 +- test/CXX/special/class.copy/p23-cxx11.cpp | 38 +- test/CXX/special/class.ctor/p5-0x.cpp | 2 +- test/CXX/special/class.inhctor/p1.cpp | 13 +- test/CXX/special/class.inhctor/p4.cpp | 13 +- test/CXX/special/class.inhctor/p8.cpp | 4 +- test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp | 2 +- test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp | 4 +- test/CXX/temp/temp.decls/temp.alias/p3.cpp | 4 + test/CXX/temp/temp.decls/temp.class.spec/p8-1y.cpp | 35 + .../temp.decls/temp.class/temp.mem.enum/p1.cpp | 6 +- .../temp/temp.decls/temp.class/temp.static/p1.cpp | 2 +- .../temp.decls/temp.fct/temp.func.order/p3-0x.cpp | 7 + test/CXX/temp/temp.decls/temp.friend/p4.cpp | 17 + test/CXX/temp/temp.decls/temp.friend/p5.cpp | 8 +- test/CXX/temp/temp.decls/temp.mem/p2.cpp | 12 + test/CXX/temp/temp.decls/temp.variadic/p2.cpp | 2 +- test/CXX/temp/temp.decls/temp.variadic/p5.cpp | 12 + .../temp/temp.decls/temp.variadic/sizeofpack.cpp | 203 + test/CXX/temp/temp.param/p5.cpp | 9 +- test/CXX/temp/temp.res/temp.local/p6.cpp | 69 + .../temp.spec/cxx1y-variable-template-no-body.cpp | 37 + test/CXX/temp/temp.spec/no-body.cpp | 63 + .../CXX/temp/temp.spec/temp.expl.spec/examples.cpp | 2 +- .../temp/temp.spec/temp.explicit/p9-linkage.cpp | 2 +- test/CXX/temp/temp.spec/temp.inst/p1.cpp | 11 +- test/CodeCompletion/call.c | 6 +- test/CodeCompletion/call.cpp | 4 +- test/CodeCompletion/documentation.cpp | 4 +- test/CodeCompletion/enum-switch-case-qualified.cpp | 2 +- test/CodeCompletion/enum-switch-case.c | 4 +- test/CodeCompletion/enum-switch-case.cpp | 2 +- test/CodeCompletion/functions.cpp | 2 +- test/CodeCompletion/member-access.c | 2 +- test/CodeCompletion/namespace-alias.cpp | 2 +- test/CodeCompletion/namespace.cpp | 2 +- test/CodeCompletion/nested-name-specifier.cpp | 2 +- test/CodeCompletion/objc-expr.m | 4 +- test/CodeCompletion/operator.cpp | 2 +- test/CodeCompletion/stdin.c | 2 +- test/CodeCompletion/tag.c | 2 +- test/CodeCompletion/tag.cpp | 2 +- test/CodeCompletion/truncation.c | 4 +- test/CodeCompletion/using-namespace.cpp | 2 +- test/CodeCompletion/using.cpp | 2 +- test/CodeGen/2003-08-06-BuiltinSetjmpLongjmp.c | 7 +- test/CodeGen/2004-11-27-InvalidConstantExpr.c | 10 - test/CodeGen/2004-11-27-StaticFunctionRedeclare.c | 8 +- test/CodeGen/2007-02-25-C-DotDotDot.c | 2 +- test/CodeGen/2007-03-05-DataLayout.c | 55 - test/CodeGen/2007-04-14-FNoBuiltin.c | 7 +- test/CodeGen/2007-05-07-PaddingElements.c | 4 +- test/CodeGen/2008-01-11-ChainConsistency.c | 3 - test/CodeGen/2008-01-25-ByValReadNone.c | 5 +- test/CodeGen/2008-03-05-syncPtr.c | 12 +- test/CodeGen/2008-03-24-BitField-And-Alloca.c | 2 +- test/CodeGen/2008-05-19-AlwaysInline.c | 3 +- test/CodeGen/2008-07-30-implicit-initialization.c | 6 +- test/CodeGen/2008-07-31-asm-labels.c | 6 +- ...7-31-promotion-of-compound-pointer-arithmetic.c | 6 +- test/CodeGen/2008-08-07-AlignPadding2.c | 2 +- test/CodeGen/2010-01-18-Inlined-Debug.c | 2 +- test/CodeGen/2010-03-5-LexicalScope.c | 2 +- test/CodeGen/2010-07-08-DeclDebugLineNo.c | 2 +- test/CodeGen/2010-08-12-asm-aggr-arg.c | 2 +- test/CodeGen/3dnow-builtins.c | 50 +- test/CodeGen/Atomics.c | 4 +- test/CodeGen/PR15826.c | 19 + test/CodeGen/PR3589-freestanding-libcalls.c | 2 +- test/CodeGen/PR5060-align.c | 2 +- test/CodeGen/_Bool-conversion.c | 2 +- test/CodeGen/aarch64-arguments.c | 24 +- test/CodeGen/aarch64-neon-2velem.c | 1698 ++ test/CodeGen/aarch64-neon-across.c | 271 + test/CodeGen/aarch64-neon-copy.c | 1319 ++ test/CodeGen/aarch64-neon-crypto.c | 94 + test/CodeGen/aarch64-neon-extract.c | 148 + test/CodeGen/aarch64-neon-fcvt-intrinsics.c | 133 + test/CodeGen/aarch64-neon-intrinsics.c | 11725 +++++++++++ test/CodeGen/aarch64-neon-ldst-one.c | 2047 ++ test/CodeGen/aarch64-neon-misc.c | 2005 ++ test/CodeGen/aarch64-neon-perm.c | 1093 ++ test/CodeGen/aarch64-neon-scalar-copy.c | 173 + test/CodeGen/aarch64-neon-scalar-x-indexed-elem.c | 255 + test/CodeGen/aarch64-neon-shifts.c | 43 + test/CodeGen/aarch64-neon-tbl.c | 463 + test/CodeGen/aarch64-neon-vcombine.c | 91 + test/CodeGen/aarch64-neon-vget-hilo.c | 176 + test/CodeGen/aarch64-poly64.c | 283 + test/CodeGen/aarch64-varargs.c | 14 +- test/CodeGen/address-space.c | 8 +- test/CodeGen/alias.c | 6 +- test/CodeGen/align-param.c | 4 +- test/CodeGen/align-x68_64.c | 11 + test/CodeGen/alignment.c | 5 +- test/CodeGen/annotations-var.c | 4 +- test/CodeGen/arm-aapcs-vfp.c | 2 +- test/CodeGen/arm-arguments.c | 122 +- test/CodeGen/arm-asm-diag.c | 10 +- test/CodeGen/arm-asm-warn.c | 11 +- test/CodeGen/arm-cc.c | 8 +- test/CodeGen/arm-clear.c | 17 +- test/CodeGen/arm-crc32.c | 63 + test/CodeGen/arm-interrupt-attr.c | 38 + test/CodeGen/arm-neon-shifts.c | 45 + test/CodeGen/arm-neon-vget.c | 124 + test/CodeGen/arm-pcs.c | 2 +- test/CodeGen/arm-pnaclcall.c | 8 +- test/CodeGen/arm_neon_intrinsics.c | 11636 +++++++++++ test/CodeGen/asm-label.c | 12 + test/CodeGen/assign.c | 4 +- test/CodeGen/atomic-ops.c | 7 +- test/CodeGen/atomics-inlining.c | 90 +- test/CodeGen/attr-availability.c | 12 +- test/CodeGen/attr-coldhot.c | 2 +- test/CodeGen/attr-minsize.cpp | 2 +- test/CodeGen/attr-weakref.c | 4 +- test/CodeGen/available-externally-suppress.c | 4 +- test/CodeGen/avx-builtins.c | 18 + test/CodeGen/avx-cmp-builtins.c | 48 + test/CodeGen/avx2-builtins.c | 22 +- test/CodeGen/big-atomic-ops.c | 323 + test/CodeGen/bitfield-2.c | 18 +- test/CodeGen/bitfield-assign.c | 6 +- test/CodeGen/bitfield.c | 21 +- test/CodeGen/block-byref-aggr.c | 4 +- test/CodeGen/blocks-2.c | 18 - test/CodeGen/blocks.c | 16 +- test/CodeGen/bool_test.c | 2 +- test/CodeGen/bounds-checking.c | 19 +- test/CodeGen/branch-on-bool.c | 22 + test/CodeGen/builtin-ms-noop.cpp | 2 +- test/CodeGen/builtins-arm-exclusive.c | 112 + test/CodeGen/builtins-arm.c | 10 + test/CodeGen/builtins-mips-msa.c | 829 + test/CodeGen/builtins-ms.c | 9 + test/CodeGen/builtins-multiprecision.c | 38 + test/CodeGen/builtins-nvptx.c | 9 + test/CodeGen/builtins-overflow.c | 175 + test/CodeGen/builtins-ppc-altivec.c | 10 +- test/CodeGen/builtins-x86.c | 12 + test/CodeGen/builtins.c | 8 +- test/CodeGen/builtinshufflevector2.c | 13 +- test/CodeGen/byval-memcpy-elim.c | 6 +- test/CodeGen/c-strings.c | 10 +- test/CodeGen/c11atomics-ios.c | 12 +- test/CodeGen/c11atomics.c | 29 +- test/CodeGen/capture-complex-expr-in-block.c | 2 +- test/CodeGen/captured-statements-nested.c | 126 + test/CodeGen/captured-statements.c | 80 + test/CodeGen/catch-undef-behavior.c | 4 +- test/CodeGen/char-literal.c | 6 +- test/CodeGen/complex-convert.c | 2 +- test/CodeGen/complex-indirect.c | 2 +- test/CodeGen/complex-init-list.c | 4 +- test/CodeGen/complex.c | 9 +- test/CodeGen/compound-assign-overflow.c | 3 +- test/CodeGen/compound-literal.c | 4 +- test/CodeGen/const-init.c | 2 +- test/CodeGen/convertvector.c | 114 + test/CodeGen/cxx-default-arg.cpp | 2 +- test/CodeGen/darwin-string-literals.c | 4 +- test/CodeGen/debug-info-args.c | 2 +- test/CodeGen/debug-info-block-decl.c | 19 + test/CodeGen/debug-info-enum.c | 11 - test/CodeGen/debug-info-limited.c | 11 + test/CodeGen/debug-info-version.c | 8 + test/CodeGen/debug-info-vla.c | 3 +- test/CodeGen/decl-in-prototype.c | 4 +- test/CodeGen/dependent-lib.c | 15 + test/CodeGen/designated-initializers.c | 87 + test/CodeGen/dllimport-dllexport.c | 4 +- test/CodeGen/dwarf-version.c | 14 + test/CodeGen/exceptions-seh.c | 18 + test/CodeGen/exceptions.c | 4 +- test/CodeGen/exprs.c | 12 +- test/CodeGen/ext-vector.c | 15 + test/CodeGen/fast-math.c | 2 +- test/CodeGen/finite-math.c | 2 +- test/CodeGen/fp16-ops.c | 2 +- test/CodeGen/func-return-member.c | 6 +- test/CodeGen/function-attributes.c | 12 +- test/CodeGen/functions.c | 6 +- test/CodeGen/implicit-arg.c | 2 +- test/CodeGen/incomplete-function-type.c | 2 +- test/CodeGen/inline.c | 91 +- test/CodeGen/inline2.c | 48 +- test/CodeGen/integer-overflow.c | 6 +- test/CodeGen/le32-arguments.c | 18 +- test/CodeGen/le32-libcall-pow.c | 27 + test/CodeGen/libcall-declarations.c | 570 +- test/CodeGen/libcalls-complex.c | 4 +- test/CodeGen/libcalls-d.c | 4 +- test/CodeGen/libcalls-ld.c | 4 +- test/CodeGen/libcalls.c | 21 +- test/CodeGen/link-bitcode-file.c | 6 +- test/CodeGen/linkage-redecl.c | 2 +- test/CodeGen/linux-arm-atomic.c | 2 + test/CodeGen/long-double-x86-nacl.c | 2 +- test/CodeGen/mangle-windows-rtd.c | 10 + test/CodeGen/mangle-windows.c | 34 + test/CodeGen/may-alias.c | 25 +- test/CodeGen/microsoft-call-conv-x64.c | 4 +- test/CodeGen/microsoft-call-conv.c | 16 +- test/CodeGen/mips-byval-arg.c | 4 +- test/CodeGen/mips-clobber-reg.c | 206 +- test/CodeGen/mips-constraints-mem.c | 2 +- test/CodeGen/mips-inline-asm-modifiers.c | 11 +- test/CodeGen/mips-target-data.c | 2 + test/CodeGen/mips-vector-return.c | 6 +- test/CodeGen/mips64-class-return.cpp | 4 +- test/CodeGen/mips64-padding-arg.c | 24 +- test/CodeGen/mmx-inline-asm-error.c | 13 + test/CodeGen/mrtd.c | 11 +- test/CodeGen/ms-declspecs.c | 5 + test/CodeGen/ms-inline-asm-64.c | 2 +- test/CodeGen/ms-inline-asm.c | 2 +- test/CodeGen/ms-inline-asm.cpp | 16 +- test/CodeGen/ms_abi.c | 20 + test/CodeGen/mult-alt-generic.c | 1 - test/CodeGen/no-opt-volatile-memcpy.c | 6 +- test/CodeGen/nomathbuiltin.c | 12 + test/CodeGen/nvptx-abi.c | 17 + test/CodeGen/nvptx-inlineasm-ptx.c | 40 + test/CodeGen/object-size.c | 34 +- test/CodeGen/override-layout.c | 48 +- test/CodeGen/packed-arrays.c | 30 +- test/CodeGen/packed-nest-unpacked.c | 2 +- test/CodeGen/packed-structure.c | 20 +- test/CodeGen/ppc64-extend.c | 2 +- test/CodeGen/ppc64-struct-onefloat.c | 6 +- test/CodeGen/ppc64-struct-onevect.c | 13 + test/CodeGen/pr12251.c | 2 +- test/CodeGen/pr2394.c | 2 +- test/CodeGen/pr3518.c | 2 +- test/CodeGen/pr4349.c | 2 +- test/CodeGen/pr9614.c | 2 +- test/CodeGen/pragma-comment.c | 23 + test/CodeGen/pragma-detect_mismatch.c | 12 + test/CodeGen/pragma-pack-2.c | 4 +- test/CodeGen/pragma-pack-3.c | 4 +- test/CodeGen/pragma-visibility.c | 4 +- test/CodeGen/pragma-weak.c | 88 +- test/CodeGen/predefined-expr.c | 12 + test/CodeGen/regparm.c | 2 +- test/CodeGen/sections.c | 28 + test/CodeGen/sha-builtins.c | 35 + test/CodeGen/sparcv9-abi.c | 181 + test/CodeGen/sret.c | 2 +- test/CodeGen/sret2.c | 2 +- test/CodeGen/sse-builtins.c | 65 +- test/CodeGen/statements.c | 7 - test/CodeGen/static-order.c | 2 +- test/CodeGen/stdcall-fastcall.c | 30 +- test/CodeGen/string-literal-unicode-conversion.c | 11 +- test/CodeGen/struct-init.c | 2 +- test/CodeGen/struct-matching-constraint.c | 2 +- test/CodeGen/switch-dce.c | 2 +- test/CodeGen/switch.c | 20 +- test/CodeGen/systemz-inline-asm.c | 36 +- test/CodeGen/tbaa-class.cpp | 64 +- test/CodeGen/tbaa-for-vptr.cpp | 7 +- test/CodeGen/tbaa-ms-abi.cpp | 22 + test/CodeGen/tbaa-struct.cpp | 8 +- test/CodeGen/tbaa-thread-sanitizer.cpp | 14 + test/CodeGen/tbaa.cpp | 85 +- test/CodeGen/tbm-builtins.c | 137 + test/CodeGen/transparent-union.c | 2 +- test/CodeGen/trapv.c | 8 +- test/CodeGen/unsigned-overflow.c | 20 +- test/CodeGen/unsigned-promotion.c | 24 +- test/CodeGen/unwind-attr.c | 2 +- test/CodeGen/vector.c | 7 + test/CodeGen/visibility.c | 36 +- test/CodeGen/vla.c | 12 +- test/CodeGen/vld_dup.c | 2 +- test/CodeGen/volatile-1.c | 60 +- test/CodeGen/volatile-2.c | 16 +- test/CodeGen/volatile-complex.c | 67 + test/CodeGen/wchar-const.c | 4 +- test/CodeGen/x86_32-arguments-darwin.c | 102 +- test/CodeGen/x86_32-arguments-linux.c | 2 +- test/CodeGen/x86_32-arguments-nommx.c | 4 +- test/CodeGen/x86_32-arguments-realign.c | 2 +- test/CodeGen/x86_32-arguments-win32.c | 18 +- test/CodeGen/x86_32-fpcc-struct-return.c | 34 + test/CodeGen/x86_64-arguments-nacl.c | 30 +- test/CodeGen/x86_64-arguments.c | 110 +- test/CodeGen/xcore-abi.c | 129 + test/CodeGenCUDA/address-spaces.cu | 6 +- test/CodeGenCUDA/ptx-kernels.cu | 4 +- .../2004-11-27-FriendDefaultArgCrash.cpp | 2 +- test/CodeGenCXX/2005-02-14-BitFieldOffset.cpp | 12 - test/CodeGenCXX/2007-05-03-VectorInit.cpp | 2 +- test/CodeGenCXX/2010-05-10-Var-DbgInfo.cpp | 2 +- test/CodeGenCXX/DynArrayInit.cpp | 2 +- test/CodeGenCXX/PR5050-constructor-conversion.cpp | 4 +- test/CodeGenCXX/aarch64-mangle-neon-vectors.cpp | 85 + test/CodeGenCXX/aarch64-neon.cpp | 13 + test/CodeGenCXX/abstract-class-ctors-dtors.cpp | 8 +- test/CodeGenCXX/address-of-fntemplate.cpp | 4 +- test/CodeGenCXX/alloca-align.cpp | 6 +- test/CodeGenCXX/anonymous-namespaces.cpp | 21 +- .../anonymous-union-member-initializer.cpp | 12 +- .../apple-kext-indirect-virtual-dtor-call.cpp | 4 +- test/CodeGenCXX/apple-kext-linkage.C | 12 +- test/CodeGenCXX/arm-vaarg.cpp | 27 + test/CodeGenCXX/arm.cpp | 52 +- test/CodeGenCXX/array-construction.cpp | 4 +- test/CodeGenCXX/array-operator-delete-call.cpp | 4 +- test/CodeGenCXX/atomic.cpp | 2 +- test/CodeGenCXX/atomicinit.cpp | 6 +- test/CodeGenCXX/attr-cleanup.cpp | 11 + test/CodeGenCXX/attr.cpp | 2 +- test/CodeGenCXX/bitfield-layout.cpp | 4 +- test/CodeGenCXX/bitfield.cpp | 84 +- test/CodeGenCXX/block-byref-cxx-objc.cpp | 8 +- test/CodeGenCXX/block-in-ctor-dtor.cpp | 20 +- test/CodeGenCXX/blocks-cxx11.cpp | 4 +- test/CodeGenCXX/blocks.cpp | 28 +- test/CodeGenCXX/bool-bitfield.cpp | 4 +- test/CodeGenCXX/builtins.cpp | 21 +- test/CodeGenCXX/c-linkage.cpp | 6 +- test/CodeGenCXX/c99-variable-length-array.cpp | 2 +- test/CodeGenCXX/call-arg-zero-temp.cpp | 4 +- test/CodeGenCXX/captured-statements.cpp | 189 + test/CodeGenCXX/cast-conversion.cpp | 4 +- test/CodeGenCXX/catch-undef-behavior.cpp | 158 +- test/CodeGenCXX/catch-undef-behavior2.cpp | 9 + test/CodeGenCXX/compound-literals.cpp | 4 +- test/CodeGenCXX/condition.cpp | 8 +- test/CodeGenCXX/conditional-gnu-ext.cpp | 8 +- test/CodeGenCXX/conditional-temporaries.cpp | 6 +- test/CodeGenCXX/const-init-cxx11.cpp | 110 +- test/CodeGenCXX/const-init-cxx1y.cpp | 48 + test/CodeGenCXX/const-init.cpp | 2 +- test/CodeGenCXX/constructor-attr.cpp | 2 +- test/CodeGenCXX/constructor-conversion.cpp | 4 +- test/CodeGenCXX/constructor-default-arg.cpp | 4 +- .../constructor-destructor-return-this.cpp | 138 +- test/CodeGenCXX/constructor-for-array-members.cpp | 4 +- test/CodeGenCXX/constructor-init.cpp | 16 +- test/CodeGenCXX/constructor-template.cpp | 4 +- test/CodeGenCXX/constructors.cpp | 22 +- test/CodeGenCXX/conversion-function.cpp | 4 +- test/CodeGenCXX/convert-to-fptr.cpp | 4 +- test/CodeGenCXX/copy-assign-synthesis-1.cpp | 16 +- test/CodeGenCXX/copy-assign-synthesis-2.cpp | 2 +- test/CodeGenCXX/copy-assign-synthesis.cpp | 2 +- test/CodeGenCXX/copy-constructor-elim-2.cpp | 6 +- test/CodeGenCXX/copy-constructor-elim.cpp | 4 +- test/CodeGenCXX/copy-constructor-synthesis-2.cpp | 2 +- test/CodeGenCXX/copy-constructor-synthesis.cpp | 45 +- test/CodeGenCXX/copy-initialization.cpp | 2 +- test/CodeGenCXX/crash.cpp | 35 + test/CodeGenCXX/ctor-dtor-alias.cpp | 163 + test/CodeGenCXX/cxx-block-objects.cpp | 4 +- test/CodeGenCXX/cxx0x-delegating-ctors.cpp | 2 +- test/CodeGenCXX/cxx0x-initializer-array.cpp | 12 +- test/CodeGenCXX/cxx0x-initializer-constructors.cpp | 24 +- ...xx0x-initializer-stdinitializerlist-pr12086.cpp | 107 +- ...x0x-initializer-stdinitializerlist-startend.cpp | 10 +- .../cxx0x-initializer-stdinitializerlist.cpp | 202 +- test/CodeGenCXX/cxx11-exception-spec.cpp | 2 +- test/CodeGenCXX/cxx11-initializer-array-new.cpp | 106 + test/CodeGenCXX/cxx11-thread-local-reference.cpp | 4 +- test/CodeGenCXX/cxx11-thread-local.cpp | 21 +- test/CodeGenCXX/cxx1y-deduced-return-type.cpp | 32 + test/CodeGenCXX/cxx1y-init-captures.cpp | 102 + test/CodeGenCXX/cxx1y-initializer-aggregate.cpp | 17 +- test/CodeGenCXX/cxx1y-sized-deallocation.cpp | 110 + test/CodeGenCXX/cxx1y-variable-template.cpp | 24 + test/CodeGenCXX/debug-info-artificial-arg.cpp | 8 +- test/CodeGenCXX/debug-info-class-limited.cpp | 52 + test/CodeGenCXX/debug-info-class-nolimit.cpp | 30 + test/CodeGenCXX/debug-info-class.cpp | 87 +- test/CodeGenCXX/debug-info-cxx1y.cpp | 7 + test/CodeGenCXX/debug-info-decl-nested.cpp | 61 + test/CodeGenCXX/debug-info-enum-class.cpp | 8 +- test/CodeGenCXX/debug-info-enum.cpp | 40 +- test/CodeGenCXX/debug-info-friend.cpp | 19 +- test/CodeGenCXX/debug-info-function-context.cpp | 36 + test/CodeGenCXX/debug-info-gline-tables-only.cpp | 10 +- test/CodeGenCXX/debug-info-global-ctor-dtor.cpp | 6 +- test/CodeGenCXX/debug-info-globalinit.cpp | 12 +- test/CodeGenCXX/debug-info-limit-type.cpp | 24 - test/CodeGenCXX/debug-info-limit.cpp | 14 - test/CodeGenCXX/debug-info-limited.cpp | 33 + test/CodeGenCXX/debug-info-method.cpp | 5 +- test/CodeGenCXX/debug-info-namespace.cpp | 66 +- test/CodeGenCXX/debug-info-nullptr.cpp | 2 +- test/CodeGenCXX/debug-info-pubtypes.cpp | 5 +- test/CodeGenCXX/debug-info-same-line.cpp | 25 + test/CodeGenCXX/debug-info-scope.cpp | 32 + test/CodeGenCXX/debug-info-static-member.cpp | 14 +- test/CodeGenCXX/debug-info-template-limit.cpp | 4 +- test/CodeGenCXX/debug-info-template-member.cpp | 89 +- test/CodeGenCXX/debug-info-template-quals.cpp | 12 +- test/CodeGenCXX/debug-info-template.cpp | 138 +- test/CodeGenCXX/debug-info-thunk.cpp | 2 +- test/CodeGenCXX/debug-info-union-template.cpp | 2 +- test/CodeGenCXX/debug-info-uuid.cpp | 19 + test/CodeGenCXX/debug-info-zero-length-arrays.cpp | 2 +- test/CodeGenCXX/debug-info.cpp | 53 +- test/CodeGenCXX/debug-lambda-expressions.cpp | 30 +- test/CodeGenCXX/decl-ref-init.cpp | 4 +- test/CodeGenCXX/default-arg-temps.cpp | 6 +- test/CodeGenCXX/default-arguments.cpp | 8 +- .../CodeGenCXX/default-constructor-for-members.cpp | 4 +- .../default-constructor-template-member.cpp | 3 +- test/CodeGenCXX/deferred-global-init.cpp | 4 +- test/CodeGenCXX/delayed-template-parsing.cpp | 18 + test/CodeGenCXX/delete-two-arg.cpp | 8 +- test/CodeGenCXX/delete.cpp | 18 +- test/CodeGenCXX/derived-to-base-conv.cpp | 6 +- .../derived-to-virtual-base-class-calls-final.cpp | 2 +- test/CodeGenCXX/destructor-exception-spec.cpp | 2 + test/CodeGenCXX/destructors.cpp | 114 +- .../devirtualize-virtual-function-calls-final.cpp | 20 +- .../devirtualize-virtual-function-calls.cpp | 2 +- test/CodeGenCXX/dynamic_cast-no-rtti.cpp | 26 + test/CodeGenCXX/eh.cpp | 30 +- test/CodeGenCXX/empty-classes.cpp | 2 +- test/CodeGenCXX/empty-nontrivially-copyable.cpp | 25 + test/CodeGenCXX/exceptions.cpp | 12 +- test/CodeGenCXX/explicit-instantiation.cpp | 8 +- test/CodeGenCXX/fastcall.cpp | 4 +- test/CodeGenCXX/for-range.cpp | 8 +- test/CodeGenCXX/forward-enum.cpp | 2 +- test/CodeGenCXX/fp16-mangle.cpp | 4 +- .../function-template-explicit-specialization.cpp | 4 +- test/CodeGenCXX/global-array-destruction.cpp | 2 +- test/CodeGenCXX/global-block-literal-helpers.cpp | 16 +- test/CodeGenCXX/global-dtor-no-atexit.cpp | 2 +- test/CodeGenCXX/global-init.cpp | 4 +- test/CodeGenCXX/goto.cpp | 2 +- test/CodeGenCXX/implicit-copy-assign-operator.cpp | 2 +- test/CodeGenCXX/implicit-copy-constructor.cpp | 2 +- test/CodeGenCXX/implicit-instantiation-1.cpp | 2 +- test/CodeGenCXX/inheriting-constructor.cpp | 14 +- test/CodeGenCXX/init-invariant.cpp | 4 +- test/CodeGenCXX/inline-functions.cpp | 10 +- test/CodeGenCXX/instantiate-temporaries.cpp | 4 +- test/CodeGenCXX/invalid.cpp | 11 + .../lambda-expressions-inside-auto-functions.cpp | 77 + .../lambda-expressions-nested-linkage.cpp | 50 + test/CodeGenCXX/lambda-expressions.cpp | 28 +- test/CodeGenCXX/linetable-cleanup.cpp | 36 +- test/CodeGenCXX/linkage.cpp | 222 + test/CodeGenCXX/lpad-linetable.cpp | 69 + test/CodeGenCXX/lvalue-bitcasts.cpp | 6 +- test/CodeGenCXX/mangle-98.cpp | 6 +- test/CodeGenCXX/mangle-address-space.cpp | 6 +- test/CodeGenCXX/mangle-alias-template.cpp | 2 +- test/CodeGenCXX/mangle-exprs.cpp | 22 +- test/CodeGenCXX/mangle-extreme.cpp | 2 +- test/CodeGenCXX/mangle-lambdas.cpp | 83 +- test/CodeGenCXX/mangle-local-class-names.cpp | 30 + test/CodeGenCXX/mangle-ms-arg-qualifiers.cpp | 117 + .../mangle-ms-back-references-pr13207.cpp | 30 +- test/CodeGenCXX/mangle-ms-back-references.cpp | 5 + test/CodeGenCXX/mangle-ms-templates.cpp | 155 +- test/CodeGenCXX/mangle-ms.cpp | 273 +- test/CodeGenCXX/mangle-neon-vectors.cpp | 17 +- test/CodeGenCXX/mangle-nullptr-arg.cpp | 6 +- test/CodeGenCXX/mangle-ref-qualifiers.cpp | 10 +- test/CodeGenCXX/mangle-subst-std.cpp | 12 +- test/CodeGenCXX/mangle-subst.cpp | 12 +- test/CodeGenCXX/mangle-system-header.cpp | 4 +- test/CodeGenCXX/mangle-template.cpp | 12 +- test/CodeGenCXX/mangle-unnamed.cpp | 4 +- test/CodeGenCXX/mangle-valist.cpp | 10 +- test/CodeGenCXX/mangle-variadic-templates.cpp | 30 +- test/CodeGenCXX/mangle-windows.cpp | 42 + test/CodeGenCXX/mangle.cpp | 252 +- test/CodeGenCXX/member-expressions.cpp | 2 +- test/CodeGenCXX/member-function-pointer-calls.cpp | 4 +- test/CodeGenCXX/member-function-pointers.cpp | 5 +- test/CodeGenCXX/member-functions.cpp | 14 +- test/CodeGenCXX/member-init-anon-union.cpp | 2 +- test/CodeGenCXX/member-initializers.cpp | 2 +- test/CodeGenCXX/member-templates.cpp | 4 +- test/CodeGenCXX/microsoft-abi-alignment-fail.cpp | 10 + .../microsoft-abi-constexpr-vs-inheritance.cpp | 23 + test/CodeGenCXX/microsoft-abi-default-cc.cpp | 12 +- test/CodeGenCXX/microsoft-abi-exceptions.cpp | 157 + test/CodeGenCXX/microsoft-abi-member-pointers.cpp | 210 +- ...crosoft-abi-multiple-nonvirtual-inheritance.cpp | 201 + test/CodeGenCXX/microsoft-abi-sret-and-byval.cpp | 90 +- .../microsoft-abi-static-initializers.cpp | 124 +- test/CodeGenCXX/microsoft-abi-structors-alias.cpp | 9 + test/CodeGenCXX/microsoft-abi-structors.cpp | 168 +- test/CodeGenCXX/microsoft-abi-thunks.cpp | 154 + test/CodeGenCXX/microsoft-abi-vbtables.cpp | 479 + ...microsoft-abi-virtual-inheritance-vtordisps.cpp | 83 + .../microsoft-abi-virtual-inheritance.cpp | 314 + .../microsoft-abi-virtual-member-pointers.cpp | 108 + ...abi-vtables-multiple-nonvirtual-inheritance.cpp | 579 + .../microsoft-abi-vtables-single-inheritance.cpp | 191 +- ...t-abi-vtables-virtual-inheritance-vtordisps.cpp | 324 + .../microsoft-abi-vtables-virtual-inheritance.cpp | 575 + test/CodeGenCXX/microsoft-interface.cpp | 16 +- test/CodeGenCXX/microsoft-new.cpp | 39 + .../microsoft-uuidof-unsupported-target.cpp | 13 - test/CodeGenCXX/microsoft-uuidof.cpp | 94 +- test/CodeGenCXX/move-assignment.cpp | 26 + test/CodeGenCXX/ms-integer-static-data-members.cpp | 35 + test/CodeGenCXX/new-alias.cpp | 13 + test/CodeGenCXX/new-array-init-exceptions.cpp | 4 +- test/CodeGenCXX/new-array-init.cpp | 8 +- test/CodeGenCXX/new.cpp | 106 +- test/CodeGenCXX/no-opt-volatile-memcpy.cpp | 8 +- test/CodeGenCXX/noexcept.cpp | 49 + test/CodeGenCXX/nrvo.cpp | 18 +- test/CodeGenCXX/override-layout.cpp | 6 +- test/CodeGenCXX/partial-destruction.cpp | 6 +- test/CodeGenCXX/pod-member-memcpys.cpp | 152 +- test/CodeGenCXX/pointers-to-data-members.cpp | 6 +- test/CodeGenCXX/pr11676.cpp | 17 - test/CodeGenCXX/pr11797.cpp | 2 +- test/CodeGenCXX/pr12251.cpp | 78 +- test/CodeGenCXX/pr13396.cpp | 12 +- test/CodeGenCXX/pr9130.cpp | 2 +- test/CodeGenCXX/pr9965.cpp | 2 +- test/CodeGenCXX/pragma-visibility.cpp | 14 +- test/CodeGenCXX/pragma-weak.cpp | 10 +- test/CodeGenCXX/predefined-expr.cpp | 22 + test/CodeGenCXX/ptr-to-member-function.cpp | 4 +- test/CodeGenCXX/reference-cast.cpp | 20 +- test/CodeGenCXX/references.cpp | 18 +- test/CodeGenCXX/return.cpp | 2 +- test/CodeGenCXX/rtti-layout.cpp | 2 +- test/CodeGenCXX/runtimecc.cpp | 6 +- test/CodeGenCXX/rvalue-references.cpp | 14 +- test/CodeGenCXX/scoped-enums.cpp | 9 +- .../skip-vtable-pointer-initialization.cpp | 16 +- test/CodeGenCXX/static-data-member.cpp | 6 +- test/CodeGenCXX/static-init-1.cpp | 8 +- test/CodeGenCXX/static-init-4.cpp | 7 + test/CodeGenCXX/static-init-pnacl.cpp | 14 + test/CodeGenCXX/static-init.cpp | 16 +- ...tic-member-variable-explicit-specialization.cpp | 89 +- test/CodeGenCXX/stmtexpr.cpp | 7 + test/CodeGenCXX/template-anonymous-types.cpp | 12 +- .../template-dependent-bind-temporary.cpp | 2 +- .../template-inner-struct-visibility-hidden.cpp | 4 +- test/CodeGenCXX/template-instantiation.cpp | 20 +- test/CodeGenCXX/template-linkage.cpp | 12 +- test/CodeGenCXX/temporaries.cpp | 243 +- test/CodeGenCXX/thiscall-struct-return.cpp | 4 +- test/CodeGenCXX/threadsafe-statics-exceptions.cpp | 2 +- test/CodeGenCXX/throw-expression-cleanup.cpp | 2 +- test/CodeGenCXX/throw-expressions.cpp | 26 +- test/CodeGenCXX/thunks-available-externally.cpp | 11 +- test/CodeGenCXX/thunks.cpp | 44 +- test/CodeGenCXX/type_visibility.cpp | 36 +- test/CodeGenCXX/typeid.cpp | 5 +- test/CodeGenCXX/unknown-anytype.cpp | 62 +- test/CodeGenCXX/value-init.cpp | 20 +- test/CodeGenCXX/vararg-conversion-ctor.cpp | 2 +- test/CodeGenCXX/vararg-non-pod.cpp | 2 +- test/CodeGenCXX/varargs.cpp | 4 +- test/CodeGenCXX/variadic-templates.cpp | 4 +- test/CodeGenCXX/virt-dtor-gen.cpp | 2 +- test/CodeGenCXX/virtual-base-cast.cpp | 54 + test/CodeGenCXX/virtual-base-destructor-call.cpp | 22 +- test/CodeGenCXX/virtual-bases.cpp | 12 +- test/CodeGenCXX/virtual-destructor-calls.cpp | 8 +- .../virtual-functions-incomplete-types.cpp | 2 +- .../visibility-hidden-extern-templates.cpp | 6 +- test/CodeGenCXX/visibility-inlines-hidden.cpp | 38 +- test/CodeGenCXX/visibility-ms-compat.cpp | 12 +- test/CodeGenCXX/visibility.cpp | 258 +- test/CodeGenCXX/vla.cpp | 2 +- test/CodeGenCXX/volatile.cpp | 4 +- test/CodeGenCXX/vtable-available-externally.cpp | 26 +- test/CodeGenCXX/vtable-layout.cpp | 188 +- test/CodeGenCXX/vtable-linkage.cpp | 139 +- test/CodeGenCXX/vtable-pointer-initialization.cpp | 10 +- test/CodeGenCXX/x86_32-arguments.cpp | 30 +- test/CodeGenCXX/x86_64-arguments.cpp | 18 +- test/CodeGenObjC/2010-02-09-DbgSelf.m | 4 +- test/CodeGenObjC/arc-block-copy-escape.m | 4 +- test/CodeGenObjC/arc-blocks.m | 72 +- test/CodeGenObjC/arc-bridged-cast.m | 8 +- .../arc-captured-32bit-block-var-layout-2.m | 2 +- .../arc-captured-32bit-block-var-layout.m | 2 +- .../arc-captured-block-var-inlined-layout.m | 4 +- test/CodeGenObjC/arc-captured-block-var-layout.m | 4 +- test/CodeGenObjC/arc-exceptions.m | 4 +- test/CodeGenObjC/arc-foreach.m | 14 +- test/CodeGenObjC/arc-ivar-layout.m | 4 +- test/CodeGenObjC/arc-linetable-autorelease.m | 40 + test/CodeGenObjC/arc-literals.m | 8 +- test/CodeGenObjC/arc-loadweakretained-release.m | 2 +- test/CodeGenObjC/arc-no-arc-exceptions.m | 22 +- test/CodeGenObjC/arc-precise-lifetime.m | 55 +- test/CodeGenObjC/arc-property.m | 2 +- test/CodeGenObjC/arc-related-result-type.m | 2 +- test/CodeGenObjC/arc-ternary-op.m | 6 +- test/CodeGenObjC/arc-unopt.m | 2 +- test/CodeGenObjC/arc-unoptimized-byref-var.m | 2 +- test/CodeGenObjC/arc-with-atthrow.m | 2 +- test/CodeGenObjC/arc.m | 76 +- test/CodeGenObjC/assign.m | 2 +- test/CodeGenObjC/atomic-aggregate-property.m | 4 +- .../auto-property-synthesize-protocol.m | 2 +- test/CodeGenObjC/autorelease.m | 2 +- test/CodeGenObjC/bitfield-access.m | 4 +- test/CodeGenObjC/bitfield-ivar-offsets.m | 2 +- test/CodeGenObjC/block-6.m | 2 +- test/CodeGenObjC/block-byref-debuginfo.m | 14 + test/CodeGenObjC/block-byref-variable-layout.m | 2 +- test/CodeGenObjC/block-var-layout.m | 4 +- test/CodeGenObjC/blocks-1.m | 4 +- test/CodeGenObjC/blocks.m | 10 +- test/CodeGenObjC/builtins.m | 2 +- test/CodeGenObjC/complex-property.m | 2 +- test/CodeGenObjC/debug-info-block-line.m | 2 +- test/CodeGenObjC/debug-info-blocks.m | 23 +- test/CodeGenObjC/debug-info-default-synth-ivar.m | 2 +- test/CodeGenObjC/debug-info-fwddecl.m | 2 +- test/CodeGenObjC/debug-info-id-with-protocol.m | 6 +- test/CodeGenObjC/debug-info-instancetype.m | 28 + test/CodeGenObjC/debug-info-lifetime-crash.m | 23 + test/CodeGenObjC/debug-info-property-accessors.m | 56 + test/CodeGenObjC/debug-info-property4.m | 2 +- test/CodeGenObjC/debug-info-property5.m | 2 +- test/CodeGenObjC/debug-info-self.m | 8 +- test/CodeGenObjC/debuginfo-properties.m | 35 + test/CodeGenObjC/designated-initializers.m | 8 + test/CodeGenObjC/encode-cstyle-method.m | 2 +- test/CodeGenObjC/encode-test-6.m | 18 + test/CodeGenObjC/encode-test.m | 2 +- test/CodeGenObjC/exceptions-nonfragile.m | 2 +- test/CodeGenObjC/exceptions.m | 8 +- test/CodeGenObjC/extended-block-signature-encode.m | 2 +- test/CodeGenObjC/fp2ret.m | 6 +- test/CodeGenObjC/fpret.m | 6 +- test/CodeGenObjC/gc.m | 2 +- test/CodeGenObjC/id-isa-codegen.m | 4 +- test/CodeGenObjC/ivar-base-as-invariant-load.m | 6 +- test/CodeGenObjC/ivar-invariant.m | 4 +- test/CodeGenObjC/ivar-layout-array0-struct.m | 4 +- test/CodeGenObjC/ivar-layout-no-optimize.m | 8 +- test/CodeGenObjC/local-static-block.m | 2 +- .../mrr-captured-block-var-inlined-layout.m | 4 +- test/CodeGenObjC/ns_consume_null_check.m | 4 +- test/CodeGenObjC/null-objc-empty-vtable.m | 10 + test/CodeGenObjC/objc-gc-aggr-assign.m | 4 +- test/CodeGenObjC/objc-read-weak-byref.m | 4 +- test/CodeGenObjC/objc2-legacy-dispatch.m | 8 +- test/CodeGenObjC/objc2-no-write-barrier.m | 4 +- test/CodeGenObjC/objc2-weak-block-call.m | 4 +- test/CodeGenObjC/objc2-write-barrier-5.m | 4 +- test/CodeGenObjC/objfw.m | 2 +- test/CodeGenObjC/property.m | 4 +- test/CodeGenObjC/protocol-in-extended-class.m | 4 +- test/CodeGenObjC/protocols-lazy.m | 6 +- test/CodeGenObjC/related-result-type.m | 4 +- test/CodeGenObjC/reorder-synthesized-ivars.m | 2 +- test/CodeGenObjC/stret_lookup.m | 29 + test/CodeGenObjC/synchronized.m | 6 +- test/CodeGenObjC/tentative-cfconstantstring.m | 2 +- test/CodeGenObjC/terminate.m | 4 +- test/CodeGenObjC/x86_64-struct-return-gc.m | 4 +- test/CodeGenObjCXX/arc-attrs.mm | 6 +- test/CodeGenObjCXX/arc-blocks.mm | 2 +- test/CodeGenObjCXX/arc-exceptions.mm | 10 +- test/CodeGenObjCXX/arc-globals.mm | 6 +- test/CodeGenObjCXX/arc-mangle.mm | 18 +- test/CodeGenObjCXX/arc-move.mm | 6 +- test/CodeGenObjCXX/arc-new-delete.mm | 8 +- test/CodeGenObjCXX/arc-pseudo-destructors.mm | 2 +- test/CodeGenObjCXX/arc-references.mm | 10 +- test/CodeGenObjCXX/arc-special-member-functions.mm | 34 +- test/CodeGenObjCXX/arc.mm | 20 +- test/CodeGenObjCXX/block-var-layout.mm | 2 +- test/CodeGenObjCXX/catch-id-type.mm | 2 +- test/CodeGenObjCXX/encode.mm | 23 + test/CodeGenObjCXX/exceptions-legacy.mm | 4 +- test/CodeGenObjCXX/exceptions.mm | 2 +- test/CodeGenObjCXX/gc.mm | 2 +- .../CodeGenObjCXX/implicit-copy-assign-operator.mm | 2 +- test/CodeGenObjCXX/implicit-copy-constructor.mm | 2 +- test/CodeGenObjCXX/lambda-expressions.mm | 39 +- test/CodeGenObjCXX/literals.mm | 4 +- test/CodeGenObjCXX/mangle-blocks.mm | 49 +- test/CodeGenObjCXX/mangle.mm | 20 + test/CodeGenObjCXX/message.mm | 2 +- test/CodeGenObjCXX/nrvo.mm | 2 +- .../CodeGenObjCXX/objc-container-subscripting-1.mm | 4 +- test/CodeGenObjCXX/objc-container-subscripting.mm | 6 +- test/CodeGenObjCXX/property-dot-reference.mm | 2 +- test/CodeGenObjCXX/property-object-reference-2.mm | 4 +- test/CodeGenObjCXX/property-objects.mm | 4 +- test/CodeGenObjCXX/property-reference.mm | 4 +- test/CodeGenObjCXX/references.mm | 2 +- test/CodeGenObjCXX/rtti.mm | 8 +- test/CodeGenObjCXX/unknown-anytype.mm | 4 +- test/CodeGenOpenCL/address-spaces-mangling.cl | 30 + test/CodeGenOpenCL/kernel-attributes.cl | 2 +- test/CodeGenOpenCL/local.cl | 4 +- test/CodeGenOpenCL/opencl_types.cl | 2 +- test/CodeGenOpenCL/ptx-calls.cl | 4 +- test/CodeGenOpenCL/ptx-kernels.cl | 4 +- test/CodeGenOpenCL/str_literals.cl | 9 + test/CodeGenOpenCL/vector_odd.cl | 17 + test/Coverage/codegen-next.m | 12 +- test/Coverage/html-diagnostics.c | 3 + test/Driver/B-opt.c | 8 +- .../usr/bin/i386-unknown-linux-gnu-as | 1 + .../usr/bin/i386-unknown-linux-gnu-ld | 1 + .../usr/bin/i386-unknown-linux-gnu-ld.bfd | 1 + .../usr/bin/i386-unknown-linux-gnu-ld.gold | 1 + .../usr/bin/x86_64-unknown-linux-gnu-as | 1 + .../usr/bin/x86_64-unknown-linux-gnu-ld | 1 + .../usr/bin/x86_64-unknown-linux-gnu-ld.bfd | 1 + .../usr/bin/x86_64-unknown-linux-gnu-ld.gold | 1 + .../usr/i386-unknown-linux-gnu/bin/as | 1 + .../usr/i386-unknown-linux-gnu/bin/ld | 1 + .../usr/i386-unknown-linux-gnu/bin/ld.bfd | 1 + .../usr/i386-unknown-linux-gnu/bin/ld.gold | 1 + .../usr/i386-unknown-linux-gnu/lib/.keep | 0 .../gcc/i386-unknown-linux-gnu/4.6.0/crtbegin.o | 0 .../gcc/x86_64-unknown-linux-gnu/4.6.0/crtbegin.o | 0 .../gcc/x86_64-unknown-linux-gnu/4.6.0/crtbeginT.o | 0 .../x86_64-unknown-linux-gnu/4.6.0/crtfastmath.o | 0 .../usr/x86_64-unknown-linux-gnu/bin/as | 1 + .../usr/x86_64-unknown-linux-gnu/bin/ld | 1 + .../usr/x86_64-unknown-linux-gnu/bin/ld.bfd | 1 + .../usr/x86_64-unknown-linux-gnu/bin/ld.gold | 1 + .../usr/x86_64-unknown-linux-gnu/lib/.keep | 0 .../Driver/Inputs/basic_netbsd_tree/usr/lib/crt0.o | 0 .../Inputs/basic_netbsd_tree/usr/lib/crtbegin.o | 0 .../Inputs/basic_netbsd_tree/usr/lib/crtbeginS.o | 0 .../Inputs/basic_netbsd_tree/usr/lib/crtend.o | 0 .../Inputs/basic_netbsd_tree/usr/lib/crtendS.o | 0 .../Driver/Inputs/basic_netbsd_tree/usr/lib/crti.o | 0 .../Driver/Inputs/basic_netbsd_tree/usr/lib/crtn.o | 0 .../lib/i386-linux-gnu/libtest.so | 0 test/Driver/Inputs/file.prof | 0 .../lib/gcc/x86_64-pc-linux-gnu/4.6.2/crtbegin.o | 0 .../x86_64-pc-linux-gnu/4.6.2/include/g++-v4/.keep | 0 .../usr/x86_64-pc-linux-gnu/lib/.keep | 0 .../lib/gcc/x86_64-pc-linux-gnu/4.6.4/crtbegin.o | 0 .../4.6.4/include/g++-v4.6/.keep | 0 .../usr/x86_64-pc-linux-gnu/lib/.keep | 0 test/Driver/Inputs/lit.local.cfg | 1 - test/Driver/Inputs/mips_fsf_tree/bin/.keep | 0 .../lib/gcc/mips-mti-linux-gnu/4.9.0/crtbegin.o | 0 .../lib/gcc/mips-mti-linux-gnu/4.9.0/crtend.o | 0 .../lib/gcc/mips-mti-linux-gnu/4.9.0/el/crtbegin.o | 0 .../lib/gcc/mips-mti-linux-gnu/4.9.0/el/crtend.o | 0 .../mips-mti-linux-gnu/4.9.0/el/fp64/crtbegin.o | 0 .../gcc/mips-mti-linux-gnu/4.9.0/el/fp64/crtend.o | 0 .../4.9.0/el/fp64/nan2008/crtbegin.o | 0 .../4.9.0/el/fp64/nan2008/crtend.o | 0 .../mips-mti-linux-gnu/4.9.0/el/nan2008/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/el/nan2008/crtend.o | 0 .../gcc/mips-mti-linux-gnu/4.9.0/el/sof/crtbegin.o | 0 .../gcc/mips-mti-linux-gnu/4.9.0/el/sof/crtend.o | 0 .../gcc/mips-mti-linux-gnu/4.9.0/fp64/crtbegin.o | 0 .../lib/gcc/mips-mti-linux-gnu/4.9.0/fp64/crtend.o | 0 .../4.9.0/fp64/nan2008/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/fp64/nan2008/crtend.o | 0 .../mips-mti-linux-gnu/4.9.0/include-fixed/.keep | 0 .../lib/gcc/mips-mti-linux-gnu/4.9.0/include/.keep | 0 .../mips-mti-linux-gnu/4.9.0/micromips/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/micromips/crtend.o | 0 .../4.9.0/micromips/el/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/micromips/el/crtend.o | 0 .../4.9.0/micromips/el/fp64/crtbegin.o | 0 .../4.9.0/micromips/el/fp64/crtend.o | 0 .../4.9.0/micromips/el/fp64/nan2008/crtbegin.o | 0 .../4.9.0/micromips/el/fp64/nan2008/crtend.o | 0 .../4.9.0/micromips/el/nan2008/crtbegin.o | 0 .../4.9.0/micromips/el/nan2008/crtend.o | 0 .../4.9.0/micromips/el/sof/crtbegin.o | 0 .../4.9.0/micromips/el/sof/crtend.o | 0 .../4.9.0/micromips/fp64/crtbegin.o | 0 .../4.9.0/micromips/fp64/crtend.o | 0 .../4.9.0/micromips/fp64/nan2008/crtbegin.o | 0 .../4.9.0/micromips/fp64/nan2008/crtend.o | 0 .../4.9.0/micromips/nan2008/crtbegin.o | 0 .../4.9.0/micromips/nan2008/crtend.o | 0 .../4.9.0/micromips/sof/crtbegin.o | 0 .../4.9.0/micromips/sof/crtend.o | 0 .../gcc/mips-mti-linux-gnu/4.9.0/mips16/crtbegin.o | 0 .../gcc/mips-mti-linux-gnu/4.9.0/mips16/crtend.o | 0 .../mips-mti-linux-gnu/4.9.0/mips16/el/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/mips16/el/crtend.o | 0 .../4.9.0/mips16/el/fp64/crtbegin.o | 0 .../4.9.0/mips16/el/fp64/crtend.o | 0 .../4.9.0/mips16/el/fp64/nan2008/crtbegin.o | 0 .../4.9.0/mips16/el/fp64/nan2008/crtend.o | 0 .../4.9.0/mips16/el/nan2008/crtbegin.o | 0 .../4.9.0/mips16/el/nan2008/crtend.o | 0 .../4.9.0/mips16/el/sof/crtbegin.o | 0 .../4.9.0/mips16/el/sof/crtend.o | 0 .../4.9.0/mips16/fp64/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/mips16/fp64/crtend.o | 0 .../4.9.0/mips16/fp64/nan2008/crtbegin.o | 0 .../4.9.0/mips16/fp64/nan2008/crtend.o | 0 .../4.9.0/mips16/nan2008/crtbegin.o | 0 .../4.9.0/mips16/nan2008/crtend.o | 0 .../mips-mti-linux-gnu/4.9.0/mips16/sof/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/mips16/sof/crtend.o | 0 .../gcc/mips-mti-linux-gnu/4.9.0/mips32/crtbegin.o | 0 .../gcc/mips-mti-linux-gnu/4.9.0/mips32/crtend.o | 0 .../mips-mti-linux-gnu/4.9.0/mips32/el/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/mips32/el/crtend.o | 0 .../4.9.0/mips32/el/fp64/crtbegin.o | 0 .../4.9.0/mips32/el/fp64/crtend.o | 0 .../4.9.0/mips32/el/fp64/nan2008/crtbegin.o | 0 .../4.9.0/mips32/el/fp64/nan2008/crtend.o | 0 .../4.9.0/mips32/el/nan2008/crtbegin.o | 0 .../4.9.0/mips32/el/nan2008/crtend.o | 0 .../4.9.0/mips32/el/sof/crtbegin.o | 0 .../4.9.0/mips32/el/sof/crtend.o | 0 .../4.9.0/mips32/fp64/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/mips32/fp64/crtend.o | 0 .../4.9.0/mips32/fp64/nan2008/crtbegin.o | 0 .../4.9.0/mips32/fp64/nan2008/crtend.o | 0 .../4.9.0/mips32/mips16/crtbegin.o | 0 .../4.9.0/mips32/mips16/crtend.o | 0 .../4.9.0/mips32/mips16/el/crtbegin.o | 0 .../4.9.0/mips32/mips16/el/crtend.o | 0 .../4.9.0/mips32/mips16/el/fp64/crtbegin.o | 0 .../4.9.0/mips32/mips16/el/fp64/crtend.o | 0 .../4.9.0/mips32/mips16/el/fp64/nan2008/crtbegin.o | 0 .../4.9.0/mips32/mips16/el/fp64/nan2008/crtend.o | 0 .../4.9.0/mips32/mips16/el/nan2008/crtbegin.o | 0 .../4.9.0/mips32/mips16/el/nan2008/crtend.o | 0 .../4.9.0/mips32/mips16/el/sof/crtbegin.o | 0 .../4.9.0/mips32/mips16/el/sof/crtend.o | 0 .../4.9.0/mips32/mips16/fp64/crtbegin.o | 0 .../4.9.0/mips32/mips16/fp64/crtend.o | 0 .../4.9.0/mips32/mips16/fp64/nan2008/crtbegin.o | 0 .../4.9.0/mips32/mips16/fp64/nan2008/crtend.o | 0 .../4.9.0/mips32/mips16/nan2008/crtbegin.o | 0 .../4.9.0/mips32/mips16/nan2008/crtend.o | 0 .../4.9.0/mips32/mips16/sof/crtbegin.o | 0 .../4.9.0/mips32/mips16/sof/crtend.o | 0 .../4.9.0/mips32/nan2008/crtbegin.o | 0 .../4.9.0/mips32/nan2008/crtend.o | 0 .../mips-mti-linux-gnu/4.9.0/mips32/sof/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/mips32/sof/crtend.o | 0 .../mips-mti-linux-gnu/4.9.0/mips64/64/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/mips64/64/crtend.o | 0 .../4.9.0/mips64/64/el/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/mips64/64/el/crtend.o | 0 .../4.9.0/mips64/64/el/fp64/crtbegin.o | 0 .../4.9.0/mips64/64/el/fp64/crtend.o | 0 .../4.9.0/mips64/64/el/fp64/nan2008/crtbegin.o | 0 .../4.9.0/mips64/64/el/fp64/nan2008/crtend.o | 0 .../4.9.0/mips64/64/el/nan2008/crtbegin.o | 0 .../4.9.0/mips64/64/el/nan2008/crtend.o | 0 .../4.9.0/mips64/64/el/sof/crtbegin.o | 0 .../4.9.0/mips64/64/el/sof/crtend.o | 0 .../4.9.0/mips64/64/fp64/crtbegin.o | 0 .../4.9.0/mips64/64/fp64/crtend.o | 0 .../4.9.0/mips64/64/fp64/nan2008/crtbegin.o | 0 .../4.9.0/mips64/64/fp64/nan2008/crtend.o | 0 .../4.9.0/mips64/64/nan2008/crtbegin.o | 0 .../4.9.0/mips64/64/nan2008/crtend.o | 0 .../4.9.0/mips64/64/sof/crtbegin.o | 0 .../4.9.0/mips64/64/sof/crtend.o | 0 .../gcc/mips-mti-linux-gnu/4.9.0/mips64/crtbegin.o | 0 .../gcc/mips-mti-linux-gnu/4.9.0/mips64/crtend.o | 0 .../mips-mti-linux-gnu/4.9.0/mips64/el/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/mips64/el/crtend.o | 0 .../4.9.0/mips64/el/fp64/crtbegin.o | 0 .../4.9.0/mips64/el/fp64/crtend.o | 0 .../4.9.0/mips64/el/fp64/nan2008/crtbegin.o | 0 .../4.9.0/mips64/el/fp64/nan2008/crtend.o | 0 .../4.9.0/mips64/el/nan2008/crtbegin.o | 0 .../4.9.0/mips64/el/nan2008/crtend.o | 0 .../4.9.0/mips64/el/sof/crtbegin.o | 0 .../4.9.0/mips64/el/sof/crtend.o | 0 .../4.9.0/mips64/fp64/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/mips64/fp64/crtend.o | 0 .../4.9.0/mips64/fp64/nan2008/crtbegin.o | 0 .../4.9.0/mips64/fp64/nan2008/crtend.o | 0 .../4.9.0/mips64/nan2008/crtbegin.o | 0 .../4.9.0/mips64/nan2008/crtend.o | 0 .../mips-mti-linux-gnu/4.9.0/mips64/sof/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/mips64/sof/crtend.o | 0 .../4.9.0/mips64r2/64/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/mips64r2/64/crtend.o | 0 .../4.9.0/mips64r2/64/el/crtbegin.o | 0 .../4.9.0/mips64r2/64/el/crtend.o | 0 .../4.9.0/mips64r2/64/el/fp64/crtbegin.o | 0 .../4.9.0/mips64r2/64/el/fp64/crtend.o | 0 .../4.9.0/mips64r2/64/el/fp64/nan2008/crtbegin.o | 0 .../4.9.0/mips64r2/64/el/fp64/nan2008/crtend.o | 0 .../4.9.0/mips64r2/64/el/nan2008/crtbegin.o | 0 .../4.9.0/mips64r2/64/el/nan2008/crtend.o | 0 .../4.9.0/mips64r2/64/el/sof/crtbegin.o | 0 .../4.9.0/mips64r2/64/el/sof/crtend.o | 0 .../4.9.0/mips64r2/64/fp64/crtbegin.o | 0 .../4.9.0/mips64r2/64/fp64/crtend.o | 0 .../4.9.0/mips64r2/64/fp64/nan2008/crtbegin.o | 0 .../4.9.0/mips64r2/64/fp64/nan2008/crtend.o | 0 .../4.9.0/mips64r2/64/nan2008/crtbegin.o | 0 .../4.9.0/mips64r2/64/nan2008/crtend.o | 0 .../4.9.0/mips64r2/64/sof/crtbegin.o | 0 .../4.9.0/mips64r2/64/sof/crtend.o | 0 .../mips-mti-linux-gnu/4.9.0/mips64r2/crtbegin.o | 0 .../gcc/mips-mti-linux-gnu/4.9.0/mips64r2/crtend.o | 0 .../4.9.0/mips64r2/el/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/mips64r2/el/crtend.o | 0 .../4.9.0/mips64r2/el/fp64/crtbegin.o | 0 .../4.9.0/mips64r2/el/fp64/crtend.o | 0 .../4.9.0/mips64r2/el/fp64/nan2008/crtbegin.o | 0 .../4.9.0/mips64r2/el/fp64/nan2008/crtend.o | 0 .../4.9.0/mips64r2/el/nan2008/crtbegin.o | 0 .../4.9.0/mips64r2/el/nan2008/crtend.o | 0 .../4.9.0/mips64r2/el/sof/crtbegin.o | 0 .../4.9.0/mips64r2/el/sof/crtend.o | 0 .../4.9.0/mips64r2/fp64/crtbegin.o | 0 .../4.9.0/mips64r2/fp64/crtend.o | 0 .../4.9.0/mips64r2/fp64/nan2008/crtbegin.o | 0 .../4.9.0/mips64r2/fp64/nan2008/crtend.o | 0 .../4.9.0/mips64r2/nan2008/crtbegin.o | 0 .../4.9.0/mips64r2/nan2008/crtend.o | 0 .../4.9.0/mips64r2/sof/crtbegin.o | 0 .../mips-mti-linux-gnu/4.9.0/mips64r2/sof/crtend.o | 0 .../mips-mti-linux-gnu/4.9.0/nan2008/crtbegin.o | 0 .../gcc/mips-mti-linux-gnu/4.9.0/nan2008/crtend.o | 0 .../gcc/mips-mti-linux-gnu/4.9.0/sof/crtbegin.o | 0 .../lib/gcc/mips-mti-linux-gnu/4.9.0/sof/crtend.o | 0 .../include/c++/4.9.0/backward/.keep | 0 .../include/c++/4.9.0/bits/.keep | 0 .../c++/4.9.0/mips-mti-linux-gnu/bits/.keep | 0 .../c++/4.9.0/mips-mti-linux-gnu/el/bits/.keep | 0 .../4.9.0/mips-mti-linux-gnu/el/fp64/bits/.keep | 0 .../4.9.0/mips-mti-linux-gnu/el/nan2008/bits/.keep | 0 .../c++/4.9.0/mips-mti-linux-gnu/el/sof/bits/.keep | 0 .../c++/4.9.0/mips-mti-linux-gnu/fp64/bits/.keep | 0 .../4.9.0/mips-mti-linux-gnu/micromips/bits/.keep | 0 .../mips-mti-linux-gnu/micromips/el/bits/.keep | 0 .../micromips/el/fp64/bits/.keep | 0 .../micromips/el/nan2008/bits/.keep | 0 .../mips-mti-linux-gnu/micromips/el/sof/bits/.keep | 0 .../mips-mti-linux-gnu/micromips/fp64/bits/.keep | 0 .../micromips/nan2008/bits/.keep | 0 .../mips-mti-linux-gnu/micromips/sof/bits/.keep | 0 .../c++/4.9.0/mips-mti-linux-gnu/mips16/bits/.keep | 0 .../4.9.0/mips-mti-linux-gnu/mips16/el/bits/.keep | 0 .../mips-mti-linux-gnu/mips16/el/fp64/bits/.keep | 0 .../mips16/el/nan2008/bits/.keep | 0 .../mips-mti-linux-gnu/mips16/el/sof/bits/.keep | 0 .../mips-mti-linux-gnu/mips16/fp64/bits/.keep | 0 .../mips-mti-linux-gnu/mips16/nan2008/bits/.keep | 0 .../4.9.0/mips-mti-linux-gnu/mips16/sof/bits/.keep | 0 .../c++/4.9.0/mips-mti-linux-gnu/mips32/bits/.keep | 0 .../4.9.0/mips-mti-linux-gnu/mips32/el/bits/.keep | 0 .../mips-mti-linux-gnu/mips32/el/fp64/bits/.keep | 0 .../mips32/el/nan2008/bits/.keep | 0 .../mips-mti-linux-gnu/mips32/el/sof/bits/.keep | 0 .../mips-mti-linux-gnu/mips32/fp64/bits/.keep | 0 .../mips-mti-linux-gnu/mips32/mips16/bits/.keep | 0 .../mips-mti-linux-gnu/mips32/mips16/el/bits/.keep | 0 .../mips32/mips16/el/nan2008/bits/.keep | 0 .../mips32/mips16/el/sof/bits/.keep | 0 .../mips32/mips16/nan2008/bits/.keep | 0 .../mips32/mips16/sof/bits/.keep | 0 .../mips-mti-linux-gnu/mips32/nan2008/bits/.keep | 0 .../4.9.0/mips-mti-linux-gnu/mips32/sof/bits/.keep | 0 .../4.9.0/mips-mti-linux-gnu/mips64/64/bits/.keep | 0 .../mips-mti-linux-gnu/mips64/64/el/bits/.keep | 0 .../mips64/64/el/fp64/bits/.keep | 0 .../mips64/64/el/nan2008/bits/.keep | 0 .../mips-mti-linux-gnu/mips64/64/el/sof/bits/.keep | 0 .../mips-mti-linux-gnu/mips64/64/fp64/bits/.keep | 0 .../mips64/64/nan2008/bits/.keep | 0 .../mips-mti-linux-gnu/mips64/64/sof/bits/.keep | 0 .../c++/4.9.0/mips-mti-linux-gnu/mips64/bits/.keep | 0 .../4.9.0/mips-mti-linux-gnu/mips64/el/bits/.keep | 0 .../mips-mti-linux-gnu/mips64/el/fp64/bits/.keep | 0 .../mips64/el/nan2008/bits/.keep | 0 .../mips-mti-linux-gnu/mips64/el/sof/bits/.keep | 0 .../mips-mti-linux-gnu/mips64/fp64/bits/.keep | 0 .../mips-mti-linux-gnu/mips64/nan2008/bits/.keep | 0 .../4.9.0/mips-mti-linux-gnu/mips64/sof/bits/.keep | 0 .../mips-mti-linux-gnu/mips64r2/64/bits/.keep | 0 .../mips-mti-linux-gnu/mips64r2/64/el/bits/.keep | 0 .../mips64r2/64/el/fp64/bits/.keep | 0 .../mips64r2/64/el/nan2008/bits/.keep | 0 .../mips64r2/64/el/sof/bits/.keep | 0 .../mips-mti-linux-gnu/mips64r2/64/fp64/bits/.keep | 0 .../mips64r2/64/nan2008/bits/.keep | 0 .../mips-mti-linux-gnu/mips64r2/64/sof/bits/.keep | 0 .../4.9.0/mips-mti-linux-gnu/mips64r2/bits/.keep | 0 .../mips-mti-linux-gnu/mips64r2/el/bits/.keep | 0 .../mips-mti-linux-gnu/mips64r2/el/fp64/bits/.keep | 0 .../mips64r2/el/nan2008/bits/.keep | 0 .../mips-mti-linux-gnu/mips64r2/el/sof/bits/.keep | 0 .../mips-mti-linux-gnu/mips64r2/fp64/bits/.keep | 0 .../mips-mti-linux-gnu/mips64r2/nan2008/bits/.keep | 0 .../mips-mti-linux-gnu/mips64r2/sof/bits/.keep | 0 .../4.9.0/mips-mti-linux-gnu/nan2008/bits/.keep | 0 .../c++/4.9.0/mips-mti-linux-gnu/sof/bits/.keep | 0 .../mips-mti-linux-gnu/lib/el/fp64/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/el/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/el/sof/.keep | 0 .../mips-mti-linux-gnu/lib/fp64/nan2008/.keep | 0 .../lib/micromips/el/fp64/nan2008/.keep | 0 .../lib/micromips/el/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/micromips/el/sof/.keep | 0 .../lib/micromips/fp64/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/micromips/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/micromips/sof/.keep | 0 .../lib/mips16/el/fp64/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips16/el/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips16/el/sof/.keep | 0 .../lib/mips16/fp64/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips16/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips16/sof/.keep | 0 .../lib/mips32/el/fp64/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips32/el/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips32/el/sof/.keep | 0 .../lib/mips32/fp64/nan2008/.keep | 0 .../lib/mips32/mips16/el/fp64/nan2008/.keep | 0 .../lib/mips32/mips16/el/nan2008/.keep | 0 .../lib/mips32/mips16/el/sof/.keep | 0 .../lib/mips32/mips16/fp64/nan2008/.keep | 0 .../lib/mips32/mips16/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips32/mips16/sof/.keep | 0 .../mips-mti-linux-gnu/lib/mips32/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips32/sof/.keep | 0 .../lib/mips64/64/el/fp64/nan2008/.keep | 0 .../lib/mips64/64/el/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips64/64/el/sof/.keep | 0 .../lib/mips64/64/fp64/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips64/64/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips64/64/sof/.keep | 0 .../lib/mips64/el/fp64/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips64/el/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips64/el/sof/.keep | 0 .../lib/mips64/fp64/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips64/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips64/sof/.keep | 0 .../lib/mips64r2/64/el/fp64/nan2008/.keep | 0 .../lib/mips64r2/64/el/nan2008/.keep | 0 .../lib/mips64r2/64/el/sof/.keep | 0 .../lib/mips64r2/64/fp64/nan2008/.keep | 0 .../lib/mips64r2/64/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips64r2/64/sof/.keep | 0 .../lib/mips64r2/el/fp64/nan2008/.keep | 0 .../lib/mips64r2/el/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips64r2/el/sof/.keep | 0 .../lib/mips64r2/fp64/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips64r2/nan2008/.keep | 0 .../mips-mti-linux-gnu/lib/mips64r2/sof/.keep | 0 .../mips-mti-linux-gnu/lib/nan2008/.keep | 0 .../mips_fsf_tree/mips-mti-linux-gnu/lib/sof/.keep | 0 .../sysroot/el/fp64/nan2008/usr/lib/crt1.o | 0 .../sysroot/el/fp64/nan2008/usr/lib/crti.o | 0 .../sysroot/el/fp64/nan2008/usr/lib/crtn.o | 0 .../mips_fsf_tree/sysroot/el/fp64/usr/lib/crt1.o | 0 .../mips_fsf_tree/sysroot/el/fp64/usr/lib/crti.o | 0 .../mips_fsf_tree/sysroot/el/fp64/usr/lib/crtn.o | 0 .../sysroot/el/nan2008/usr/lib/crt1.o | 0 .../sysroot/el/nan2008/usr/lib/crti.o | 0 .../sysroot/el/nan2008/usr/lib/crtn.o | 0 .../mips_fsf_tree/sysroot/el/sof/usr/lib/crt1.o | 0 .../mips_fsf_tree/sysroot/el/sof/usr/lib/crti.o | 0 .../mips_fsf_tree/sysroot/el/sof/usr/lib/crtn.o | 0 .../Inputs/mips_fsf_tree/sysroot/el/usr/lib/crt1.o | 0 .../Inputs/mips_fsf_tree/sysroot/el/usr/lib/crti.o | 0 .../Inputs/mips_fsf_tree/sysroot/el/usr/lib/crtn.o | 0 .../sysroot/fp64/nan2008/usr/lib/crt1.o | 0 .../sysroot/fp64/nan2008/usr/lib/crti.o | 0 .../sysroot/fp64/nan2008/usr/lib/crtn.o | 0 .../mips_fsf_tree/sysroot/fp64/usr/lib/crt1.o | 0 .../mips_fsf_tree/sysroot/fp64/usr/lib/crti.o | 0 .../mips_fsf_tree/sysroot/fp64/usr/lib/crtn.o | 0 .../micromips/el/fp64/nan2008/usr/lib/crt1.o | 0 .../micromips/el/fp64/nan2008/usr/lib/crti.o | 0 .../micromips/el/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/micromips/el/fp64/usr/lib/crt1.o | 0 .../sysroot/micromips/el/fp64/usr/lib/crti.o | 0 .../sysroot/micromips/el/fp64/usr/lib/crtn.o | 0 .../sysroot/micromips/el/nan2008/usr/lib/crt1.o | 0 .../sysroot/micromips/el/nan2008/usr/lib/crti.o | 0 .../sysroot/micromips/el/nan2008/usr/lib/crtn.o | 0 .../sysroot/micromips/el/sof/usr/lib/crt1.o | 0 .../sysroot/micromips/el/sof/usr/lib/crti.o | 0 .../sysroot/micromips/el/sof/usr/lib/crtn.o | 0 .../sysroot/micromips/el/usr/lib/crt1.o | 0 .../sysroot/micromips/el/usr/lib/crti.o | 0 .../sysroot/micromips/el/usr/lib/crtn.o | 0 .../sysroot/micromips/fp64/nan2008/usr/lib/crt1.o | 0 .../sysroot/micromips/fp64/nan2008/usr/lib/crti.o | 0 .../sysroot/micromips/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/micromips/fp64/usr/lib/crt1.o | 0 .../sysroot/micromips/fp64/usr/lib/crti.o | 0 .../sysroot/micromips/fp64/usr/lib/crtn.o | 0 .../micromips/nan2008/usr/inclide/bits/.keep | 0 .../sysroot/micromips/nan2008/usr/lib/crt1.o | 0 .../sysroot/micromips/nan2008/usr/lib/crti.o | 0 .../sysroot/micromips/nan2008/usr/lib/crtn.o | 0 .../sysroot/micromips/sof/usr/inclide/bits/.keep | 0 .../sysroot/micromips/sof/usr/lib/crt1.o | 0 .../sysroot/micromips/sof/usr/lib/crti.o | 0 .../sysroot/micromips/sof/usr/lib/crtn.o | 0 .../sysroot/micromips/usr/inclide/bits/.keep | 0 .../mips_fsf_tree/sysroot/micromips/usr/lib/crt1.o | 0 .../mips_fsf_tree/sysroot/micromips/usr/lib/crti.o | 0 .../mips_fsf_tree/sysroot/micromips/usr/lib/crtn.o | 0 .../sysroot/mips16/el/fp64/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips16/el/fp64/nan2008/usr/lib/crti.o | 0 .../sysroot/mips16/el/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips16/el/fp64/usr/lib/crt1.o | 0 .../sysroot/mips16/el/fp64/usr/lib/crti.o | 0 .../sysroot/mips16/el/fp64/usr/lib/crtn.o | 0 .../sysroot/mips16/el/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips16/el/nan2008/usr/lib/crti.o | 0 .../sysroot/mips16/el/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips16/el/sof/usr/lib/crt1.o | 0 .../sysroot/mips16/el/sof/usr/lib/crti.o | 0 .../sysroot/mips16/el/sof/usr/lib/crtn.o | 0 .../mips_fsf_tree/sysroot/mips16/el/usr/lib/crt1.o | 0 .../mips_fsf_tree/sysroot/mips16/el/usr/lib/crti.o | 0 .../mips_fsf_tree/sysroot/mips16/el/usr/lib/crtn.o | 0 .../sysroot/mips16/fp64/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips16/fp64/nan2008/usr/lib/crti.o | 0 .../sysroot/mips16/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips16/fp64/usr/lib/crt1.o | 0 .../sysroot/mips16/fp64/usr/lib/crti.o | 0 .../sysroot/mips16/fp64/usr/lib/crtn.o | 0 .../sysroot/mips16/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips16/nan2008/usr/lib/crti.o | 0 .../sysroot/mips16/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips16/sof/usr/lib/crt1.o | 0 .../sysroot/mips16/sof/usr/lib/crti.o | 0 .../sysroot/mips16/sof/usr/lib/crtn.o | 0 .../mips_fsf_tree/sysroot/mips16/usr/lib/crt1.o | 0 .../mips_fsf_tree/sysroot/mips16/usr/lib/crti.o | 0 .../mips_fsf_tree/sysroot/mips16/usr/lib/crtn.o | 0 .../sysroot/mips32/el/fp64/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips32/el/fp64/nan2008/usr/lib/crti.o | 0 .../sysroot/mips32/el/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips32/el/fp64/usr/lib/crt1.o | 0 .../sysroot/mips32/el/fp64/usr/lib/crti.o | 0 .../sysroot/mips32/el/fp64/usr/lib/crtn.o | 0 .../sysroot/mips32/el/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips32/el/nan2008/usr/lib/crti.o | 0 .../sysroot/mips32/el/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips32/el/sof/usr/lib/crt1.o | 0 .../sysroot/mips32/el/sof/usr/lib/crti.o | 0 .../sysroot/mips32/el/sof/usr/lib/crtn.o | 0 .../mips_fsf_tree/sysroot/mips32/el/usr/lib/crt1.o | 0 .../mips_fsf_tree/sysroot/mips32/el/usr/lib/crti.o | 0 .../mips_fsf_tree/sysroot/mips32/el/usr/lib/crtn.o | 0 .../sysroot/mips32/fp64/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips32/fp64/nan2008/usr/lib/crti.o | 0 .../sysroot/mips32/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips32/fp64/usr/lib/crt1.o | 0 .../sysroot/mips32/fp64/usr/lib/crti.o | 0 .../sysroot/mips32/fp64/usr/lib/crtn.o | 0 .../mips32/mips16/el/fp64/nan2008/usr/lib/crt1.o | 0 .../mips32/mips16/el/fp64/nan2008/usr/lib/crti.o | 0 .../mips32/mips16/el/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips32/mips16/el/fp64/usr/lib/crt1.o | 0 .../sysroot/mips32/mips16/el/fp64/usr/lib/crti.o | 0 .../sysroot/mips32/mips16/el/fp64/usr/lib/crtn.o | 0 .../mips32/mips16/el/nan2008/usr/lib/crt1.o | 0 .../mips32/mips16/el/nan2008/usr/lib/crti.o | 0 .../mips32/mips16/el/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips32/mips16/el/sof/usr/lib/crt1.o | 0 .../sysroot/mips32/mips16/el/sof/usr/lib/crti.o | 0 .../sysroot/mips32/mips16/el/sof/usr/lib/crtn.o | 0 .../sysroot/mips32/mips16/el/usr/lib/crt1.o | 0 .../sysroot/mips32/mips16/el/usr/lib/crti.o | 0 .../sysroot/mips32/mips16/el/usr/lib/crtn.o | 0 .../mips32/mips16/fp64/nan2008/usr/lib/crt1.o | 0 .../mips32/mips16/fp64/nan2008/usr/lib/crti.o | 0 .../mips32/mips16/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips32/mips16/fp64/usr/lib/crt1.o | 0 .../sysroot/mips32/mips16/fp64/usr/lib/crti.o | 0 .../sysroot/mips32/mips16/fp64/usr/lib/crtn.o | 0 .../sysroot/mips32/mips16/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips32/mips16/nan2008/usr/lib/crti.o | 0 .../sysroot/mips32/mips16/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips32/mips16/sof/usr/lib/crt1.o | 0 .../sysroot/mips32/mips16/sof/usr/lib/crti.o | 0 .../sysroot/mips32/mips16/sof/usr/lib/crtn.o | 0 .../sysroot/mips32/mips16/usr/lib/crt1.o | 0 .../sysroot/mips32/mips16/usr/lib/crti.o | 0 .../sysroot/mips32/mips16/usr/lib/crtn.o | 0 .../sysroot/mips32/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips32/nan2008/usr/lib/crti.o | 0 .../sysroot/mips32/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips32/sof/usr/lib/crt1.o | 0 .../sysroot/mips32/sof/usr/lib/crti.o | 0 .../sysroot/mips32/sof/usr/lib/crtn.o | 0 .../mips_fsf_tree/sysroot/mips32/usr/lib/crt1.o | 0 .../mips_fsf_tree/sysroot/mips32/usr/lib/crti.o | 0 .../mips_fsf_tree/sysroot/mips32/usr/lib/crtn.o | 0 .../mips64/64/el/fp64/nan2008/usr/lib/crt1.o | 0 .../mips64/64/el/fp64/nan2008/usr/lib/crti.o | 0 .../mips64/64/el/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64/64/el/fp64/usr/lib/crt1.o | 0 .../sysroot/mips64/64/el/fp64/usr/lib/crti.o | 0 .../sysroot/mips64/64/el/fp64/usr/lib/crtn.o | 0 .../sysroot/mips64/64/el/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips64/64/el/nan2008/usr/lib/crti.o | 0 .../sysroot/mips64/64/el/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64/64/el/sof/usr/lib/crt1.o | 0 .../sysroot/mips64/64/el/sof/usr/lib/crti.o | 0 .../sysroot/mips64/64/el/sof/usr/lib/crtn.o | 0 .../sysroot/mips64/64/el/usr/lib/crt1.o | 0 .../sysroot/mips64/64/el/usr/lib/crti.o | 0 .../sysroot/mips64/64/el/usr/lib/crtn.o | 0 .../sysroot/mips64/64/fp64/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips64/64/fp64/nan2008/usr/lib/crti.o | 0 .../sysroot/mips64/64/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64/64/fp64/usr/lib/crt1.o | 0 .../sysroot/mips64/64/fp64/usr/lib/crti.o | 0 .../sysroot/mips64/64/fp64/usr/lib/crtn.o | 0 .../sysroot/mips64/64/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips64/64/nan2008/usr/lib/crti.o | 0 .../sysroot/mips64/64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64/64/sof/usr/lib/crt1.o | 0 .../sysroot/mips64/64/sof/usr/lib/crti.o | 0 .../sysroot/mips64/64/sof/usr/lib/crtn.o | 0 .../mips_fsf_tree/sysroot/mips64/64/usr/lib/crt1.o | 0 .../mips_fsf_tree/sysroot/mips64/64/usr/lib/crti.o | 0 .../mips_fsf_tree/sysroot/mips64/64/usr/lib/crtn.o | 0 .../sysroot/mips64/el/fp64/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips64/el/fp64/nan2008/usr/lib/crti.o | 0 .../sysroot/mips64/el/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64/el/fp64/usr/lib/crt1.o | 0 .../sysroot/mips64/el/fp64/usr/lib/crti.o | 0 .../sysroot/mips64/el/fp64/usr/lib/crtn.o | 0 .../sysroot/mips64/el/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips64/el/nan2008/usr/lib/crti.o | 0 .../sysroot/mips64/el/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64/el/sof/usr/lib/crt1.o | 0 .../sysroot/mips64/el/sof/usr/lib/crti.o | 0 .../sysroot/mips64/el/sof/usr/lib/crtn.o | 0 .../mips_fsf_tree/sysroot/mips64/el/usr/lib/crt1.o | 0 .../mips_fsf_tree/sysroot/mips64/el/usr/lib/crti.o | 0 .../mips_fsf_tree/sysroot/mips64/el/usr/lib/crtn.o | 0 .../sysroot/mips64/fp64/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips64/fp64/nan2008/usr/lib/crti.o | 0 .../sysroot/mips64/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64/fp64/usr/lib/crt1.o | 0 .../sysroot/mips64/fp64/usr/lib/crti.o | 0 .../sysroot/mips64/fp64/usr/lib/crtn.o | 0 .../sysroot/mips64/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips64/nan2008/usr/lib/crti.o | 0 .../sysroot/mips64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64/sof/usr/lib/crt1.o | 0 .../sysroot/mips64/sof/usr/lib/crti.o | 0 .../sysroot/mips64/sof/usr/lib/crtn.o | 0 .../mips_fsf_tree/sysroot/mips64/usr/lib/crt1.o | 0 .../mips_fsf_tree/sysroot/mips64/usr/lib/crti.o | 0 .../mips_fsf_tree/sysroot/mips64/usr/lib/crtn.o | 0 .../mips64r2/64/el/fp64/nan2008/usr/lib/crt1.o | 0 .../mips64r2/64/el/fp64/nan2008/usr/lib/crti.o | 0 .../mips64r2/64/el/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64r2/64/el/fp64/usr/lib/crt1.o | 0 .../sysroot/mips64r2/64/el/fp64/usr/lib/crti.o | 0 .../sysroot/mips64r2/64/el/fp64/usr/lib/crtn.o | 0 .../sysroot/mips64r2/64/el/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips64r2/64/el/nan2008/usr/lib/crti.o | 0 .../sysroot/mips64r2/64/el/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64r2/64/el/sof/usr/lib/crt1.o | 0 .../sysroot/mips64r2/64/el/sof/usr/lib/crti.o | 0 .../sysroot/mips64r2/64/el/sof/usr/lib/crtn.o | 0 .../sysroot/mips64r2/64/el/usr/lib/crt1.o | 0 .../sysroot/mips64r2/64/el/usr/lib/crti.o | 0 .../sysroot/mips64r2/64/el/usr/lib/crtn.o | 0 .../mips64r2/64/fp64/nan2008/usr/lib/crt1.o | 0 .../mips64r2/64/fp64/nan2008/usr/lib/crti.o | 0 .../mips64r2/64/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64r2/64/fp64/usr/lib/crt1.o | 0 .../sysroot/mips64r2/64/fp64/usr/lib/crti.o | 0 .../sysroot/mips64r2/64/fp64/usr/lib/crtn.o | 0 .../sysroot/mips64r2/64/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips64r2/64/nan2008/usr/lib/crti.o | 0 .../sysroot/mips64r2/64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64r2/64/sof/usr/lib/crt1.o | 0 .../sysroot/mips64r2/64/sof/usr/lib/crti.o | 0 .../sysroot/mips64r2/64/sof/usr/lib/crtn.o | 0 .../sysroot/mips64r2/64/usr/lib/crt1.o | 0 .../sysroot/mips64r2/64/usr/lib/crti.o | 0 .../sysroot/mips64r2/64/usr/lib/crtn.o | 0 .../mips64r2/el/fp64/nan2008/usr/lib/crt1.o | 0 .../mips64r2/el/fp64/nan2008/usr/lib/crti.o | 0 .../mips64r2/el/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64r2/el/fp64/usr/lib/crt1.o | 0 .../sysroot/mips64r2/el/fp64/usr/lib/crti.o | 0 .../sysroot/mips64r2/el/fp64/usr/lib/crtn.o | 0 .../sysroot/mips64r2/el/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips64r2/el/nan2008/usr/lib/crti.o | 0 .../sysroot/mips64r2/el/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64r2/el/sof/usr/lib/crt1.o | 0 .../sysroot/mips64r2/el/sof/usr/lib/crti.o | 0 .../sysroot/mips64r2/el/sof/usr/lib/crtn.o | 0 .../sysroot/mips64r2/el/usr/lib/crt1.o | 0 .../sysroot/mips64r2/el/usr/lib/crti.o | 0 .../sysroot/mips64r2/el/usr/lib/crtn.o | 0 .../sysroot/mips64r2/fp64/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips64r2/fp64/nan2008/usr/lib/crti.o | 0 .../sysroot/mips64r2/fp64/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64r2/fp64/usr/lib/crt1.o | 0 .../sysroot/mips64r2/fp64/usr/lib/crti.o | 0 .../sysroot/mips64r2/fp64/usr/lib/crtn.o | 0 .../sysroot/mips64r2/nan2008/usr/lib/crt1.o | 0 .../sysroot/mips64r2/nan2008/usr/lib/crti.o | 0 .../sysroot/mips64r2/nan2008/usr/lib/crtn.o | 0 .../sysroot/mips64r2/sof/usr/lib/crt1.o | 0 .../sysroot/mips64r2/sof/usr/lib/crti.o | 0 .../sysroot/mips64r2/sof/usr/lib/crtn.o | 0 .../mips_fsf_tree/sysroot/mips64r2/usr/lib/crt1.o | 0 .../mips_fsf_tree/sysroot/mips64r2/usr/lib/crti.o | 0 .../mips_fsf_tree/sysroot/mips64r2/usr/lib/crtn.o | 0 .../mips_fsf_tree/sysroot/nan2008/usr/lib/crt1.o | 0 .../mips_fsf_tree/sysroot/nan2008/usr/lib/crti.o | 0 .../mips_fsf_tree/sysroot/nan2008/usr/lib/crtn.o | 0 .../mips_fsf_tree/sysroot/sof/usr/lib/crt1.o | 0 .../mips_fsf_tree/sysroot/sof/usr/lib/crti.o | 0 .../mips_fsf_tree/sysroot/sof/usr/lib/crtn.o | 0 .../mips_fsf_tree/sysroot/usr/include/bits/.keep | 0 .../Inputs/mips_fsf_tree/sysroot/usr/lib/crt1.o | 0 .../Inputs/mips_fsf_tree/sysroot/usr/lib/crti.o | 0 .../Inputs/mips_fsf_tree/sysroot/usr/lib/crtn.o | 0 .../Inputs/multilib_32bit_linux_tree/usr/bin/as | 1 + .../usr/bin/i386-unknown-linux-gnu-as | 1 + .../usr/bin/i386-unknown-linux-gnu-ld | 1 + .../Inputs/multilib_32bit_linux_tree/usr/bin/ld | 1 + .../usr/i386-unknown-linux/bin/as | 1 + .../usr/i386-unknown-linux/bin/ld | 1 + .../Inputs/multilib_64bit_linux_tree/usr/bin/as | 1 + .../Inputs/multilib_64bit_linux_tree/usr/bin/ld | 1 + .../usr/bin/x86_64-unknown-linux-gnu-as | 1 + .../usr/bin/x86_64-unknown-linux-gnu-ld | 1 + .../usr/x86_64-unknown-linux/bin/as | 1 + .../usr/x86_64-unknown-linux/bin/ld | 1 + .../gcc-cross/arm-linux-gnueabihf/4.7/crtbegin.o | 1 + test/Driver/Inputs/x86-64_ubuntu_13.10/lib/.keep | 0 .../usr/arm-linux-gnueabi/lib/crt1.o | 0 .../usr/arm-linux-gnueabi/lib/crti.o | 0 .../usr/arm-linux-gnueabi/lib/crtn.o | 0 .../usr/arm-linux-gnueabihf/lib/crt1.o | 0 .../usr/arm-linux-gnueabihf/lib/crti.o | 0 .../usr/arm-linux-gnueabihf/lib/crtn.o | 0 .../lib/gcc-cross/arm-linux-gnueabi/4.7/crtbegin.o | 0 .../lib/gcc-cross/arm-linux-gnueabi/4.7/crtend.o | 0 .../gcc-cross/arm-linux-gnueabihf/4.8/crtbegin.o | 0 .../lib/gcc-cross/arm-linux-gnueabihf/4.8/crtend.o | 0 test/Driver/O.c | 10 + test/Driver/Wp-args.c | 4 +- test/Driver/Xarch.c | 2 +- test/Driver/Xlinker-args.c | 8 + test/Driver/aarch64-cpus.c | 10 + test/Driver/aarch64-mfpu.c | 26 + test/Driver/altivec-asm.S | 3 + test/Driver/arc.c | 12 +- test/Driver/arch.c | 6 +- test/Driver/arm-alignment.c | 25 + test/Driver/arm-cortex-cpus.c | 37 + test/Driver/arm-fixed-r9.c | 4 + test/Driver/arm-hwdiv.c | 39 + test/Driver/arm-mfpmath.c | 29 - test/Driver/arm-mfpu.c | 38 + test/Driver/arm-restrict-it.c | 15 + test/Driver/armv8-crc.c | 8 + test/Driver/at_file.c | 6 + test/Driver/at_file.c.args | 2 + test/Driver/at_file.c.args.utf16le | Bin 0 -> 568 bytes test/Driver/bounds-checking.c | 6 +- test/Driver/ccc-add-args.c | 5 - test/Driver/ccc-as-cpp.c | 5 +- test/Driver/cl-fallback.c | 41 + test/Driver/cl-inputs.c | 35 + test/Driver/cl-link.c | 33 + test/Driver/cl-options.c | 238 + test/Driver/cl-outputs.c | 107 + test/Driver/cl-runtime-flags.c | 89 + test/Driver/cl.c | 35 + test/Driver/clang-g-opts.c | 11 +- test/Driver/clang-translation.c | 8 +- test/Driver/clang_f_opts.c | 78 +- test/Driver/color-diagnostics.c | 30 +- test/Driver/coverage-ld.c | 19 + test/Driver/crash-report.c | 14 +- test/Driver/cross-linux.c | 95 + test/Driver/darwin-as.c | 12 +- test/Driver/darwin-dsymutil.c | 2 +- test/Driver/darwin-eabi.c | 12 + test/Driver/darwin-ld.c | 14 + test/Driver/darwin-objc-defaults.m | 21 +- test/Driver/darwin-objc-options.m | 6 +- test/Driver/darwin-sanitizer-ld.c | 15 +- test/Driver/darwin-verify-debug.c | 2 +- test/Driver/debug-main-file.S | 1 - test/Driver/debug-options-as.c | 3 - test/Driver/debug-options.c | 60 +- test/Driver/debug-unsupported.c | 22 +- test/Driver/dyld-prefix.c | 9 + test/Driver/emit-llvm.c | 10 - test/Driver/fast-math.c | 38 +- test/Driver/fpack-struct.c | 2 +- test/Driver/frame-pointer.c | 14 + test/Driver/freebsd.c | 4 + test/Driver/freebsd.cc | 6 + test/Driver/fsanitize-blacklist.c | 18 +- test/Driver/fsanitize.c | 72 +- test/Driver/gcc-toolchain.cpp | 10 +- test/Driver/gcc-version-debug.c | 6 + test/Driver/gcc_forward.c | 37 +- test/Driver/gfortran.f90 | 244 + test/Driver/hexagon-toolchain-elf.c | 136 +- test/Driver/hexagon-toolchain.c | 136 +- test/Driver/ident_md.c | 6 + test/Driver/immediate-options.c | 20 +- test/Driver/inhibit-downstream-commands.c | 2 +- test/Driver/integrated-as.c | 5 +- test/Driver/integrated-as.s | 33 +- test/Driver/invalid-o-level.c | 4 - test/Driver/le32-toolchain.c | 4 + test/Driver/le32-unknown-nacl.cpp | 4 +- test/Driver/linux-as.c | 38 +- test/Driver/linux-header-search.cpp | 55 +- test/Driver/linux-ld.c | 306 +- test/Driver/lit.local.cfg | 6 +- test/Driver/lto.c | 13 +- test/Driver/m_and_mm.c | 2 +- test/Driver/mips-as.c | 32 + test/Driver/mips-cs-header-search.cpp | 64 +- test/Driver/mips-cs-ld.c | 298 +- test/Driver/mips-features.c | 48 + test/Driver/mips-float.c | 16 +- test/Driver/mips-fsf.cpp | 2341 +++ test/Driver/mips-long-double.c | 19 - test/Driver/mipsel-nacl-defines.cpp | 45 + test/Driver/montavista-gcc-toolchain.c | 6 +- test/Driver/netbsd.c | 57 + test/Driver/netbsd.cpp | 57 + test/Driver/no-integrated-as-win.c | 10 +- .../Driver/no-objc-default-synthesize-properties.m | 6 +- test/Driver/noexecstack.c | 4 +- test/Driver/nostdincxx.cpp | 2 +- test/Driver/objc_default_synth.m | 6 - test/Driver/openbsd.c | 28 + test/Driver/option-aliases.c | 23 +- test/Driver/parsing.c | 22 - test/Driver/pic.c | 12 + test/Driver/ppc-features.cpp | 22 +- test/Driver/pth.c | 4 +- test/Driver/qa_override.c | 22 +- test/Driver/r600-mcpu.cl | 8 + test/Driver/rewrite-legacy-objc.m | 8 +- test/Driver/rewrite-objc.m | 2 +- test/Driver/sanitizer-ld.c | 35 +- test/Driver/split-debug.c | 10 + test/Driver/stack-protector.c | 6 + test/Driver/std.cpp | 18 +- test/Driver/systemz-march.c | 13 + test/Driver/target-as.s | 2 - test/Driver/target.c | 6 +- test/Driver/tsan.c | 10 +- test/Driver/unknown-arg.c | 19 +- test/Driver/working-directory.c | 8 +- test/Driver/x86_64-nacl-defines.cpp | 4 +- test/Driver/x86_64-nacl-types.cpp | 37 - test/Driver/x86_features.c | 8 +- test/Driver/xcore-opts.c | 13 + test/FixIt/bridge-cast-in-arc.mm | 2 +- test/FixIt/fixit-autoreleasepool.m | 2 +- test/FixIt/fixit-cxx0x.cpp | 5 + test/FixIt/fixit-cxx11-attributes.cpp | 2 +- test/FixIt/fixit-errors-1.c | 2 +- test/FixIt/fixit-include.c | 2 +- test/FixIt/fixit-interface-as-param.m | 2 +- test/FixIt/fixit-objc-message-comma-separator.m | 2 +- test/FixIt/fixit-objc.m | 8 +- test/FixIt/fixit-static-object-decl.m | 12 +- test/FixIt/fixit-unicode-with-utf8-output.c | 24 + test/FixIt/fixit-unicode.c | 39 +- test/FixIt/fixit-uninit.c | 25 + test/FixIt/fixit-vexing-parse.cpp | 2 +- test/FixIt/fixit.c | 2 + test/FixIt/fixit.cpp | 33 +- test/FixIt/format.m | 10 +- test/FixIt/format.mm | 4 +- test/FixIt/lit.local.cfg | 2 + test/FixIt/messages.cpp | 2 +- test/FixIt/no-fixit.cpp | 2 +- test/FixIt/selector-fixit.m | 41 + test/FixIt/typo-crash.cpp | 5 +- test/FixIt/typo-location-bugs.cpp | 21 + test/FixIt/typo-using.cpp | 56 + test/FixIt/typo.c | 2 +- test/FixIt/typo.cpp | 17 +- test/Format/cursor.cpp | 6 + test/Format/diagnostic.cpp | 4 - test/Format/line-ranges.cpp | 11 + test/Format/multiple-inputs-error.cpp | 6 +- test/Format/style-on-command-line.cpp | 29 + test/Frontend/Inputs/lit.local.cfg | 1 - test/Frontend/Inputs/rewrite-includes-bom.h | 1 + test/Frontend/cc1-return-codes.c | 4 + test/Frontend/darwin-eabi.c | 7 + test/Frontend/darwin-version.c | 10 +- test/Frontend/invalid-o-level.c | 4 + test/Frontend/ir-support-errors.ll | 2 +- test/Frontend/mfpmath.c | 43 + test/Frontend/mips-long-double.c | 19 + test/Frontend/print-header-includes.c | 7 + test/Frontend/rewrite-includes-bom.c | 4 + test/Frontend/rewrite-includes-header-cmd-line.c | 7 + .../Frontend/rewrite-includes-invalid-hasinclude.c | 2 +- test/Frontend/rewrite-includes-warnings.c | 4 + test/Frontend/rewrite-includes.c | 45 +- test/Frontend/verify-fatal.c | 2 +- test/Frontend/verify.c | 18 +- test/Frontend/verify2.c | 2 +- test/Frontend/verify3.c | 8 +- test/Frontend/x86_64-nacl-types.cpp | 37 + test/Headers/Inputs/include/complex.h | 3 + test/Headers/Inputs/include/math.h | 1 + test/Headers/Inputs/include/stdint.h | 1 + test/Headers/altivec-header.c | 6 +- test/Headers/c11.c | 6 +- test/Headers/c89.c | 2 +- test/Headers/cxx11.cpp | 4 +- test/Headers/limits.cpp | 42 + test/Headers/ms-intrin.cpp | 24 + test/Headers/ms-null-ms-header-vs-stddef.cpp | 4 +- test/Headers/ms-wchar.c | 2 +- test/Headers/tgmath.c | 38 + test/Headers/x86-intrinsics-headers.c | 6 +- test/Headers/x86intrin.c | 91 + .../Inputs/CommentXML/invalid-function-13.xml | 13 + test/Index/Inputs/CommentXML/valid-function-07.xml | 19 +- test/Index/Inputs/empty.h | 0 test/Index/Inputs/lit.local.cfg | 1 - test/Index/Inputs/preamble-with-error.h | 3 + test/Index/TestClassDecl.m | 4 +- test/Index/TestClassForwardDecl.m | 4 +- test/Index/annotate-comments-objc.m | 78 + test/Index/annotate-comments-unterminated.c | 2 +- test/Index/annotate-comments.cpp | 10 +- test/Index/annotate-tokens-cxx0x.cpp | 44 + test/Index/annotate-tokens.m | 22 + test/Index/annotate-toplevel-in-objccontainer.m | 6 +- test/Index/asm-attribute.c | 3 +- test/Index/attributes.c | 10 + test/Index/availability.c | 10 + test/Index/c-index-api-loadTU-test.m | 14 +- test/Index/c-index-unsupported-warning-test.c | 3 + test/Index/cindex-from-source.m | 2 +- test/Index/comment-custom-block-command.cpp | 2 +- test/Index/comment-misc-tags.m | 3 +- test/Index/comment-to-html-xml-conversion.cpp | 292 +- test/Index/comment-unqualified-objc-pointer.m | 2 +- test/Index/comment-xml-schema.c | 31 +- test/Index/complete-documentation-properties.m | 14 +- test/Index/complete-documentation-templates.cpp | 14 +- test/Index/complete-documentation.cpp | 6 +- test/Index/complete-modules.m | 8 +- test/Index/complete-pch.m | 2 + test/Index/complete-preamble.cpp | 2 +- test/Index/complete-qualified.cpp | 2 +- test/Index/crash-recovery-modules.m | 15 + test/Index/create-tu-fail.c | 2 +- test/Index/error-on-deserialized.c | 2 +- test/Index/file-includes.c | 3 + test/Index/get-cursor.m | 24 + test/Index/index-decls.m | 19 + test/Index/index-file.cpp | 13 + test/Index/index-module.m | 2 + test/Index/overrides.cpp | 7 + test/Index/overriding-method-comments.mm | 10 +- test/Index/pch-with-errors.c | 4 +- test/Index/pch-with-errors.m | 6 + test/Index/pch-with-module.m | 23 + test/Index/preamble-reparse-with-BOM.m | 6 +- test/Index/preamble.c | 8 +- test/Index/print-type-cxx11.cpp | 8 + test/Index/print-type-size.cpp | 50 +- test/Index/print-type.c | 5 +- test/Index/print-type.cpp | 15 + test/Index/recover-bad-code-rdar_7487294.c | 2 +- test/Index/retain-comments-from-system-headers.c | 2 +- test/Index/subclass-comment.mm | 66 +- test/Index/usrs.m | 2 +- test/Layout/ms-x86-aligned-tail-padding.cpp | 502 + test/Layout/ms-x86-basic-layout.cpp | 775 + test/Layout/ms-x86-bitfields-vbases.cpp | 84 + .../ms-x86-empty-base-after-base-with-vbptr.cpp | 216 + test/Layout/ms-x86-empty-nonvirtual-bases.cpp | 174 + test/Layout/ms-x86-empty-virtual-base.cpp | 704 + test/Layout/ms-x86-lazy-empty-nonvirtual-base.cpp | 735 + test/Layout/ms-x86-misalignedarray.cpp | 23 + test/Layout/ms-x86-primary-bases.cpp | 317 + test/Layout/ms-x86-size-alignment-fail.cpp | 123 + test/Layout/ms-x86-vfvb-alignment.cpp | 376 + test/Layout/ms-x86-vfvb-sharing.cpp | 140 + test/Layout/ms-x86-vtordisp.cpp | 170 + test/Lexer/Inputs/bad-header-guard-defined.h | 4 + test/Lexer/Inputs/bad-header-guard.h | 4 + test/Lexer/Inputs/different-define.h | 4 + test/Lexer/Inputs/good-header-guard.h | 4 + test/Lexer/Inputs/multiple.h | 4 + test/Lexer/Inputs/no-define.h | 3 + test/Lexer/Inputs/out-of-order-define.h | 7 + .../Inputs/tokens-between-ifndef-and-define.h | 7 + test/Lexer/Inputs/unlikely-to-be-header-guard.h | 5 + test/Lexer/builtin_redef.c | 2 +- test/Lexer/char-literal.cpp | 4 - test/Lexer/constants.c | 7 +- test/Lexer/cxx-features.cpp | 89 + test/Lexer/cxx0x_raw_string_unterminated.cpp | 2 +- test/Lexer/cxx1y_binary_literal.cpp | 1 + test/Lexer/cxx1y_digit_separators.cpp | 43 + test/Lexer/dollar-idents.c | 2 +- test/Lexer/gnu-flags.c | 56 + test/Lexer/has_extension_cxx.cpp | 20 +- test/Lexer/has_feature_cxx0x.cpp | 50 + test/Lexer/header.cpp | 44 + test/Lexer/newline-eof-c++11.cpp | 5 - test/Lexer/newline-eof-c++98-compat.cpp | 1 + test/Lexer/newline-eof.c | 8 +- test/Lexer/pragma-operators.cpp | 22 + test/Lexer/string-literal-errors.cpp | 2 +- test/Lexer/wchar-signedness.c | 4 +- test/Makefile | 3 + test/Misc/ast-dump-attr.cpp | 16 + test/Misc/ast-dump-color.cpp | 8 +- test/Misc/ast-dump-decl.cpp | 16 + test/Misc/ast-dump-stmt.cpp | 28 +- test/Misc/ast-dump-templates.cpp | 12 + test/Misc/caret-diags-scratch-buffer.c | 2 +- test/Misc/dev-fd-fs.c | 3 - test/Misc/diag-format.c | 3 +- test/Misc/diag-line-wrapping.cpp | 4 +- test/Misc/diag-macro-backtrace.c | 2 +- test/Misc/diag-mapping.c | 6 +- test/Misc/diag-mapping2.c | 4 +- test/Misc/diag-presumed.c | 4 +- test/Misc/diag-template-diffing-color.cpp | 4 +- test/Misc/diag-template-diffing-cxx98.cpp | 2 +- test/Misc/diag-template-diffing.cpp | 79 +- test/Misc/diag-trailing-null-bytes.cpp | 2 +- test/Misc/diag-verify.cpp | 2 +- test/Misc/error-limit-multiple-notes.cpp | 2 +- test/Misc/error-limit.c | 2 +- test/Misc/include-stack-for-note-flag.cpp | 10 +- test/Misc/languageOptsOpenCL.cl | 19 + test/Misc/permissions.cpp | 15 + test/Misc/show-diag-options.c | 4 +- test/Misc/tabstop.c | 6 +- test/Misc/unprintable.c | 2 +- test/Misc/warning-flags-tree.c | 5 +- test/Misc/warning-flags.c | 21 +- .../DependsOnModule.framework/Headers/not_cxx.h | 1 + .../DependsOnModule.framework/Headers/not_objc.h | 1 + .../Inputs/DependsOnModule.framework/module.map | 8 + test/Modules/Inputs/MethodPoolBSub.h | 1 + test/Modules/Inputs/MethodPoolBSub2.h | 3 + test/Modules/Inputs/System/usr/include/stdio.h | 2 +- test/Modules/Inputs/cxx-decls-imported.h | 5 + test/Modules/Inputs/cxx-decls-unimported.h | 1 + test/Modules/Inputs/cxx-templates-a.h | 50 + test/Modules/Inputs/cxx-templates-b-impl.h | 5 + test/Modules/Inputs/cxx-templates-b.h | 69 + test/Modules/Inputs/cxx-templates-c.h | 7 + test/Modules/Inputs/cxx-templates-common.h | 11 + test/Modules/Inputs/declare-use/a.h | 4 + test/Modules/Inputs/declare-use/b.h | 4 + test/Modules/Inputs/declare-use/c.h | 6 + test/Modules/Inputs/declare-use/d.h | 6 + test/Modules/Inputs/declare-use/e.h | 6 + test/Modules/Inputs/declare-use/f.h | 6 + test/Modules/Inputs/declare-use/g.h | 6 + test/Modules/Inputs/declare-use/g1.h | 1 + test/Modules/Inputs/declare-use/h.h | 7 + test/Modules/Inputs/declare-use/h1.h | 1 + test/Modules/Inputs/declare-use/module.map | 43 + test/Modules/Inputs/def.h | 7 + test/Modules/Inputs/dummy.h | 3 + test/Modules/Inputs/incomplete_mod.h | 1 + test/Modules/Inputs/incomplete_mod_missing.h | 2 + test/Modules/Inputs/initializer_list | 9 + test/Modules/Inputs/modular_maps/a.h | 4 + test/Modules/Inputs/modular_maps/b.h | 4 + test/Modules/Inputs/modular_maps/common.h | 4 + test/Modules/Inputs/modular_maps/modulea.map | 7 + test/Modules/Inputs/modular_maps/moduleb.map | 4 + test/Modules/Inputs/module.map | 72 + test/Modules/Inputs/namespaces-top.h | 5 + test/Modules/Inputs/odr/a.h | 13 + test/Modules/Inputs/odr/b.h | 9 + test/Modules/Inputs/odr/module.map | 6 + test/Modules/Inputs/pch-used.h | 2 + test/Modules/Inputs/private/common.h | 6 + test/Modules/Inputs/private/module.map | 9 + test/Modules/Inputs/private/private1.h | 9 + test/Modules/Inputs/private/private2.h | 9 + test/Modules/Inputs/private/public1.h | 9 + test/Modules/Inputs/private/public2.h | 9 + test/Modules/Inputs/private0/common.h | 6 + test/Modules/Inputs/private1/module.map | 4 + test/Modules/Inputs/private1/private1.h | 9 + test/Modules/Inputs/private1/public1.h | 9 + test/Modules/Inputs/private2/module.map | 4 + test/Modules/Inputs/private2/private2.h | 9 + test/Modules/Inputs/private2/public2.h | 9 + .../Modules/Inputs/recursive_visibility_a1_inner.h | 4 + .../Inputs/recursive_visibility_a2_more_inner.h | 4 + test/Modules/Inputs/recursive_visibility_b.h | 2 + test/Modules/Inputs/recursive_visibility_c.h | 5 + .../Inputs/separate_map_tree/maps/modulea.map | 12 + .../Inputs/separate_map_tree/maps/moduleb.map | 4 + .../Inputs/separate_map_tree/maps/modulec.map | 5 + test/Modules/Inputs/separate_map_tree/src/common.h | 4 + .../Inputs/separate_map_tree/src/private-in-c.h | 4 + .../Inputs/separate_map_tree/src/public-in-b.h | 4 + .../Inputs/separate_map_tree/src/public-in-c.h | 4 + test/Modules/Inputs/submodules/import-self-a.h | 1 + test/Modules/Inputs/submodules/import-self-b.h | 10 + test/Modules/Inputs/submodules/import-self-c.h | 1 + test/Modules/Inputs/submodules/import-self-d.h | 1 + test/Modules/Inputs/submodules/module.map | 7 + test/Modules/Inputs/templates-left.h | 6 + test/Modules/Inputs/templates-right.h | 6 + test/Modules/Inputs/templates-top.h | 8 + test/Modules/Inputs/using-decl-a.h | 10 + test/Modules/Inputs/using-decl-b.h | 11 + test/Modules/Inputs/warning.h | 1 + test/Modules/auto-module-import.m | 27 +- test/Modules/autolink.m | 2 +- test/Modules/build-fail-notes.m | 6 +- test/Modules/compiler_builtins_arm.m | 6 + test/Modules/cxx-decls.cpp | 21 + test/Modules/cxx-templates.cpp | 125 + test/Modules/cycles.c | 2 +- test/Modules/declare-use1.cpp | 7 + test/Modules/declare-use2.cpp | 7 + test/Modules/decldef.m | 12 +- test/Modules/decldef.mm | 24 +- test/Modules/driver.c | 4 +- test/Modules/epic-fail.m | 2 +- test/Modules/fatal-module-loader-error.m | 26 + test/Modules/import-decl.cpp | 9 + test/Modules/incomplete-module.m | 5 + test/Modules/initializer_list.cpp | 7 + test/Modules/load_failure.c | 2 +- test/Modules/macros.c | 2 +- test/Modules/method_pool.m | 4 + test/Modules/modular_maps.cpp | 8 + test/Modules/namespaces.cpp | 7 + test/Modules/normal-module-map.cpp | 4 +- test/Modules/objc-categories.m | 1 + test/Modules/odr.cpp | 20 + test/Modules/pch-used.m | 8 + test/Modules/private.cpp | 13 + test/Modules/private1.cpp | 13 + test/Modules/recursive_visibility.mm | 9 + test/Modules/requires.m | 3 +- test/Modules/requires.mm | 6 + .../self-import-header/af.framework/Headers/a1.h | 4 + .../self-import-header/af.framework/Headers/a2.h | 1 + .../self-import-header/af.framework/module.map | 4 + .../Modules/self-import-header/depend_builtin/h1.h | 1 + .../self-import-header/depend_builtin/module.map | 5 + test/Modules/self-import-header/test.m | 8 + test/Modules/separate_map_tree.cpp | 8 + test/Modules/subframeworks.m | 3 +- test/Modules/submodules.cpp | 15 +- test/Modules/system_headers.m | 8 + test/Modules/templates.mm | 37 +- test/Modules/using-decl.cpp | 8 + test/OpenMP/openmp_common.c | 2 +- test/OpenMP/parallel_ast_print.cpp | 60 + test/OpenMP/parallel_default_messages.cpp | 21 + test/OpenMP/parallel_firstprivate_messages.cpp | 82 + test/OpenMP/parallel_messages.cpp | 53 + test/OpenMP/parallel_private_messages.cpp | 81 + test/OpenMP/parallel_shared_messages.cpp | 83 + test/OpenMP/predefined_macro.c | 1 - test/OpenMP/threadprivate_ast_print.cpp | 20 +- test/OpenMP/threadprivate_messages.cpp | 46 +- test/PCH/Inputs/chain-selectors2.h | 2 +- test/PCH/arc.m | 4 +- test/PCH/badpch.c | 4 +- test/PCH/chain-categories2.m | 1 + test/PCH/chain-cxx.cpp | 3 + test/PCH/chain-friend-instantiation.cpp | 1 + test/PCH/chain-selectors.m | 6 +- test/PCH/check-deserializations.cpp | 28 +- test/PCH/cxx-friends.cpp | 8 +- test/PCH/cxx-friends.h | 25 + test/PCH/cxx-member-init.cpp | 14 + test/PCH/cxx-namespaces.cpp | 15 +- test/PCH/cxx-namespaces.h | 3 + test/PCH/cxx-templates.cpp | 29 +- test/PCH/cxx-templates.h | 42 + test/PCH/cxx-traits.cpp | 4 +- test/PCH/cxx-traits.h | 4 +- test/PCH/cxx-typeid.cpp | 6 +- test/PCH/cxx11-lambdas.mm | 13 +- test/PCH/cxx1y-deduced-return-type.cpp | 34 + test/PCH/cxx1y-init-captures.cpp | 28 + test/PCH/cxx1y-lambdas.mm | 58 + test/PCH/cxx1y-variable-templates.cpp | 171 + test/PCH/debug-info-limited-struct.c | 4 + test/PCH/debug-info-limited-struct.h | 8 + test/PCH/exprs.h | 4 + test/PCH/external-defs.c | 2 +- test/PCH/floating-literal.c | 4 +- test/PCH/irgen-rdar13114142.mm | 2 +- test/PCH/line-directive.c | 4 +- test/PCH/modified-header-error.c | 2 +- test/PCH/objc_container.m | 4 +- test/PCH/objc_import.h | 11 + test/PCH/objc_import.m | 15 + test/PCH/objc_literals.m | 10 +- test/PCH/objc_literals.mm | 4 +- test/PCH/objcxx-ivar-class.mm | 4 +- test/PCH/pch-dir.c | 8 +- test/PCH/pragma-diag-section.cpp | 16 +- test/PCH/pragma-weak.c | 4 +- test/PCH/preamble.c | 2 +- test/PCH/pth.c | 4 +- test/PCH/rdar10830559.cpp | 2 +- test/PCH/remap-file-from-pch.cpp | 2 +- test/Parser/DelayedTemplateParsing.cpp | 24 +- test/Parser/MicrosoftExtensions.c | 25 + test/Parser/MicrosoftExtensions.cpp | 83 +- test/Parser/PR11000.cpp | 2 +- test/Parser/altivec-csk-bool.c | 14 + test/Parser/attr-availability.c | 2 + test/Parser/attributes.c | 2 +- test/Parser/crash-report.c | 2 +- test/Parser/cxx-altivec.cpp | 6 +- test/Parser/cxx-ambig-init-templ.cpp | 171 + test/Parser/cxx-attributes.cpp | 14 +- test/Parser/cxx-class-template-specialization.cpp | 8 + test/Parser/cxx-decl.cpp | 49 +- test/Parser/cxx-default-args.cpp | 17 + test/Parser/cxx-friend.cpp | 4 + test/Parser/cxx-member-crash.cpp | 4 +- test/Parser/cxx-member-initializers.cpp | 72 +- test/Parser/cxx-template-argument.cpp | 65 +- test/Parser/cxx-template-decl.cpp | 14 + test/Parser/cxx-using-directive.cpp | 9 +- test/Parser/cxx0x-attributes.cpp | 38 + test/Parser/cxx0x-decl.cpp | 31 + test/Parser/cxx0x-in-cxx98.cpp | 7 + test/Parser/cxx0x-lambda-expressions.cpp | 16 + test/Parser/cxx0x-member-initializers.cpp | 10 + test/Parser/cxx11-stmt-attributes.cpp | 5 + test/Parser/declarators.c | 3 +- test/Parser/expressions.c | 10 + test/Parser/objc-diag-width.mm | 2 +- test/Parser/objc-error-qualified-implementation.m | 8 + test/Parser/objcxx0x-lambda-expressions.mm | 24 +- test/Parser/parser_overflow.c | 8 +- test/Parser/pragma-fp-contract.c | 2 +- test/Parser/pragma-weak.c | 27 + test/Parser/recovery.cpp | 73 +- test/Parser/switch-recovery.cpp | 6 +- test/Preprocessor/_Pragma.c | 3 + test/Preprocessor/aarch64-target-features.c | 32 +- test/Preprocessor/arm-target-features.c | 157 + test/Preprocessor/assembler-with-cpp.c | 7 + test/Preprocessor/feature_tests.c | 1 + test/Preprocessor/has_attribute.c | 4 + test/Preprocessor/hash_line.c | 13 +- test/Preprocessor/ifdef-recover.c | 2 +- test/Preprocessor/init.c | 568 +- test/Preprocessor/iwithprefix.c | 7 +- test/Preprocessor/line-directive-output.c | 3 + test/Preprocessor/line-directive.c | 4 +- test/Preprocessor/macro_backslash.c | 3 + test/Preprocessor/macro_expand_empty.c | 14 + test/Preprocessor/macro_fn.c | 5 +- test/Preprocessor/macro_paste_bad.c | 2 + test/Preprocessor/macro_paste_bcpl_comment.c | 2 +- test/Preprocessor/macro_paste_empty.c | 10 +- test/Preprocessor/macro_paste_msextensions.c | 2 +- test/Preprocessor/macro_with_initializer_list.cpp | 182 + test/Preprocessor/microsoft-ext.c | 12 + test/Preprocessor/optimize.c | 2 +- test/Preprocessor/pragma_microsoft.c | 33 + test/Preprocessor/pragma_microsoft.cpp | 3 + test/Preprocessor/predefined-arch-macros.c | 246 +- test/Preprocessor/predefined-macros.c | 18 + test/Preprocessor/stdint.c | 332 +- test/Preprocessor/traditional-cpp.c | 23 +- test/Preprocessor/ucn-pp-identifier.c | 2 +- test/Preprocessor/warn-macro-unused.c | 4 + test/Preprocessor/x86_target_features.c | 264 +- test/Rewriter/blockcast3.mm | 4 +- test/Rewriter/dllimport-typedef.c | 4 +- test/Rewriter/inner-block-helper-funcs.mm | 2 +- test/Rewriter/line-generation-test.m | 4 +- test/Rewriter/lit.local.cfg | 2 + test/Rewriter/missing-dllimport.c | 4 +- test/Rewriter/objc-modern-StretAPI-3.mm | 58 + test/Rewriter/objc-modern-boxing.mm | 4 +- test/Rewriter/objc-modern-fast-enumeration.mm | 25 + test/Rewriter/objc-modern-numeric-literal.mm | 4 +- test/Rewriter/objc-modern-property-attributes.mm | 12 + test/Rewriter/rewrite-cast-ivar-access.mm | 2 +- test/Rewriter/rewrite-category-property.mm | 2 +- test/Rewriter/rewrite-foreach-5.m | 2 +- test/Rewriter/rewrite-foreach-6.m | 2 +- test/Rewriter/rewrite-foreach-in-block.mm | 4 +- test/Rewriter/rewrite-foreach-protocol-id.m | 2 +- test/Rewriter/rewrite-forward-class.mm | 13 +- test/Rewriter/rewrite-interface-locals.mm | 20 + test/Rewriter/rewrite-line-directive.m | 4 +- test/Rewriter/rewrite-message-expr.mm | 2 +- .../rewrite-modern-default-property-synthesis.mm | 2 +- test/Rewriter/rewrite-modern-synchronized.m | 15 +- test/Rewriter/rewrite-modern-typeof.mm | 2 +- test/Rewriter/rewrite-typeof.mm | 2 +- test/Sema/128bitfloat.cc | 24 + test/Sema/128bitint.c | 4 +- test/Sema/Inputs/ms-keyword-system-header.h | 9 + test/Sema/MicrosoftCompatibility.cpp | 6 + test/Sema/MicrosoftExtensions.c | 34 +- test/Sema/aarch64-neon-vector-types.c | 33 + test/Sema/address_spaces.c | 2 + test/Sema/alias-redefinition.c | 44 + test/Sema/align-x86-64.c | 10 - test/Sema/alloc_size.c | 6 +- test/Sema/annotate.c | 6 +- test/Sema/arm-asm.c | 5 + test/Sema/arm-darwin-aapcs.cpp | 12 + test/Sema/arm-interrupt-attr.c | 16 + test/Sema/array-init.c | 3 +- test/Sema/array-size-64.c | 9 +- test/Sema/atomic-expr.c | 13 + test/Sema/atomic-ops.c | 16 +- test/Sema/atomic-requires-library-error.c | 31 + test/Sema/attr-alias-elf.c | 54 + test/Sema/attr-args.c | 50 +- test/Sema/attr-bounded.c | 15 + test/Sema/attr-cleanup.c | 22 +- test/Sema/attr-deprecated.c | 4 + test/Sema/attr-endian.c | 3 + test/Sema/attr-format.c | 2 + test/Sema/attr-mode.c | 18 +- test/Sema/attr-naked.c | 4 +- test/Sema/attr-nodebug.c | 4 +- test/Sema/attr-noinline.c | 2 +- test/Sema/attr-noreturn.c | 6 +- test/Sema/attr-ownership.c | 19 + test/Sema/attr-print.c | 19 +- test/Sema/attr-regparm.c | 4 +- test/Sema/attr-returns-twice.c | 2 +- test/Sema/attr-section.c | 2 +- test/Sema/attr-tls_model.c | 4 +- test/Sema/attr-unavailable-message.c | 9 +- test/Sema/attr-unused.c | 2 +- test/Sema/attr-visibility.c | 2 + test/Sema/block-args.c | 11 + test/Sema/builtin-clear_cache.c | 5 + test/Sema/builtins-aarch64.c | 5 + test/Sema/builtins-arm-exclusive.c | 61 + test/Sema/builtins-arm-strex-rettype.c | 8 + test/Sema/builtins-arm.c | 16 +- test/Sema/builtins-gnu-mode.c | 27 + test/Sema/builtins.c | 8 +- test/Sema/c89.c | 11 +- test/Sema/callingconv-ms_abi.c | 9 + test/Sema/callingconv-sysv_abi.c | 9 + test/Sema/callingconv.c | 28 +- test/Sema/captured-statements.c | 12 +- test/Sema/carbon.c | 3 +- test/Sema/cast.c | 8 + test/Sema/constant-builtins-2.c | 118 +- test/Sema/convertvector.c | 17 + test/Sema/declspec.c | 13 + test/Sema/designated-initializers.c | 66 +- test/Sema/dllimport-dllexport.c | 5 + test/Sema/empty1.c | 85 + test/Sema/empty2.c | 43 + test/Sema/enum-increment.c | 13 + test/Sema/ext_vector_casts.c | 26 +- test/Sema/extern-redecl.c | 24 + test/Sema/format-strings-ms.c | 25 + test/Sema/format-strings.c | 10 + test/Sema/freemain.c | 2 +- test/Sema/function.c | 10 + test/Sema/gnu-flags.c | 171 + test/Sema/init.c | 3 + test/Sema/inline.c | 13 + test/Sema/member-reference.c | 5 +- test/Sema/mips16_attr_allowed.c | 20 +- test/Sema/mrtd.c | 38 + test/Sema/ms-inline-asm.c | 12 +- test/Sema/ms-keyword-system-header.c | 17 + test/Sema/ms-wchar.c | 18 + test/Sema/ms_abi-sysv_abi.c | 14 + test/Sema/ms_bitfield_layout.c | 243 + test/Sema/ms_class_layout.cpp | 88 +- test/Sema/neon-vector-types-support.c | 4 + test/Sema/neon-vector-types.c | 7 +- test/Sema/nonnull.c | 3 +- test/Sema/offsetof-64.c | 22 + test/Sema/offsetof.c | 1 + test/Sema/overloadable.c | 18 +- test/Sema/parentheses.c | 2 +- test/Sema/pragma-weak.c | 11 + test/Sema/string-init.c | 51 + test/Sema/string-plus-char.c | 15 + test/Sema/struct-decl.c | 9 + test/Sema/thread-specifier.c | 4 +- test/Sema/types.c | 8 + test/Sema/varargs.c | 7 + test/Sema/varargs.cpp | 7 + test/Sema/vfprintf-valid-redecl.c | 11 +- test/Sema/warn-documentation-fixits.cpp | 26 +- test/Sema/warn-documentation.cpp | 91 +- test/Sema/warn-documentation.m | 57 + test/Sema/warn-main-return-type.c | 4 +- test/Sema/warn-main.c | 12 +- test/Sema/warn-null.c | 11 + test/Sema/warn-outof-range-assign-enum.c | 12 + test/Sema/warn-shadow-intrinsics.c | 11 + test/Sema/warn-thread-safety-analysis.c | 123 + test/Sema/warn-type-safety.c | 4 +- test/Sema/warn-unsequenced.c | 88 + test/Sema/warn-unused-function.c | 6 +- test/Sema/warn-unused-label.c | 4 + test/Sema/warn-unused-parameters.c | 2 +- test/Sema/warn-variable-not-needed.c | 9 + test/Sema/wchar.c | 4 +- test/SemaCXX/Inputs/lit.local.cfg | 1 - test/SemaCXX/Inputs/register.h | 5 + test/SemaCXX/Inputs/warn-unused-variables.h | 2 + test/SemaCXX/MicrosoftCompatibility.cpp | 16 + test/SemaCXX/MicrosoftExtensions.cpp | 79 +- test/SemaCXX/PR10447.cpp | 4 +- test/SemaCXX/PR12778.cpp | 7 + test/SemaCXX/PR9572.cpp | 2 +- test/SemaCXX/__try.cpp | 20 + test/SemaCXX/abstract.cpp | 36 +- test/SemaCXX/access.cpp | 34 +- .../addr-of-overloaded-function-casting.cpp | 8 +- test/SemaCXX/addr-of-overloaded-function.cpp | 37 +- test/SemaCXX/alignment-of-derived-class.cpp | 41 + test/SemaCXX/alignof-sizeof-reference.cpp | 4 +- test/SemaCXX/alignof.cpp | 14 +- .../SemaCXX/ambiguous-conversion-show-overload.cpp | 2 +- test/SemaCXX/anonymous-union.cpp | 9 + test/SemaCXX/ast-print.cpp | 16 + test/SemaCXX/attr-aligned.cpp | 16 + test/SemaCXX/attr-cleanup-gcc.cpp | 16 + test/SemaCXX/attr-cleanup.cpp | 29 + test/SemaCXX/attr-common.cpp | 3 + test/SemaCXX/attr-cxx0x.cpp | 4 +- test/SemaCXX/attr-deprecated.cpp | 6 + test/SemaCXX/attr-no-sanitize-address.cpp | 2 +- test/SemaCXX/attr-no-sanitize-memory.cpp | 2 +- test/SemaCXX/attr-no-sanitize-thread.cpp | 2 +- test/SemaCXX/attr-print.cpp | 6 + test/SemaCXX/attr-selectany.cpp | 33 + test/SemaCXX/attr-used.cpp | 5 + test/SemaCXX/attr-weakref.cpp | 2 + test/SemaCXX/blocks-1.cpp | 18 +- test/SemaCXX/bool.cpp | 2 + test/SemaCXX/builtins.cpp | 22 +- test/SemaCXX/c99.cpp | 2 +- test/SemaCXX/calling-conv-compat.cpp | 387 + test/SemaCXX/captured-statements.cpp | 7 + test/SemaCXX/cast-conversion.cpp | 18 +- test/SemaCXX/class-base-member-init.cpp | 10 + test/SemaCXX/class-layout.cpp | 469 +- test/SemaCXX/class.cpp | 6 +- test/SemaCXX/compare.cpp | 67 + test/SemaCXX/complex-overload.cpp | 12 +- test/SemaCXX/compound-literal.cpp | 10 + test/SemaCXX/conditional-expr.cpp | 2 + test/SemaCXX/const-cast.cpp | 2 + test/SemaCXX/constant-expression-cxx11.cpp | 388 +- test/SemaCXX/constant-expression-cxx1y.cpp | 468 +- test/SemaCXX/constexpr-backtrace-limit.cpp | 8 +- test/SemaCXX/constexpr-duffs-device.cpp | 32 + test/SemaCXX/constexpr-steps.cpp | 17 + test/SemaCXX/constexpr-turing.cpp | 16 +- test/SemaCXX/constexpr-value-init.cpp | 2 +- test/SemaCXX/conversion-delete-expr.cpp | 24 +- test/SemaCXX/conversion-function.cpp | 4 +- test/SemaCXX/conversion-incomplete-type.cpp | 23 + test/SemaCXX/crashes.cpp | 47 + test/SemaCXX/cxx0x-class.cpp | 2 +- test/SemaCXX/cxx0x-compat.cpp | 9 + test/SemaCXX/cxx0x-initializer-aggregates.cpp | 27 +- test/SemaCXX/cxx0x-initializer-references.cpp | 25 +- .../cxx0x-initializer-stdinitializerlist.cpp | 24 +- test/SemaCXX/cxx0x-nontrivial-union.cpp | 22 + test/SemaCXX/cxx11-attr-print.cpp | 5 +- test/SemaCXX/cxx11-crashes.cpp | 4 +- test/SemaCXX/cxx11-gnu-attrs.cpp | 5 +- test/SemaCXX/cxx11-thread-local-print.cpp | 6 + test/SemaCXX/cxx1y-array-runtime-bound.cpp | 68 - .../SemaCXX/cxx1y-contextual-conversion-tweaks.cpp | 177 + test/SemaCXX/cxx1y-deduced-return-type.cpp | 152 +- test/SemaCXX/cxx1y-generic-lambdas-capturing.cpp | 1363 ++ test/SemaCXX/cxx1y-generic-lambdas.cpp | 908 + test/SemaCXX/cxx1y-init-captures.cpp | 169 + test/SemaCXX/cxx1y-sized-deallocation.cpp | 17 + test/SemaCXX/cxx1y-user-defined-literals.cpp | 44 + test/SemaCXX/cxx1y-variable-templates_in_class.cpp | 299 + .../SemaCXX/cxx1y-variable-templates_top_level.cpp | 434 + test/SemaCXX/cxx98-compat-pedantic.cpp | 18 +- test/SemaCXX/cxx98-compat.cpp | 86 +- test/SemaCXX/dcl_ambig_res.cpp | 4 +- test/SemaCXX/decl-expr-ambiguity.cpp | 1 + test/SemaCXX/decl-init-ref.cpp | 11 +- test/SemaCXX/decl-microsoft-call-conv.cpp | 143 +- test/SemaCXX/decltype.cpp | 8 + test/SemaCXX/default-assignment-operator.cpp | 8 +- test/SemaCXX/default1.cpp | 11 +- test/SemaCXX/deprecated.cpp | 67 + test/SemaCXX/destructor.cpp | 4 + test/SemaCXX/dynamic-cast.cpp | 2 + test/SemaCXX/enum-increment.cpp | 16 + test/SemaCXX/enum-scoped.cpp | 30 + test/SemaCXX/enum-unscoped-nonexistent.cpp | 4 +- test/SemaCXX/err_init_conversion_failed.cpp | 45 + test/SemaCXX/explicit.cpp | 91 +- test/SemaCXX/expression-traits.cpp | 4 +- test/SemaCXX/extern-c.cpp | 174 +- test/SemaCXX/flexible-array-test.cpp | 4 + test/SemaCXX/for-range-examples.cpp | 31 +- test/SemaCXX/format-strings-0x.cpp | 4 + test/SemaCXX/friend.cpp | 138 +- test/SemaCXX/function-pointer-arguments.cpp | 52 + test/SemaCXX/function-redecl.cpp | 18 +- test/SemaCXX/function-type-qual.cpp | 8 + test/SemaCXX/gnu-flags.cpp | 76 + test/SemaCXX/i-c-e-cxx.cpp | 2 +- test/SemaCXX/implicit-virtual-member-functions.cpp | 6 +- test/SemaCXX/inherit.cpp | 3 + test/SemaCXX/init-priority-attr.cpp | 4 +- test/SemaCXX/lambda-expressions.cpp | 65 +- .../libstdcxx_pointer_return_false_hack.cpp | 34 + test/SemaCXX/linkage-spec.cpp | 61 +- test/SemaCXX/linkage2.cpp | 55 +- test/SemaCXX/member-expr.cpp | 54 +- test/SemaCXX/member-init.cpp | 11 + test/SemaCXX/member-pointer-ms.cpp | 5 +- test/SemaCXX/microsoft-dtor-lookup.cpp | 87 + test/SemaCXX/microsoft-new-delete.cpp | 12 + test/SemaCXX/missing-members.cpp | 10 +- ...issing-namespace-qualifier-typo-corrections.cpp | 8 +- test/SemaCXX/ms-overload-entry-point.cpp | 21 + test/SemaCXX/ms-wchar.cpp | 12 + test/SemaCXX/ms_struct.cpp | 18 + test/SemaCXX/ms_wide_bitfield.cpp | 9 + test/SemaCXX/neon-vector-types.cpp | 2 +- test/SemaCXX/nested-name-spec.cpp | 22 +- test/SemaCXX/new-delete-0x.cpp | 4 +- test/SemaCXX/new-delete.cpp | 15 +- test/SemaCXX/no-rtti.cpp | 19 + test/SemaCXX/no-warn-unused-const-variables.cpp | 6 + test/SemaCXX/nullptr.cpp | 3 + test/SemaCXX/offsetof.cpp | 10 + test/SemaCXX/operator-arrow-depth.cpp | 26 + test/SemaCXX/overload-decl.cpp | 8 +- test/SemaCXX/overloaded-operator.cpp | 20 +- test/SemaCXX/parentheses.cpp | 8 + test/SemaCXX/pr13394-crash-on-invalid.cpp | 17 +- test/SemaCXX/predefined-expr.cpp | 103 + test/SemaCXX/qualified-id-lookup.cpp | 6 +- test/SemaCXX/references.cpp | 7 + test/SemaCXX/scope-check.cpp | 21 + test/SemaCXX/self-comparison.cpp | 23 + test/SemaCXX/static-data-member.cpp | 17 + test/SemaCXX/storage-class.cpp | 2 +- test/SemaCXX/string-init.cpp | 40 + test/SemaCXX/string-plus-char.cpp | 32 + test/SemaCXX/struct-class-redecl.cpp | 2 +- test/SemaCXX/switch.cpp | 15 + test/SemaCXX/trailing-return-0x.cpp | 8 + test/SemaCXX/type-traits.cpp | 65 +- test/SemaCXX/typo-correction-pt2.cpp | 201 + test/SemaCXX/typo-correction.cpp | 96 +- test/SemaCXX/uninitialized.cpp | 211 +- test/SemaCXX/unknown-type-name.cpp | 4 +- test/SemaCXX/using-decl-1.cpp | 42 + test/SemaCXX/using-decl-templates.cpp | 14 +- test/SemaCXX/vararg-non-pod.cpp | 50 +- test/SemaCXX/vector.cpp | 19 +- test/SemaCXX/virtual-base-used.cpp | 8 +- .../virtual-member-functions-key-function.cpp | 4 +- test/SemaCXX/virtual-override-x86.cpp | 4 +- test/SemaCXX/virtuals.cpp | 6 + test/SemaCXX/warn-consumed-analysis.cpp | 795 + test/SemaCXX/warn-consumed-parsing.cpp | 55 + test/SemaCXX/warn-dangling-field.cpp | 16 +- test/SemaCXX/warn-div-or-rem-by-zero.cpp | 21 + test/SemaCXX/warn-empty-body.cpp | 5 + test/SemaCXX/warn-func-not-needed.cpp | 9 + test/SemaCXX/warn-global-constructors.cpp | 6 + test/SemaCXX/warn-logical-not-compare.cpp | 194 + test/SemaCXX/warn-loop-analysis.cpp | 108 + test/SemaCXX/warn-member-not-needed.cpp | 11 + .../SemaCXX/warn-missing-variable-declarations.cpp | 6 + test/SemaCXX/warn-reinterpret-base-class.cpp | 2 +- test/SemaCXX/warn-thread-safety-analysis.cpp | 413 +- test/SemaCXX/warn-thread-safety-parsing.cpp | 60 +- test/SemaCXX/warn-unreachable.cpp | 4 +- test/SemaCXX/warn-unsequenced.cpp | 14 +- test/SemaCXX/warn-unused-attribute.cpp | 20 + test/SemaCXX/warn-unused-filescoped.cpp | 81 +- test/SemaCXX/warn-unused-private-field.cpp | 2 +- test/SemaCXX/warn-unused-result.cpp | 16 + test/SemaCXX/warn-unused-value.cpp | 20 + test/SemaCXX/warn-unused-variables.cpp | 25 +- test/SemaCXX/warn-using-namespace-in-header.cpp | 9 + test/SemaCXX/writable-strings-deprecated.cpp | 4 + test/SemaObjC/arc-bridged-cast.m | 2 +- test/SemaObjC/arc-cf.m | 12 + test/SemaObjC/arc-decls.m | 24 + test/SemaObjC/arc-dict-bridged-cast.m | 2 +- test/SemaObjC/arc-property-lifetime.m | 32 +- test/SemaObjC/arc-readonly-property-ivar-1.m | 4 +- test/SemaObjC/arc-repeated-weak.mm | 15 + test/SemaObjC/arc-unavailable-for-weakref.m | 4 + test/SemaObjC/arc.m | 19 +- test/SemaObjC/attr-objc-exception.m | 4 +- test/SemaObjC/attr-objc-gc.m | 6 +- test/SemaObjC/attr-print.m | 9 + test/SemaObjC/attr-root-class.m | 6 +- test/SemaObjC/bad-property-synthesis-crash.m | 2 +- test/SemaObjC/blocks.m | 15 + test/SemaObjC/call-super-2.m | 6 +- test/SemaObjC/class-def-test-1.m | 5 +- test/SemaObjC/compare-qualified-id.m | 2 +- test/SemaObjC/conditional-expr.m | 3 +- test/SemaObjC/conversion.m | 17 + test/SemaObjC/dealloc.m | 2 +- test/SemaObjC/default-synthesize-1.m | 2 +- test/SemaObjC/default-synthesize-2.m | 4 +- test/SemaObjC/default-synthesize-3.m | 74 +- test/SemaObjC/default-synthesize.m | 2 +- test/SemaObjC/deprecated-objc-introspection.m | 7 + test/SemaObjC/direct-synthesized-ivar-access.m | 2 +- test/SemaObjC/error-outof-scope-property-use.m | 8 +- test/SemaObjC/foreach.m | 6 +- test/SemaObjC/format-arg-attribute.m | 34 +- test/SemaObjC/format-strings-objc.m | 7 + .../forward-protocol-incomplete-impl-warn.m | 2 +- test/SemaObjC/iboutlet.m | 4 +- test/SemaObjC/iboutletcollection-attr.m | 17 +- test/SemaObjC/idiomatic-parentheses.m | 7 + test/SemaObjC/instancetype.m | 2 +- test/SemaObjC/ivar-lookup.m | 74 + test/SemaObjC/ivar-ref-misuse.m | 5 +- test/SemaObjC/message.m | 2 +- test/SemaObjC/method-bad-param.m | 14 + test/SemaObjC/method-conflict-2.m | 49 + test/SemaObjC/method-not-defined.m | 2 +- test/SemaObjC/method-sentinel-attr.m | 2 +- test/SemaObjC/missing-atend-metadata.m | 2 +- test/SemaObjC/nsobject-attribute.m | 2 + test/SemaObjC/objc-array-literal.m | 16 + test/SemaObjC/objc-dictionary-literal.m | 2 + test/SemaObjC/objcbridge-attribute.m | 66 + .../overriding-property-in-class-extension.m | 3 +- test/SemaObjC/property-5.m | 2 +- test/SemaObjC/property-ambiguous-synthesis.m | 48 + test/SemaObjC/property-category-1.m | 2 +- test/SemaObjC/property-choose-expr.m | 14 + test/SemaObjC/property-in-class-extension-1.m | 9 +- test/SemaObjC/property-ownership-attr.m | 19 + test/SemaObjC/protocol-id-test-1.m | 4 +- test/SemaObjC/protocol-id-test-2.m | 2 +- test/SemaObjC/provisional-ivar-lookup.m | 2 +- test/SemaObjC/related-result-type-inference.m | 18 +- test/SemaObjC/selector-3.m | 35 +- test/SemaObjC/self-comparison.m | 12 + test/SemaObjC/sign-conversion.m | 39 + test/SemaObjC/super-class-protocol-conformance.m | 2 +- test/SemaObjC/super-dealloc-attribute.m | 49 +- test/SemaObjC/super-property-notation.m | 2 +- test/SemaObjC/synth-provisional-ivars-1.m | 2 +- test/SemaObjC/synth-provisional-ivars.m | 2 +- test/SemaObjC/synthesized-ivar.m | 2 +- test/SemaObjC/tentative-property-decl.m | 4 +- test/SemaObjC/unimplemented-protocol-prop.m | 2 +- test/SemaObjC/unsued-backing-ivar-warning.m | 76 + test/SemaObjC/warn-direct-ivar-access.m | 2 +- test/SemaObjC/warn-implicit-atomic-property.m | 2 +- test/SemaObjC/warn-missing-super.m | 2 +- test/SemaObjC/warn-retain-block-property.m | 4 +- test/SemaObjCXX/abstract-class-type-ivar.mm | 4 + test/SemaObjCXX/arc-nsconsumed-errors.mm | 5 +- test/SemaObjCXX/arc-templates.mm | 10 + test/SemaObjCXX/contextual-convert-to-id.mm | 33 + test/SemaObjCXX/exceptions.mm | 11 + test/SemaObjCXX/instancetype.mm | 2 +- test/SemaObjCXX/ivar-construct.mm | 2 +- test/SemaObjCXX/microsoft-abi-byval.mm | 14 + test/SemaObjCXX/missing-lhs-gun-extension.mm | 23 + test/SemaObjCXX/overload-1.mm | 25 - test/SemaObjCXX/overload.mm | 17 +- test/SemaObjCXX/properties.mm | 39 + test/SemaObjCXX/property-synthesis-error.mm | 2 +- test/SemaOpenCL/endian-attr.cl | 8 +- test/SemaOpenCL/event_t.cl | 3 +- test/SemaOpenCL/invalid-kernel-attrs.cl | 4 +- test/SemaOpenCL/invalid-kernel-parameters.cl | 132 + test/SemaOpenCL/invalid-kernel.cl | 10 +- test/SemaOpenCL/str_literals.cl | 13 + test/SemaOpenCL/vector_inc_dec_ops.cl | 19 + test/SemaTemplate/alias-nested-nontag.cpp | 3 +- test/SemaTemplate/alias-templates.cpp | 35 + test/SemaTemplate/array-to-pointer-decay.cpp | 12 + test/SemaTemplate/canonical-expr-type.cpp | 6 +- test/SemaTemplate/class-template-decl.cpp | 4 +- test/SemaTemplate/constexpr-instantiate.cpp | 4 +- test/SemaTemplate/deduction-crash.cpp | 36 +- test/SemaTemplate/default-arguments-cxx0x.cpp | 31 + test/SemaTemplate/default-arguments.cpp | 39 +- test/SemaTemplate/dependent-expr.cpp | 21 + test/SemaTemplate/dependent-names.cpp | 13 +- test/SemaTemplate/derived.cpp | 24 + test/SemaTemplate/destructor-template.cpp | 8 +- test/SemaTemplate/exception-spec-crash.cpp | 30 + test/SemaTemplate/explicit-instantiation.cpp | 58 +- .../explicit-specialization-member.cpp | 28 + test/SemaTemplate/extension-sfinae.cpp | 12 + test/SemaTemplate/friend-template.cpp | 17 +- .../function-template-specialization-noreturn.cpp | 8 + .../function-template-specialization.cpp | 12 +- .../instantiate-exception-spec-cxx11.cpp | 13 +- test/SemaTemplate/instantiate-expr-5.cpp | 10 + test/SemaTemplate/instantiate-function-params.cpp | 17 +- test/SemaTemplate/instantiate-init.cpp | 15 + test/SemaTemplate/instantiate-local-class.cpp | 117 +- test/SemaTemplate/instantiate-member-class.cpp | 2 - test/SemaTemplate/instantiate-member-pointers.cpp | 9 +- .../instantiate-overload-candidates.cpp | 2 +- test/SemaTemplate/instantiate-partial-spec.cpp | 23 + test/SemaTemplate/instantiate-using-decl.cpp | 24 + test/SemaTemplate/local-member-templates.cpp | 76 - test/SemaTemplate/lookup-dependent-bases.cpp | 2 +- .../ms-class-specialization-class-scope.cpp | 49 + .../ms-lookup-template-base-classes.cpp | 40 + test/SemaTemplate/nested-template.cpp | 1 + test/SemaTemplate/overload-candidates.cpp | 45 + test/SemaTemplate/recovery-crash.cpp | 19 + test/SemaTemplate/resolve-single-template-id.cpp | 4 +- test/SemaTemplate/temp_arg_nontype.cpp | 34 +- test/SemaTemplate/temp_arg_template.cpp | 11 + test/SemaTemplate/virtual-member-functions.cpp | 14 +- test/Tooling/Inputs/lit.local.cfg | 1 - .../auto-detect-from-source-parent-of-cwd.cpp | 6 +- test/Tooling/auto-detect-from-source-parent.cpp | 2 +- test/Tooling/auto-detect-from-source.cpp | 2 +- test/Tooling/clang-check-analyzer.cpp | 4 + test/Tooling/clang-check-args.cpp | 2 +- test/Tooling/clang-check-autodetect-dir.cpp | 2 +- test/Tooling/clang-check-builtin-headers.cpp | 2 +- test/Tooling/clang-check-chdir.cpp | 2 +- test/Tooling/clang-check-extra-arg.cpp | 5 + test/Tooling/clang-check-pwd.cpp | 6 +- test/Tooling/clang-check-rel-path.cpp | 10 + test/Tooling/clang-check-strip-o.cpp | 11 + test/Tooling/clang-check.cpp | 2 +- test/Tooling/ms-asm-no-target.cpp | 13 + test/Tooling/multi-jobs.cpp | 5 +- test/Unit/lit.cfg | 17 +- test/Unit/lit.site.cfg.in | 15 +- test/lit.cfg | 119 +- test/lit.site.cfg.in | 17 +- 2617 files changed, 128577 insertions(+), 9712 deletions(-) create mode 100644 test/.clang-format create mode 100644 test/ARCMT/checking-in-arc.m create mode 100644 test/ARCMT/lit.local.cfg create mode 100644 test/ARCMT/objcmt-arc-cf-annotations.m create mode 100644 test/ARCMT/objcmt-arc-cf-annotations.m.result create mode 100644 test/ARCMT/objcmt-atomic-property.m create mode 100644 test/ARCMT/objcmt-atomic-property.m.result create mode 100644 test/ARCMT/objcmt-deprecated-category.m create mode 100644 test/ARCMT/objcmt-deprecated-category.m.result create mode 100644 test/ARCMT/objcmt-instancetype-2.m create mode 100644 test/ARCMT/objcmt-instancetype-2.m.result create mode 100644 test/ARCMT/objcmt-instancetype.m create mode 100644 test/ARCMT/objcmt-instancetype.m.result create mode 100644 test/ARCMT/objcmt-migrate-all.m create mode 100644 test/ARCMT/objcmt-migrate-all.m.result create mode 100644 test/ARCMT/objcmt-ns-macros.m create mode 100644 test/ARCMT/objcmt-ns-macros.m.result create mode 100644 test/ARCMT/objcmt-ns-nonatomic-iosonly.m create mode 100644 test/ARCMT/objcmt-ns-nonatomic-iosonly.m.result create mode 100644 test/ARCMT/objcmt-ns-returns-inner-pointer.m create mode 100644 test/ARCMT/objcmt-ns-returns-inner-pointer.m.result create mode 100644 test/ARCMT/objcmt-property-availability.m create mode 100644 test/ARCMT/objcmt-property-availability.m.result create mode 100644 test/ARCMT/objcmt-property.m create mode 100644 test/ARCMT/objcmt-property.m.result create mode 100644 test/ARCMT/objcmt-protocol-conformance.m create mode 100644 test/ARCMT/objcmt-protocol-conformance.m.result create mode 100644 test/ARCMT/whitelisted/Inputs/header1.h create mode 100644 test/ARCMT/whitelisted/header1.h create mode 100644 test/ARCMT/whitelisted/header1.h.result create mode 100644 test/ARCMT/whitelisted/header2.h create mode 100644 test/ARCMT/whitelisted/header2.h.result create mode 100644 test/ARCMT/whitelisted/objcmt-with-whitelist.m delete mode 100644 test/ARCMT/with-arc-mode-check.m delete mode 100644 test/ARCMT/with-arc-mode-migrate.m delete mode 100644 test/ARCMT/with-arc-mode-migrate.m.result delete mode 100644 test/ASTMerge/Inputs/lit.local.cfg create mode 100644 test/Analysis/builtin-functions.cpp create mode 100644 test/Analysis/casts.cpp delete mode 100644 test/Analysis/conditional-operator-path-notes.c create mode 100644 test/Analysis/conditional-path-notes.c create mode 100644 test/Analysis/crash-trace.c delete mode 100644 test/Analysis/ctor-inlining.mm create mode 100644 test/Analysis/ctor.mm create mode 100644 test/Analysis/cxx-for-range.cpp create mode 100644 test/Analysis/diagnostics/Inputs/include/report-issues-within-main-file.h create mode 100644 test/Analysis/diagnostics/report-issues-within-main-file.cpp create mode 100644 test/Analysis/diagnostics/text-diagnostics.c create mode 100644 test/Analysis/edges-new.mm create mode 100644 test/Analysis/identical-expressions.cpp create mode 100644 test/Analysis/lit.local.cfg create mode 100644 test/Analysis/live-variables.cpp create mode 100644 test/Analysis/live-variables.m create mode 100644 test/Analysis/plist-macros.cpp create mode 100644 test/Analysis/ptr-arith.cpp create mode 100644 test/Analysis/weak-functions.c create mode 100644 test/CXX/basic/basic.link/p7.cpp create mode 100644 test/CXX/class.derived/class.member.lookup/p7.cpp create mode 100644 test/CXX/dcl.dcl/dcl.attr/dcl.attr.deprecated/p1.cpp create mode 100644 test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p12-1y.cpp create mode 100644 test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p3-generic-lambda-1y.cpp delete mode 100644 test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p6-1y.cpp create mode 100644 test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-1y.cpp create mode 100644 test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp create mode 100644 test/CXX/drs/dr0xx.cpp create mode 100644 test/CXX/drs/dr1xx.cpp create mode 100644 test/CXX/drs/dr2xx.cpp create mode 100644 test/CXX/drs/dr4xx.cpp create mode 100644 test/CXX/expr/expr.prim/expr.prim.lambda/generic-lambda-unimplemented-1y.cpp create mode 100644 test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp create mode 100644 test/CXX/expr/expr.prim/expr.prim.lambda/p2-generic-lambda-1y.cpp create mode 100644 test/CXX/expr/expr.prim/expr.prim.lambda/p4-1y.cpp create mode 100644 test/CXX/expr/expr.prim/expr.prim.lambda/p5-generic-lambda-1y.cpp create mode 100644 test/CXX/lex/lex.literal/lex.ext/p11.cpp create mode 100644 test/CXX/lex/lex.literal/lex.ext/p12.cpp create mode 100644 test/CXX/temp/temp.decls/temp.class.spec/p8-1y.cpp create mode 100644 test/CXX/temp/temp.decls/temp.mem/p2.cpp create mode 100644 test/CXX/temp/temp.decls/temp.variadic/sizeofpack.cpp create mode 100644 test/CXX/temp/temp.res/temp.local/p6.cpp create mode 100644 test/CXX/temp/temp.spec/cxx1y-variable-template-no-body.cpp create mode 100644 test/CXX/temp/temp.spec/no-body.cpp delete mode 100644 test/CodeGen/2004-11-27-InvalidConstantExpr.c delete mode 100644 test/CodeGen/2007-03-05-DataLayout.c delete mode 100644 test/CodeGen/2008-01-11-ChainConsistency.c create mode 100644 test/CodeGen/PR15826.c create mode 100644 test/CodeGen/aarch64-neon-2velem.c create mode 100644 test/CodeGen/aarch64-neon-across.c create mode 100644 test/CodeGen/aarch64-neon-copy.c create mode 100644 test/CodeGen/aarch64-neon-crypto.c create mode 100644 test/CodeGen/aarch64-neon-extract.c create mode 100644 test/CodeGen/aarch64-neon-fcvt-intrinsics.c create mode 100644 test/CodeGen/aarch64-neon-intrinsics.c create mode 100644 test/CodeGen/aarch64-neon-ldst-one.c create mode 100644 test/CodeGen/aarch64-neon-misc.c create mode 100644 test/CodeGen/aarch64-neon-perm.c create mode 100644 test/CodeGen/aarch64-neon-scalar-copy.c create mode 100644 test/CodeGen/aarch64-neon-scalar-x-indexed-elem.c create mode 100644 test/CodeGen/aarch64-neon-shifts.c create mode 100644 test/CodeGen/aarch64-neon-tbl.c create mode 100644 test/CodeGen/aarch64-neon-vcombine.c create mode 100644 test/CodeGen/aarch64-neon-vget-hilo.c create mode 100644 test/CodeGen/aarch64-poly64.c create mode 100644 test/CodeGen/align-x68_64.c create mode 100644 test/CodeGen/arm-crc32.c create mode 100644 test/CodeGen/arm-interrupt-attr.c create mode 100644 test/CodeGen/arm-neon-shifts.c create mode 100644 test/CodeGen/arm-neon-vget.c create mode 100644 test/CodeGen/arm_neon_intrinsics.c create mode 100644 test/CodeGen/big-atomic-ops.c delete mode 100644 test/CodeGen/blocks-2.c create mode 100644 test/CodeGen/branch-on-bool.c create mode 100644 test/CodeGen/builtins-arm-exclusive.c create mode 100644 test/CodeGen/builtins-mips-msa.c create mode 100644 test/CodeGen/builtins-ms.c create mode 100644 test/CodeGen/builtins-overflow.c create mode 100644 test/CodeGen/captured-statements-nested.c create mode 100644 test/CodeGen/captured-statements.c create mode 100644 test/CodeGen/convertvector.c create mode 100644 test/CodeGen/debug-info-block-decl.c delete mode 100644 test/CodeGen/debug-info-enum.c create mode 100644 test/CodeGen/debug-info-limited.c create mode 100644 test/CodeGen/debug-info-version.c create mode 100644 test/CodeGen/dependent-lib.c create mode 100644 test/CodeGen/dwarf-version.c create mode 100644 test/CodeGen/exceptions-seh.c create mode 100644 test/CodeGen/le32-libcall-pow.c create mode 100644 test/CodeGen/mangle-windows-rtd.c create mode 100644 test/CodeGen/mangle-windows.c create mode 100644 test/CodeGen/mmx-inline-asm-error.c create mode 100644 test/CodeGen/ms_abi.c create mode 100644 test/CodeGen/nomathbuiltin.c create mode 100644 test/CodeGen/nvptx-abi.c create mode 100644 test/CodeGen/nvptx-inlineasm-ptx.c create mode 100644 test/CodeGen/ppc64-struct-onevect.c create mode 100644 test/CodeGen/pragma-comment.c create mode 100644 test/CodeGen/pragma-detect_mismatch.c create mode 100644 test/CodeGen/sections.c create mode 100644 test/CodeGen/sha-builtins.c create mode 100644 test/CodeGen/sparcv9-abi.c create mode 100644 test/CodeGen/tbaa-ms-abi.cpp create mode 100644 test/CodeGen/tbaa-thread-sanitizer.cpp create mode 100644 test/CodeGen/tbm-builtins.c create mode 100644 test/CodeGen/volatile-complex.c create mode 100644 test/CodeGen/x86_32-fpcc-struct-return.c create mode 100644 test/CodeGen/xcore-abi.c delete mode 100644 test/CodeGenCXX/2005-02-14-BitFieldOffset.cpp create mode 100644 test/CodeGenCXX/aarch64-mangle-neon-vectors.cpp create mode 100644 test/CodeGenCXX/aarch64-neon.cpp create mode 100644 test/CodeGenCXX/arm-vaarg.cpp create mode 100644 test/CodeGenCXX/attr-cleanup.cpp create mode 100644 test/CodeGenCXX/captured-statements.cpp create mode 100644 test/CodeGenCXX/catch-undef-behavior2.cpp create mode 100644 test/CodeGenCXX/const-init-cxx1y.cpp create mode 100644 test/CodeGenCXX/crash.cpp create mode 100644 test/CodeGenCXX/ctor-dtor-alias.cpp create mode 100644 test/CodeGenCXX/cxx11-initializer-array-new.cpp create mode 100644 test/CodeGenCXX/cxx1y-deduced-return-type.cpp create mode 100644 test/CodeGenCXX/cxx1y-init-captures.cpp create mode 100644 test/CodeGenCXX/cxx1y-sized-deallocation.cpp create mode 100644 test/CodeGenCXX/cxx1y-variable-template.cpp create mode 100644 test/CodeGenCXX/debug-info-class-limited.cpp create mode 100644 test/CodeGenCXX/debug-info-class-nolimit.cpp create mode 100644 test/CodeGenCXX/debug-info-cxx1y.cpp create mode 100644 test/CodeGenCXX/debug-info-decl-nested.cpp create mode 100644 test/CodeGenCXX/debug-info-function-context.cpp delete mode 100644 test/CodeGenCXX/debug-info-limit-type.cpp delete mode 100644 test/CodeGenCXX/debug-info-limit.cpp create mode 100644 test/CodeGenCXX/debug-info-limited.cpp create mode 100644 test/CodeGenCXX/debug-info-scope.cpp create mode 100644 test/CodeGenCXX/debug-info-uuid.cpp create mode 100644 test/CodeGenCXX/delayed-template-parsing.cpp create mode 100644 test/CodeGenCXX/dynamic_cast-no-rtti.cpp create mode 100644 test/CodeGenCXX/empty-nontrivially-copyable.cpp create mode 100644 test/CodeGenCXX/invalid.cpp create mode 100644 test/CodeGenCXX/lambda-expressions-inside-auto-functions.cpp create mode 100644 test/CodeGenCXX/lambda-expressions-nested-linkage.cpp create mode 100644 test/CodeGenCXX/linkage.cpp create mode 100644 test/CodeGenCXX/lpad-linetable.cpp create mode 100644 test/CodeGenCXX/mangle-windows.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-alignment-fail.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-constexpr-vs-inheritance.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-exceptions.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-multiple-nonvirtual-inheritance.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-structors-alias.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-thunks.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-vbtables.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-virtual-inheritance-vtordisps.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-virtual-inheritance.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-virtual-member-pointers.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance-vtordisps.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp create mode 100644 test/CodeGenCXX/microsoft-new.cpp delete mode 100644 test/CodeGenCXX/microsoft-uuidof-unsupported-target.cpp create mode 100644 test/CodeGenCXX/move-assignment.cpp create mode 100644 test/CodeGenCXX/ms-integer-static-data-members.cpp create mode 100644 test/CodeGenCXX/new-alias.cpp create mode 100644 test/CodeGenCXX/noexcept.cpp delete mode 100644 test/CodeGenCXX/pr11676.cpp create mode 100644 test/CodeGenCXX/static-init-4.cpp create mode 100644 test/CodeGenCXX/static-init-pnacl.cpp create mode 100644 test/CodeGenObjC/arc-linetable-autorelease.m create mode 100644 test/CodeGenObjC/block-byref-debuginfo.m create mode 100644 test/CodeGenObjC/debug-info-instancetype.m create mode 100644 test/CodeGenObjC/debug-info-lifetime-crash.m create mode 100644 test/CodeGenObjC/debug-info-property-accessors.m create mode 100644 test/CodeGenObjC/debuginfo-properties.m create mode 100644 test/CodeGenObjC/designated-initializers.m create mode 100644 test/CodeGenObjC/null-objc-empty-vtable.m create mode 100644 test/CodeGenObjC/stret_lookup.m create mode 100644 test/CodeGenOpenCL/address-spaces-mangling.cl create mode 100644 test/CodeGenOpenCL/str_literals.cl create mode 100644 test/CodeGenOpenCL/vector_odd.cl create mode 100755 test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-as create mode 120000 test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-ld create mode 100755 test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-ld.bfd create mode 100755 test/Driver/Inputs/basic_cross_linux_tree/usr/bin/i386-unknown-linux-gnu-ld.gold create mode 100755 test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-as create mode 120000 test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld create mode 100755 test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld.bfd create mode 100755 test/Driver/Inputs/basic_cross_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld.gold create mode 100755 test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/as create mode 120000 test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/ld create mode 100755 test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/ld.bfd create mode 100755 test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/bin/ld.gold create mode 100644 test/Driver/Inputs/basic_cross_linux_tree/usr/i386-unknown-linux-gnu/lib/.keep create mode 100644 test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/i386-unknown-linux-gnu/4.6.0/crtbegin.o create mode 100644 test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/crtbegin.o create mode 100644 test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/crtbeginT.o create mode 100644 test/Driver/Inputs/basic_cross_linux_tree/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/crtfastmath.o create mode 100755 test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/as create mode 120000 test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/ld create mode 100755 test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/ld.bfd create mode 100755 test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/bin/ld.gold create mode 100644 test/Driver/Inputs/basic_cross_linux_tree/usr/x86_64-unknown-linux-gnu/lib/.keep create mode 100644 test/Driver/Inputs/basic_netbsd_tree/usr/lib/crt0.o create mode 100644 test/Driver/Inputs/basic_netbsd_tree/usr/lib/crtbegin.o create mode 100644 test/Driver/Inputs/basic_netbsd_tree/usr/lib/crtbeginS.o create mode 100644 test/Driver/Inputs/basic_netbsd_tree/usr/lib/crtend.o create mode 100644 test/Driver/Inputs/basic_netbsd_tree/usr/lib/crtendS.o create mode 100644 test/Driver/Inputs/basic_netbsd_tree/usr/lib/crti.o create mode 100644 test/Driver/Inputs/basic_netbsd_tree/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/debian_multiarch_tree/lib/i386-linux-gnu/libtest.so create mode 100644 test/Driver/Inputs/file.prof create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_4.6.2_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.2/crtbegin.o create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_4.6.2_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.2/include/g++-v4/.keep create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_4.6.2_tree/usr/x86_64-pc-linux-gnu/lib/.keep create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_4.6.4_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.4/crtbegin.o create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_4.6.4_tree/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.4/include/g++-v4.6/.keep create mode 100644 test/Driver/Inputs/gentoo_linux_gcc_4.6.4_tree/usr/x86_64-pc-linux-gnu/lib/.keep delete mode 100644 test/Driver/Inputs/lit.local.cfg create mode 100644 test/Driver/Inputs/mips_fsf_tree/bin/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/el/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/el/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/el/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/el/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/el/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/el/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/el/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/el/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/el/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/el/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/include-fixed/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/include/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/el/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/el/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/el/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/el/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/el/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/el/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/el/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/el/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/el/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/el/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/el/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/el/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/el/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/el/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/el/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/el/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/el/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/el/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/el/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/el/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/el/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/el/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/el/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/el/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/el/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/el/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/el/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/el/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/el/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/el/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/el/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/el/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/el/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/el/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/el/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/el/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/el/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/el/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/el/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/el/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/el/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/el/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/el/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/el/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/el/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/el/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/el/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/el/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/el/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/el/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/el/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/el/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/el/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/el/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/el/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/el/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/el/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/el/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/el/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/el/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/el/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/el/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/el/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/el/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/el/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/el/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/el/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/el/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/el/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/el/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/el/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/el/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/el/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/el/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/el/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/el/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/el/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/el/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/el/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/el/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/fp64/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/fp64/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/fp64/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/fp64/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/nan2008/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/nan2008/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/sof/crtbegin.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/sof/crtend.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/backward/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/el/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/el/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/el/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/el/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/micromips/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/micromips/el/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/micromips/el/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/micromips/el/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/micromips/el/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/micromips/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/micromips/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/micromips/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips16/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips16/el/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips16/el/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips16/el/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips16/el/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips16/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips16/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips16/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/el/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/el/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/el/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/el/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/mips16/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/mips16/el/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/mips16/el/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/mips16/el/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/mips16/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/mips16/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/64/el/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/64/el/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/64/el/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/64/el/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/64/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/64/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/64/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/el/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/el/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/el/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/el/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/64/el/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/64/el/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/64/el/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/64/el/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/64/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/64/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/64/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/el/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/el/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/el/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/el/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/fp64/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/nan2008/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/sof/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/el/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/el/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/el/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/micromips/el/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/micromips/el/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/micromips/el/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/micromips/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/micromips/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/micromips/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips16/el/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips16/el/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips16/el/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips16/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips16/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips16/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/el/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/el/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/el/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/mips16/el/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/mips16/el/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/mips16/el/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/mips16/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/mips16/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/mips16/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64/64/el/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64/64/el/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64/64/el/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64/64/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64/64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64/64/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64/el/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64/el/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64/el/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64r2/64/el/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64r2/64/el/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64r2/64/el/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64r2/64/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64r2/64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64r2/64/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64r2/el/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64r2/el/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64r2/el/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64r2/fp64/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64r2/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64r2/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/nan2008/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/sof/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/el/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/el/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/el/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/el/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/el/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/el/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/el/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/el/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/el/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/el/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/el/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/el/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/el/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/el/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/el/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/el/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/el/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/el/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/el/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/el/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/el/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/el/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/el/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/el/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/el/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/el/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/el/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/el/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/el/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/el/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/nan2008/usr/inclide/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/sof/usr/inclide/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/usr/inclide/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/micromips/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/el/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/el/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/el/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/el/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/el/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/el/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/el/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/el/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/el/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/el/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/el/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/el/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/el/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/el/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/el/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips16/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/el/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/el/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/el/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/el/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/el/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/el/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/el/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/el/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/el/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/el/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/el/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/el/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/el/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/el/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/el/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/el/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/el/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/el/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/el/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/el/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/el/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/el/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/el/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/el/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/el/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/el/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/el/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/el/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/el/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/el/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/mips16/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips32/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/el/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/el/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/el/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/el/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/el/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/el/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/el/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/el/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/el/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/el/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/el/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/el/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/el/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/el/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/el/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/el/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/el/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/el/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/el/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/el/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/el/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/el/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/el/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/el/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/el/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/el/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/el/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/el/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/el/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/el/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/el/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/el/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/el/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/el/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/el/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/el/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/el/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/el/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/el/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/el/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/el/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/el/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/el/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/el/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/el/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/el/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/el/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/el/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/el/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/el/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/el/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/el/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/el/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/el/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/el/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/el/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/el/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/el/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/el/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/el/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/fp64/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/fp64/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/fp64/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/fp64/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/fp64/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/fp64/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/mips64r2/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/nan2008/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/nan2008/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/nan2008/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/sof/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/sof/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/sof/usr/lib/crtn.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/usr/include/bits/.keep create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/usr/lib/crt1.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/usr/lib/crti.o create mode 100644 test/Driver/Inputs/mips_fsf_tree/sysroot/usr/lib/crtn.o create mode 120000 test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/as create mode 100755 test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/i386-unknown-linux-gnu-as create mode 100755 test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/i386-unknown-linux-gnu-ld create mode 120000 test/Driver/Inputs/multilib_32bit_linux_tree/usr/bin/ld create mode 120000 test/Driver/Inputs/multilib_32bit_linux_tree/usr/i386-unknown-linux/bin/as create mode 120000 test/Driver/Inputs/multilib_32bit_linux_tree/usr/i386-unknown-linux/bin/ld create mode 120000 test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/as create mode 120000 test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/ld create mode 100755 test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/x86_64-unknown-linux-gnu-as create mode 100755 test/Driver/Inputs/multilib_64bit_linux_tree/usr/bin/x86_64-unknown-linux-gnu-ld create mode 120000 test/Driver/Inputs/multilib_64bit_linux_tree/usr/x86_64-unknown-linux/bin/as create mode 120000 test/Driver/Inputs/multilib_64bit_linux_tree/usr/x86_64-unknown-linux/bin/ld create mode 100644 test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/crtbegin.o create mode 100644 test/Driver/Inputs/x86-64_ubuntu_13.10/lib/.keep create mode 100644 test/Driver/Inputs/x86-64_ubuntu_13.10/usr/arm-linux-gnueabi/lib/crt1.o create mode 100644 test/Driver/Inputs/x86-64_ubuntu_13.10/usr/arm-linux-gnueabi/lib/crti.o create mode 100644 test/Driver/Inputs/x86-64_ubuntu_13.10/usr/arm-linux-gnueabi/lib/crtn.o create mode 100644 test/Driver/Inputs/x86-64_ubuntu_13.10/usr/arm-linux-gnueabihf/lib/crt1.o create mode 100644 test/Driver/Inputs/x86-64_ubuntu_13.10/usr/arm-linux-gnueabihf/lib/crti.o create mode 100644 test/Driver/Inputs/x86-64_ubuntu_13.10/usr/arm-linux-gnueabihf/lib/crtn.o create mode 100644 test/Driver/Inputs/x86-64_ubuntu_13.10/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/crtbegin.o create mode 100644 test/Driver/Inputs/x86-64_ubuntu_13.10/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/crtend.o create mode 100644 test/Driver/Inputs/x86-64_ubuntu_13.10/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/crtbegin.o create mode 100644 test/Driver/Inputs/x86-64_ubuntu_13.10/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/crtend.o create mode 100644 test/Driver/O.c create mode 100644 test/Driver/aarch64-cpus.c create mode 100644 test/Driver/aarch64-mfpu.c create mode 100644 test/Driver/altivec-asm.S create mode 100644 test/Driver/arm-alignment.c create mode 100644 test/Driver/arm-fixed-r9.c create mode 100644 test/Driver/arm-hwdiv.c delete mode 100644 test/Driver/arm-mfpmath.c create mode 100644 test/Driver/arm-restrict-it.c create mode 100644 test/Driver/armv8-crc.c create mode 100644 test/Driver/at_file.c.args.utf16le delete mode 100644 test/Driver/ccc-add-args.c create mode 100644 test/Driver/cl-fallback.c create mode 100644 test/Driver/cl-inputs.c create mode 100644 test/Driver/cl-link.c create mode 100644 test/Driver/cl-options.c create mode 100644 test/Driver/cl-outputs.c create mode 100644 test/Driver/cl-runtime-flags.c create mode 100644 test/Driver/cl.c create mode 100644 test/Driver/coverage-ld.c create mode 100644 test/Driver/cross-linux.c create mode 100644 test/Driver/darwin-eabi.c create mode 100644 test/Driver/dyld-prefix.c delete mode 100644 test/Driver/emit-llvm.c create mode 100644 test/Driver/freebsd.cc create mode 100644 test/Driver/gcc-version-debug.c create mode 100644 test/Driver/gfortran.f90 create mode 100644 test/Driver/ident_md.c delete mode 100644 test/Driver/invalid-o-level.c create mode 100644 test/Driver/le32-toolchain.c create mode 100644 test/Driver/mips-fsf.cpp delete mode 100644 test/Driver/mips-long-double.c create mode 100644 test/Driver/mipsel-nacl-defines.cpp create mode 100644 test/Driver/netbsd.c create mode 100644 test/Driver/netbsd.cpp delete mode 100644 test/Driver/objc_default_synth.m delete mode 100644 test/Driver/parsing.c create mode 100644 test/Driver/systemz-march.c delete mode 100644 test/Driver/x86_64-nacl-types.cpp create mode 100644 test/Driver/xcore-opts.c create mode 100644 test/FixIt/fixit-unicode-with-utf8-output.c create mode 100644 test/FixIt/fixit-uninit.c create mode 100644 test/FixIt/lit.local.cfg create mode 100644 test/FixIt/selector-fixit.m create mode 100644 test/FixIt/typo-location-bugs.cpp create mode 100644 test/FixIt/typo-using.cpp create mode 100644 test/Format/cursor.cpp delete mode 100644 test/Format/diagnostic.cpp create mode 100644 test/Format/line-ranges.cpp create mode 100644 test/Format/style-on-command-line.cpp delete mode 100644 test/Frontend/Inputs/lit.local.cfg create mode 100644 test/Frontend/Inputs/rewrite-includes-bom.h create mode 100644 test/Frontend/cc1-return-codes.c create mode 100644 test/Frontend/darwin-eabi.c create mode 100644 test/Frontend/invalid-o-level.c create mode 100644 test/Frontend/mfpmath.c create mode 100644 test/Frontend/mips-long-double.c create mode 100644 test/Frontend/rewrite-includes-bom.c create mode 100644 test/Frontend/rewrite-includes-header-cmd-line.c create mode 100644 test/Frontend/rewrite-includes-warnings.c create mode 100644 test/Frontend/x86_64-nacl-types.cpp create mode 100644 test/Headers/Inputs/include/complex.h create mode 100644 test/Headers/Inputs/include/math.h create mode 100644 test/Headers/limits.cpp create mode 100644 test/Headers/ms-intrin.cpp create mode 100644 test/Headers/tgmath.c create mode 100644 test/Headers/x86intrin.c create mode 100644 test/Index/Inputs/CommentXML/invalid-function-13.xml create mode 100644 test/Index/Inputs/empty.h delete mode 100644 test/Index/Inputs/lit.local.cfg create mode 100644 test/Index/Inputs/preamble-with-error.h create mode 100644 test/Index/annotate-comments-objc.m create mode 100644 test/Index/attributes.c create mode 100644 test/Index/c-index-unsupported-warning-test.c create mode 100644 test/Index/pch-with-module.m create mode 100644 test/Index/print-type-cxx11.cpp create mode 100644 test/Layout/ms-x86-aligned-tail-padding.cpp create mode 100644 test/Layout/ms-x86-basic-layout.cpp create mode 100644 test/Layout/ms-x86-bitfields-vbases.cpp create mode 100644 test/Layout/ms-x86-empty-base-after-base-with-vbptr.cpp create mode 100644 test/Layout/ms-x86-empty-nonvirtual-bases.cpp create mode 100644 test/Layout/ms-x86-empty-virtual-base.cpp create mode 100644 test/Layout/ms-x86-lazy-empty-nonvirtual-base.cpp create mode 100644 test/Layout/ms-x86-misalignedarray.cpp create mode 100644 test/Layout/ms-x86-primary-bases.cpp create mode 100644 test/Layout/ms-x86-size-alignment-fail.cpp create mode 100644 test/Layout/ms-x86-vfvb-alignment.cpp create mode 100644 test/Layout/ms-x86-vfvb-sharing.cpp create mode 100644 test/Layout/ms-x86-vtordisp.cpp create mode 100644 test/Lexer/Inputs/bad-header-guard-defined.h create mode 100644 test/Lexer/Inputs/bad-header-guard.h create mode 100644 test/Lexer/Inputs/different-define.h create mode 100644 test/Lexer/Inputs/good-header-guard.h create mode 100644 test/Lexer/Inputs/multiple.h create mode 100644 test/Lexer/Inputs/no-define.h create mode 100644 test/Lexer/Inputs/out-of-order-define.h create mode 100644 test/Lexer/Inputs/tokens-between-ifndef-and-define.h create mode 100644 test/Lexer/Inputs/unlikely-to-be-header-guard.h create mode 100644 test/Lexer/cxx-features.cpp create mode 100644 test/Lexer/cxx1y_digit_separators.cpp create mode 100644 test/Lexer/gnu-flags.c create mode 100644 test/Lexer/header.cpp delete mode 100644 test/Lexer/newline-eof-c++11.cpp create mode 100644 test/Misc/languageOptsOpenCL.cl create mode 100644 test/Misc/permissions.cpp create mode 100644 test/Modules/Inputs/DependsOnModule.framework/Headers/not_cxx.h create mode 100644 test/Modules/Inputs/DependsOnModule.framework/Headers/not_objc.h create mode 100644 test/Modules/Inputs/MethodPoolBSub2.h create mode 100644 test/Modules/Inputs/cxx-decls-imported.h create mode 100644 test/Modules/Inputs/cxx-decls-unimported.h create mode 100644 test/Modules/Inputs/cxx-templates-a.h create mode 100644 test/Modules/Inputs/cxx-templates-b-impl.h create mode 100644 test/Modules/Inputs/cxx-templates-b.h create mode 100644 test/Modules/Inputs/cxx-templates-c.h create mode 100644 test/Modules/Inputs/cxx-templates-common.h create mode 100644 test/Modules/Inputs/declare-use/a.h create mode 100644 test/Modules/Inputs/declare-use/b.h create mode 100644 test/Modules/Inputs/declare-use/c.h create mode 100644 test/Modules/Inputs/declare-use/d.h create mode 100644 test/Modules/Inputs/declare-use/e.h create mode 100644 test/Modules/Inputs/declare-use/f.h create mode 100644 test/Modules/Inputs/declare-use/g.h create mode 100644 test/Modules/Inputs/declare-use/g1.h create mode 100644 test/Modules/Inputs/declare-use/h.h create mode 100644 test/Modules/Inputs/declare-use/h1.h create mode 100644 test/Modules/Inputs/declare-use/module.map create mode 100644 test/Modules/Inputs/dummy.h create mode 100644 test/Modules/Inputs/incomplete_mod.h create mode 100644 test/Modules/Inputs/incomplete_mod_missing.h create mode 100644 test/Modules/Inputs/initializer_list create mode 100644 test/Modules/Inputs/modular_maps/a.h create mode 100644 test/Modules/Inputs/modular_maps/b.h create mode 100644 test/Modules/Inputs/modular_maps/common.h create mode 100644 test/Modules/Inputs/modular_maps/modulea.map create mode 100644 test/Modules/Inputs/modular_maps/moduleb.map create mode 100644 test/Modules/Inputs/odr/a.h create mode 100644 test/Modules/Inputs/odr/b.h create mode 100644 test/Modules/Inputs/odr/module.map create mode 100644 test/Modules/Inputs/pch-used.h create mode 100644 test/Modules/Inputs/private/common.h create mode 100644 test/Modules/Inputs/private/module.map create mode 100644 test/Modules/Inputs/private/private1.h create mode 100644 test/Modules/Inputs/private/private2.h create mode 100644 test/Modules/Inputs/private/public1.h create mode 100644 test/Modules/Inputs/private/public2.h create mode 100644 test/Modules/Inputs/private0/common.h create mode 100644 test/Modules/Inputs/private1/module.map create mode 100644 test/Modules/Inputs/private1/private1.h create mode 100644 test/Modules/Inputs/private1/public1.h create mode 100644 test/Modules/Inputs/private2/module.map create mode 100644 test/Modules/Inputs/private2/private2.h create mode 100644 test/Modules/Inputs/private2/public2.h create mode 100644 test/Modules/Inputs/recursive_visibility_a1_inner.h create mode 100644 test/Modules/Inputs/recursive_visibility_a2_more_inner.h create mode 100644 test/Modules/Inputs/recursive_visibility_b.h create mode 100644 test/Modules/Inputs/recursive_visibility_c.h create mode 100644 test/Modules/Inputs/separate_map_tree/maps/modulea.map create mode 100644 test/Modules/Inputs/separate_map_tree/maps/moduleb.map create mode 100644 test/Modules/Inputs/separate_map_tree/maps/modulec.map create mode 100644 test/Modules/Inputs/separate_map_tree/src/common.h create mode 100644 test/Modules/Inputs/separate_map_tree/src/private-in-c.h create mode 100644 test/Modules/Inputs/separate_map_tree/src/public-in-b.h create mode 100644 test/Modules/Inputs/separate_map_tree/src/public-in-c.h create mode 100644 test/Modules/Inputs/submodules/import-self-a.h create mode 100644 test/Modules/Inputs/submodules/import-self-b.h create mode 100644 test/Modules/Inputs/submodules/import-self-c.h create mode 100644 test/Modules/Inputs/submodules/import-self-d.h create mode 100644 test/Modules/Inputs/using-decl-a.h create mode 100644 test/Modules/Inputs/using-decl-b.h create mode 100644 test/Modules/Inputs/warning.h create mode 100644 test/Modules/compiler_builtins_arm.m create mode 100644 test/Modules/cxx-decls.cpp create mode 100644 test/Modules/cxx-templates.cpp create mode 100644 test/Modules/declare-use1.cpp create mode 100644 test/Modules/declare-use2.cpp create mode 100644 test/Modules/fatal-module-loader-error.m create mode 100644 test/Modules/incomplete-module.m create mode 100644 test/Modules/initializer_list.cpp create mode 100644 test/Modules/modular_maps.cpp create mode 100644 test/Modules/odr.cpp create mode 100644 test/Modules/pch-used.m create mode 100644 test/Modules/private.cpp create mode 100644 test/Modules/private1.cpp create mode 100644 test/Modules/recursive_visibility.mm create mode 100644 test/Modules/requires.mm create mode 100644 test/Modules/self-import-header/af.framework/Headers/a1.h create mode 100644 test/Modules/self-import-header/af.framework/Headers/a2.h create mode 100644 test/Modules/self-import-header/af.framework/module.map create mode 100644 test/Modules/self-import-header/depend_builtin/h1.h create mode 100644 test/Modules/self-import-header/depend_builtin/module.map create mode 100644 test/Modules/self-import-header/test.m create mode 100644 test/Modules/separate_map_tree.cpp create mode 100644 test/Modules/system_headers.m create mode 100644 test/Modules/using-decl.cpp create mode 100644 test/OpenMP/parallel_ast_print.cpp create mode 100644 test/OpenMP/parallel_default_messages.cpp create mode 100644 test/OpenMP/parallel_firstprivate_messages.cpp create mode 100644 test/OpenMP/parallel_messages.cpp create mode 100644 test/OpenMP/parallel_private_messages.cpp create mode 100644 test/OpenMP/parallel_shared_messages.cpp create mode 100644 test/PCH/cxx1y-deduced-return-type.cpp create mode 100644 test/PCH/cxx1y-init-captures.cpp create mode 100644 test/PCH/cxx1y-lambdas.mm create mode 100644 test/PCH/cxx1y-variable-templates.cpp create mode 100644 test/PCH/debug-info-limited-struct.c create mode 100644 test/PCH/debug-info-limited-struct.h create mode 100644 test/Parser/altivec-csk-bool.c create mode 100644 test/Parser/cxx-ambig-init-templ.cpp create mode 100644 test/Parser/cxx-class-template-specialization.cpp create mode 100644 test/Preprocessor/arm-target-features.c create mode 100644 test/Preprocessor/macro_backslash.c create mode 100644 test/Preprocessor/macro_expand_empty.c create mode 100644 test/Preprocessor/macro_with_initializer_list.cpp create mode 100644 test/Preprocessor/pragma_microsoft.cpp create mode 100644 test/Rewriter/lit.local.cfg create mode 100644 test/Rewriter/objc-modern-StretAPI-3.mm create mode 100644 test/Rewriter/objc-modern-fast-enumeration.mm create mode 100644 test/Rewriter/rewrite-interface-locals.mm create mode 100644 test/Sema/128bitfloat.cc create mode 100644 test/Sema/Inputs/ms-keyword-system-header.h create mode 100644 test/Sema/aarch64-neon-vector-types.c create mode 100644 test/Sema/alias-redefinition.c create mode 100644 test/Sema/arm-darwin-aapcs.cpp create mode 100644 test/Sema/arm-interrupt-attr.c create mode 100644 test/Sema/atomic-requires-library-error.c create mode 100644 test/Sema/attr-alias-elf.c create mode 100644 test/Sema/attr-bounded.c create mode 100644 test/Sema/attr-endian.c create mode 100644 test/Sema/attr-ownership.c create mode 100644 test/Sema/builtin-clear_cache.c create mode 100644 test/Sema/builtins-arm-exclusive.c create mode 100644 test/Sema/builtins-arm-strex-rettype.c create mode 100644 test/Sema/builtins-gnu-mode.c create mode 100644 test/Sema/callingconv-ms_abi.c create mode 100644 test/Sema/callingconv-sysv_abi.c create mode 100644 test/Sema/convertvector.c create mode 100644 test/Sema/empty1.c create mode 100644 test/Sema/empty2.c create mode 100644 test/Sema/enum-increment.c create mode 100644 test/Sema/format-strings-ms.c create mode 100644 test/Sema/gnu-flags.c create mode 100644 test/Sema/mrtd.c create mode 100644 test/Sema/ms-keyword-system-header.c create mode 100644 test/Sema/ms-wchar.c create mode 100644 test/Sema/ms_abi-sysv_abi.c create mode 100644 test/Sema/ms_bitfield_layout.c create mode 100644 test/Sema/neon-vector-types-support.c create mode 100644 test/Sema/offsetof-64.c create mode 100644 test/Sema/pragma-weak.c create mode 100644 test/Sema/string-init.c create mode 100644 test/Sema/string-plus-char.c create mode 100644 test/Sema/varargs.cpp create mode 100644 test/Sema/warn-null.c create mode 100644 test/Sema/warn-shadow-intrinsics.c create mode 100644 test/Sema/warn-thread-safety-analysis.c create mode 100644 test/Sema/warn-unsequenced.c create mode 100644 test/Sema/warn-variable-not-needed.c delete mode 100644 test/SemaCXX/Inputs/lit.local.cfg create mode 100644 test/SemaCXX/Inputs/register.h create mode 100644 test/SemaCXX/PR12778.cpp create mode 100644 test/SemaCXX/alignment-of-derived-class.cpp create mode 100644 test/SemaCXX/attr-aligned.cpp create mode 100644 test/SemaCXX/attr-cleanup-gcc.cpp create mode 100644 test/SemaCXX/attr-cleanup.cpp create mode 100644 test/SemaCXX/attr-common.cpp create mode 100644 test/SemaCXX/attr-selectany.cpp create mode 100644 test/SemaCXX/attr-used.cpp create mode 100644 test/SemaCXX/calling-conv-compat.cpp create mode 100644 test/SemaCXX/constexpr-duffs-device.cpp create mode 100644 test/SemaCXX/constexpr-steps.cpp create mode 100644 test/SemaCXX/conversion-incomplete-type.cpp delete mode 100644 test/SemaCXX/cxx1y-array-runtime-bound.cpp create mode 100644 test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp create mode 100644 test/SemaCXX/cxx1y-generic-lambdas-capturing.cpp create mode 100644 test/SemaCXX/cxx1y-generic-lambdas.cpp create mode 100644 test/SemaCXX/cxx1y-init-captures.cpp create mode 100644 test/SemaCXX/cxx1y-sized-deallocation.cpp create mode 100644 test/SemaCXX/cxx1y-user-defined-literals.cpp create mode 100644 test/SemaCXX/cxx1y-variable-templates_in_class.cpp create mode 100644 test/SemaCXX/cxx1y-variable-templates_top_level.cpp create mode 100644 test/SemaCXX/deprecated.cpp create mode 100644 test/SemaCXX/enum-increment.cpp create mode 100644 test/SemaCXX/err_init_conversion_failed.cpp create mode 100644 test/SemaCXX/function-pointer-arguments.cpp create mode 100644 test/SemaCXX/gnu-flags.cpp create mode 100644 test/SemaCXX/libstdcxx_pointer_return_false_hack.cpp create mode 100644 test/SemaCXX/microsoft-dtor-lookup.cpp create mode 100644 test/SemaCXX/microsoft-new-delete.cpp create mode 100644 test/SemaCXX/ms-overload-entry-point.cpp create mode 100644 test/SemaCXX/ms-wchar.cpp create mode 100644 test/SemaCXX/ms_struct.cpp create mode 100644 test/SemaCXX/ms_wide_bitfield.cpp create mode 100644 test/SemaCXX/no-warn-unused-const-variables.cpp create mode 100644 test/SemaCXX/operator-arrow-depth.cpp create mode 100644 test/SemaCXX/parentheses.cpp create mode 100644 test/SemaCXX/predefined-expr.cpp create mode 100644 test/SemaCXX/self-comparison.cpp create mode 100644 test/SemaCXX/static-data-member.cpp create mode 100644 test/SemaCXX/string-init.cpp create mode 100644 test/SemaCXX/string-plus-char.cpp create mode 100644 test/SemaCXX/typo-correction-pt2.cpp create mode 100644 test/SemaCXX/warn-consumed-analysis.cpp create mode 100644 test/SemaCXX/warn-consumed-parsing.cpp create mode 100644 test/SemaCXX/warn-div-or-rem-by-zero.cpp create mode 100644 test/SemaCXX/warn-logical-not-compare.cpp create mode 100644 test/SemaCXX/warn-member-not-needed.cpp create mode 100644 test/SemaCXX/warn-unused-attribute.cpp create mode 100644 test/SemaObjC/attr-print.m create mode 100644 test/SemaObjC/conversion.m create mode 100644 test/SemaObjC/objcbridge-attribute.m create mode 100644 test/SemaObjC/property-ambiguous-synthesis.m create mode 100644 test/SemaObjC/property-choose-expr.m create mode 100644 test/SemaObjC/property-ownership-attr.m create mode 100644 test/SemaObjC/self-comparison.m create mode 100644 test/SemaObjC/sign-conversion.m create mode 100644 test/SemaObjC/unsued-backing-ivar-warning.m create mode 100644 test/SemaObjCXX/contextual-convert-to-id.mm create mode 100644 test/SemaObjCXX/exceptions.mm create mode 100644 test/SemaObjCXX/microsoft-abi-byval.mm create mode 100644 test/SemaObjCXX/missing-lhs-gun-extension.mm delete mode 100644 test/SemaObjCXX/overload-1.mm create mode 100644 test/SemaOpenCL/invalid-kernel-parameters.cl create mode 100644 test/SemaOpenCL/str_literals.cl create mode 100644 test/SemaOpenCL/vector_inc_dec_ops.cl create mode 100644 test/SemaTemplate/exception-spec-crash.cpp create mode 100644 test/SemaTemplate/extension-sfinae.cpp create mode 100644 test/SemaTemplate/function-template-specialization-noreturn.cpp create mode 100644 test/SemaTemplate/instantiate-partial-spec.cpp delete mode 100644 test/SemaTemplate/local-member-templates.cpp create mode 100644 test/SemaTemplate/ms-class-specialization-class-scope.cpp delete mode 100644 test/Tooling/Inputs/lit.local.cfg create mode 100644 test/Tooling/clang-check-analyzer.cpp create mode 100644 test/Tooling/clang-check-extra-arg.cpp create mode 100644 test/Tooling/clang-check-rel-path.cpp create mode 100644 test/Tooling/clang-check-strip-o.cpp create mode 100644 test/Tooling/ms-asm-no-target.cpp (limited to 'test') diff --git a/test/.clang-format b/test/.clang-format new file mode 100644 index 000000000000..4799b66f3e9a --- /dev/null +++ b/test/.clang-format @@ -0,0 +1,2 @@ +BasedOnStyle: LLVM +ColumnLimit: 0 diff --git a/test/ARCMT/Inputs/test1.m.in b/test/ARCMT/Inputs/test1.m.in index 8416a8896569..44a3c4cf3d93 100644 --- a/test/ARCMT/Inputs/test1.m.in +++ b/test/ARCMT/Inputs/test1.m.in @@ -4,3 +4,13 @@ void test1(id p) { [p release]; } + +@interface Test2 +@property (strong) id prop; +@end + +@implementation Test2 +-(id)init { + _prop = 0; +} +@end diff --git a/test/ARCMT/Inputs/test1.m.in.result b/test/ARCMT/Inputs/test1.m.in.result index f351fe6c8355..1db9bf7ad65c 100644 --- a/test/ARCMT/Inputs/test1.m.in.result +++ b/test/ARCMT/Inputs/test1.m.in.result @@ -3,3 +3,13 @@ void test1(id p) { } + +@interface Test2 +@property (strong) id prop; +@end + +@implementation Test2 +-(id)init { + _prop = 0; +} +@end diff --git a/test/ARCMT/checking-in-arc.m b/test/ARCMT/checking-in-arc.m new file mode 100644 index 000000000000..40d9b1684576 --- /dev/null +++ b/test/ARCMT/checking-in-arc.m @@ -0,0 +1,51 @@ +// RUN: %clang_cc1 -arcmt-check -fobjc-arc -fobjc-runtime=macosx-10.8.0 -triple x86_64-apple-darwin12 -fblocks -Werror %s +// DISABLE: mingw32 + +#if __has_feature(objc_arc) +#define NS_AUTOMATED_REFCOUNT_UNAVAILABLE __attribute__((unavailable("not available in automatic reference counting mode"))) +#else +#define NS_AUTOMATED_REFCOUNT_UNAVAILABLE +#endif + +typedef const void * CFTypeRef; +CFTypeRef CFBridgingRetain(id X); +id CFBridgingRelease(CFTypeRef); + +typedef int BOOL; +typedef unsigned NSUInteger; + +@protocol NSObject +- (id)retain NS_AUTOMATED_REFCOUNT_UNAVAILABLE; +- (NSUInteger)retainCount NS_AUTOMATED_REFCOUNT_UNAVAILABLE; +- (oneway void)release NS_AUTOMATED_REFCOUNT_UNAVAILABLE; +- (id)autorelease NS_AUTOMATED_REFCOUNT_UNAVAILABLE; +@end + +@interface NSObject {} +- (id)init; + ++ (id)new; ++ (id)alloc; +- (void)dealloc; + +- (void)finalize; + +- (id)copy; +- (id)mutableCopy; +@end + +typedef const struct __CFString * CFStringRef; +extern const CFStringRef kUTTypePlainText; +extern const CFStringRef kUTTypeRTF; +@class NSString; + +@interface Test : NSObject +@property (weak) NSString *weakProperty; +@end + +@implementation Test +@end + +#if ! __has_feature(objc_arc) +#error This file must be compiled with ARC (set -fobjc_arc flag on file) +#endif diff --git a/test/ARCMT/checking.m b/test/ARCMT/checking.m index b06f4a731dc7..a550633171d1 100644 --- a/test/ARCMT/checking.m +++ b/test/ARCMT/checking.m @@ -333,7 +333,9 @@ void rdar9504750(id p) { } @end -@interface Test10 : NSObject +@interface Test10 : NSObject { + CFStringRef cfstr; +} @property (retain) id prop; -(void)foo; @end @@ -342,3 +344,13 @@ void test(Test10 *x) { x.prop = ^{ [x foo]; }; // expected-warning {{likely to lead to a retain cycle}} \ // expected-note {{retained by the captured object}} } + +@implementation Test10 +-(void)foo { + ^{ + NSString *str = (NSString *)cfstr; // expected-error {{cast of C pointer type 'CFStringRef' (aka 'const struct __CFString *') to Objective-C pointer type 'NSString *' requires a bridged cast}} \ + // expected-note {{use __bridge to convert directly (no change in ownership)}} \ + // expected-note {{use CFBridgingRelease call to transfer ownership of a +1 'CFStringRef' (aka 'const struct __CFString *') into ARC}} + }; +} +@end diff --git a/test/ARCMT/driver-migrate.m b/test/ARCMT/driver-migrate.m index a912ad95b156..b1e419ae6fb3 100644 --- a/test/ARCMT/driver-migrate.m +++ b/test/ARCMT/driver-migrate.m @@ -10,3 +10,6 @@ // LINK-NOT: {{ld(.exe)?"}} // LINK: {{touch(.exe)?"}} + +// RUN: %clang -### -ccc-arcmt-migrate /foo/bar -fsyntax-only -fno-objc-arc %s 2>&1 | FileCheck -check-prefix=CHECK-NOARC %s +// CHECK-NOARC-NOT: argument unused during compilation diff --git a/test/ARCMT/lit.local.cfg b/test/ARCMT/lit.local.cfg new file mode 100644 index 000000000000..4b28d6dff8a3 --- /dev/null +++ b/test/ARCMT/lit.local.cfg @@ -0,0 +1,2 @@ +if config.root.clang_arcmt == 0: + config.unsupported = True diff --git a/test/ARCMT/objcmt-arc-cf-annotations.m b/test/ARCMT/objcmt-arc-cf-annotations.m new file mode 100644 index 000000000000..9772825b2934 --- /dev/null +++ b/test/ARCMT/objcmt-arc-cf-annotations.m @@ -0,0 +1,2047 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fblocks -objcmt-migrate-annotation -objcmt-migrate-instancetype -objcmt-migrate-readwrite-property -mt-migrate-directory %t %s -x objective-c -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c %s.result + +#ifndef CF_IMPLICIT_BRIDGING_ENABLED +#if __has_feature(arc_cf_code_audited) +#define CF_IMPLICIT_BRIDGING_ENABLED _Pragma("clang arc_cf_code_audited begin") +#else +#define CF_IMPLICIT_BRIDGING_ENABLED +#endif +#endif + +#ifndef CF_IMPLICIT_BRIDGING_DISABLED +#if __has_feature(arc_cf_code_audited) +#define CF_IMPLICIT_BRIDGING_DISABLED _Pragma("clang arc_cf_code_audited end") +#else +#define CF_IMPLICIT_BRIDGING_DISABLED +#endif +#endif + +#if __has_feature(attribute_ns_returns_retained) +#define NS_RETURNS_RETAINED __attribute__((ns_returns_retained)) +#endif +#if __has_feature(attribute_cf_returns_retained) +#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) +#endif +#if __has_feature(attribute_ns_returns_not_retained) +#define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) +#endif +#if __has_feature(attribute_cf_returns_not_retained) +#define CF_RETURNS_NOT_RETAINED __attribute__((cf_returns_not_retained)) +#endif +#if __has_feature(attribute_ns_consumes_self) +#define NS_CONSUMES_SELF __attribute__((ns_consumes_self)) +#endif +#if __has_feature(attribute_ns_consumed) +#define NS_CONSUMED __attribute__((ns_consumed)) +#endif +#if __has_feature(attribute_cf_consumed) +#define CF_CONSUMED __attribute__((cf_consumed)) +#endif +#if __has_attribute(ns_returns_autoreleased) +#define NS_RETURNS_AUTORELEASED __attribute__((ns_returns_autoreleased)) +#endif + +//===----------------------------------------------------------------------===// +// The following code is reduced using delta-debugging from Mac OS X headers: +// +// #include +// #include +// #include +// #include +// #include +// #include +// +// It includes the basic definitions for the test cases below. +//===----------------------------------------------------------------------===// + +typedef unsigned int __darwin_natural_t; +typedef unsigned long uintptr_t; +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; +typedef unsigned int UInt32; +typedef signed long CFIndex; +typedef CFIndex CFByteOrder; +typedef struct { + CFIndex location; + CFIndex length; +} CFRange; +static __inline__ __attribute__((always_inline)) CFRange CFRangeMake(CFIndex loc, CFIndex len) { + CFRange range; + range.location = loc; + range.length = len; + return range; +} +typedef const void * CFTypeRef; +typedef const struct __CFString * CFStringRef; +typedef const struct __CFAllocator * CFAllocatorRef; +extern const CFAllocatorRef kCFAllocatorDefault; +extern CFTypeRef CFRetain(CFTypeRef cf); +extern void CFRelease(CFTypeRef cf); +extern CFTypeRef CFMakeCollectable(CFTypeRef cf); +typedef struct { +} +CFArrayCallBacks; +extern const CFArrayCallBacks kCFTypeArrayCallBacks; +typedef const struct __CFArray * CFArrayRef; +typedef struct __CFArray * CFMutableArrayRef; +extern CFMutableArrayRef CFArrayCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFArrayCallBacks *callBacks); +extern const void *CFArrayGetValueAtIndex(CFArrayRef theArray, CFIndex idx); +extern void CFArrayAppendValue(CFMutableArrayRef theArray, const void *value); +typedef struct { +} +CFDictionaryKeyCallBacks; +extern const CFDictionaryKeyCallBacks kCFTypeDictionaryKeyCallBacks; +typedef struct { +} +CFDictionaryValueCallBacks; +extern const CFDictionaryValueCallBacks kCFTypeDictionaryValueCallBacks; +typedef const struct __CFDictionary * CFDictionaryRef; +typedef struct __CFDictionary * CFMutableDictionaryRef; +extern CFMutableDictionaryRef CFDictionaryCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFDictionaryKeyCallBacks *keyCallBacks, const CFDictionaryValueCallBacks *valueCallBacks); +typedef UInt32 CFStringEncoding; +enum { +kCFStringEncodingMacRoman = 0, kCFStringEncodingWindowsLatin1 = 0x0500, kCFStringEncodingISOLatin1 = 0x0201, kCFStringEncodingNextStepLatin = 0x0B01, kCFStringEncodingASCII = 0x0600, kCFStringEncodingUnicode = 0x0100, kCFStringEncodingUTF8 = 0x08000100, kCFStringEncodingNonLossyASCII = 0x0BFF , kCFStringEncodingUTF16 = 0x0100, kCFStringEncodingUTF16BE = 0x10000100, kCFStringEncodingUTF16LE = 0x14000100, kCFStringEncodingUTF32 = 0x0c000100, kCFStringEncodingUTF32BE = 0x18000100, kCFStringEncodingUTF32LE = 0x1c000100 }; +extern CFStringRef CFStringCreateWithCString(CFAllocatorRef alloc, const char *cStr, CFStringEncoding encoding); +typedef double CFTimeInterval; +typedef CFTimeInterval CFAbsoluteTime; +extern CFAbsoluteTime CFAbsoluteTimeGetCurrent(void); +typedef const struct __CFDate * CFDateRef; +extern CFDateRef CFDateCreate(CFAllocatorRef allocator, CFAbsoluteTime at); +extern CFAbsoluteTime CFDateGetAbsoluteTime(CFDateRef theDate); +typedef __darwin_natural_t natural_t; +typedef natural_t mach_port_name_t; +typedef mach_port_name_t mach_port_t; +typedef int kern_return_t; +typedef kern_return_t mach_error_t; +enum { +kCFNumberSInt8Type = 1, kCFNumberSInt16Type = 2, kCFNumberSInt32Type = 3, kCFNumberSInt64Type = 4, kCFNumberFloat32Type = 5, kCFNumberFloat64Type = 6, kCFNumberCharType = 7, kCFNumberShortType = 8, kCFNumberIntType = 9, kCFNumberLongType = 10, kCFNumberLongLongType = 11, kCFNumberFloatType = 12, kCFNumberDoubleType = 13, kCFNumberCFIndexType = 14, kCFNumberNSIntegerType = 15, kCFNumberCGFloatType = 16, kCFNumberMaxType = 16 }; +typedef CFIndex CFNumberType; +typedef const struct __CFNumber * CFNumberRef; +extern CFNumberRef CFNumberCreate(CFAllocatorRef allocator, CFNumberType theType, const void *valuePtr); +typedef const struct __CFAttributedString *CFAttributedStringRef; +typedef struct __CFAttributedString *CFMutableAttributedStringRef; +extern CFAttributedStringRef CFAttributedStringCreate(CFAllocatorRef alloc, CFStringRef str, CFDictionaryRef attributes) ; +extern CFMutableAttributedStringRef CFAttributedStringCreateMutableCopy(CFAllocatorRef alloc, CFIndex maxLength, CFAttributedStringRef aStr) ; +extern void CFAttributedStringSetAttribute(CFMutableAttributedStringRef aStr, CFRange range, CFStringRef attrName, CFTypeRef value) ; +typedef signed char BOOL; +typedef unsigned long NSUInteger; +@class NSString, Protocol; +extern void NSLog(NSString *format, ...) __attribute__((format(__NSString__, 1, 2))); +typedef struct _NSZone NSZone; +@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; +@protocol NSObject +- (BOOL)isEqual:(id)object; +- (id)retain; +- (oneway void)release; +- (id)autorelease; +- (NSString *)description; +- (id)init; +@end +@protocol NSCopying +- (id)copyWithZone:(NSZone *)zone; +@end +@protocol NSMutableCopying - (id)mutableCopyWithZone:(NSZone *)zone; +@end +@protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder; +@end +@interface NSObject {} ++ (id)allocWithZone:(NSZone *)zone; ++ (id)alloc; ++ (id)new; +- (void)dealloc; +@end +@interface NSObject (NSCoderMethods) +- (id)awakeAfterUsingCoder:(NSCoder *)aDecoder; +@end +extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone); +typedef struct { +} +NSFastEnumerationState; +@protocol NSFastEnumeration +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len; +@end +@class NSString, NSDictionary; +@interface NSValue : NSObject - (void)getValue:(void *)value; +@end +@interface NSNumber : NSValue +- (char)charValue; +- (id)initWithInt:(int)value; ++ (NSNumber *)numberWithInt:(int)value; +@end +@class NSString; +@interface NSArray : NSObject +- (NSUInteger)count; +- (id)initWithObjects:(const id [])objects count:(NSUInteger)cnt; ++ (id)arrayWithObject:(id)anObject; ++ (id)arrayWithObjects:(const id [])objects count:(NSUInteger)cnt; ++ (id)arrayWithObjects:(id)firstObj, ... __attribute__((sentinel(0,1))); +- (id)initWithObjects:(id)firstObj, ... __attribute__((sentinel(0,1))); +- (id)initWithArray:(NSArray *)array; +@end @interface NSArray (NSArrayCreation) + (id)array; +@end @interface NSAutoreleasePool : NSObject { +} +- (void)drain; +@end extern NSString * const NSBundleDidLoadNotification; +typedef double NSTimeInterval; +@interface NSDate : NSObject - (NSTimeInterval)timeIntervalSinceReferenceDate; +@end typedef unsigned short unichar; +@interface NSString : NSObject +- (NSUInteger)length; +- (NSString *)stringByAppendingString:(NSString *)aString; +- ( const char *)UTF8String; +- (id)initWithUTF8String:(const char *)nullTerminatedCString; ++ (id)stringWithUTF8String:(const char *)nullTerminatedCString; +@end @class NSString, NSURL, NSError; +@interface NSData : NSObject - (NSUInteger)length; ++ (id)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length; ++ (id)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)b; +@end @class NSLocale, NSDate, NSCalendar, NSTimeZone, NSError, NSArray, NSMutableDictionary; +@interface NSDictionary : NSObject +- (NSUInteger)count; ++ (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; ++ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(NSUInteger)cnt; +@end +@interface NSMutableDictionary : NSDictionary - (void)removeObjectForKey:(id)aKey; +- (void)setObject:(id)anObject forKey:(id)aKey; +@end @interface NSMutableDictionary (NSMutableDictionaryCreation) + (id)dictionaryWithCapacity:(NSUInteger)numItems; +@end typedef double CGFloat; +struct CGSize { +}; +typedef struct CGSize CGSize; +struct CGRect { +}; +typedef struct CGRect CGRect; +typedef mach_port_t io_object_t; +typedef char io_name_t[128]; +typedef io_object_t io_iterator_t; +typedef io_object_t io_service_t; +typedef struct IONotificationPort * IONotificationPortRef; +typedef void (*IOServiceMatchingCallback)( void * refcon, io_iterator_t iterator ); +io_service_t IOServiceGetMatchingService( mach_port_t masterPort, CFDictionaryRef matching ); +kern_return_t IOServiceGetMatchingServices( mach_port_t masterPort, CFDictionaryRef matching, io_iterator_t * existing ); +kern_return_t IOServiceAddNotification( mach_port_t masterPort, const io_name_t notificationType, CFDictionaryRef matching, mach_port_t wakePort, uintptr_t reference, io_iterator_t * notification ) __attribute__((deprecated)); // expected-note {{'IOServiceAddNotification' declared here}} +kern_return_t IOServiceAddMatchingNotification( IONotificationPortRef notifyPort, const io_name_t notificationType, CFDictionaryRef matching, IOServiceMatchingCallback callback, void * refCon, io_iterator_t * notification ); +CFMutableDictionaryRef IOServiceMatching( const char * name ); +CFMutableDictionaryRef IOServiceNameMatching( const char * name ); +CFMutableDictionaryRef IOBSDNameMatching( mach_port_t masterPort, uint32_t options, const char * bsdName ); +CFMutableDictionaryRef IOOpenFirmwarePathMatching( mach_port_t masterPort, uint32_t options, const char * path ); +CFMutableDictionaryRef IORegistryEntryIDMatching( uint64_t entryID ); +typedef struct __DASession * DASessionRef; +extern DASessionRef DASessionCreate( CFAllocatorRef allocator ); +typedef struct __DADisk * DADiskRef; +extern DADiskRef DADiskCreateFromBSDName( CFAllocatorRef allocator, DASessionRef session, const char * name ); +extern DADiskRef DADiskCreateFromIOMedia( CFAllocatorRef allocator, DASessionRef session, io_service_t media ); +extern CFDictionaryRef DADiskCopyDescription( DADiskRef disk ); +extern DADiskRef DADiskCopyWholeDisk( DADiskRef disk ); +@interface NSTask : NSObject - (id)init; +@end typedef struct CGColorSpace *CGColorSpaceRef; +typedef struct CGImage *CGImageRef; +typedef struct CGLayer *CGLayerRef; +@interface NSResponder : NSObject { +} +@end @protocol NSAnimatablePropertyContainer - (id)animator; +@end extern NSString *NSAnimationTriggerOrderIn ; +@interface NSView : NSResponder { +} +@end @protocol NSValidatedUserInterfaceItem - (SEL)action; +@end @protocol NSUserInterfaceValidations - (BOOL)validateUserInterfaceItem:(id )anItem; +@end @class NSDate, NSDictionary, NSError, NSException, NSNotification; +@class NSTextField, NSPanel, NSArray, NSWindow, NSImage, NSButton, NSError; +@interface NSApplication : NSResponder { +} +- (void)beginSheet:(NSWindow *)sheet modalForWindow:(NSWindow *)docWindow modalDelegate:(id)modalDelegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo; +@end enum { +NSTerminateCancel = 0, NSTerminateNow = 1, NSTerminateLater = 2 }; +typedef NSUInteger NSApplicationTerminateReply; +@protocol NSApplicationDelegate @optional - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender; +@end @class NSAttributedString, NSEvent, NSFont, NSFormatter, NSImage, NSMenu, NSText, NSView, NSTextView; +@interface NSCell : NSObject { +} +@end +typedef struct { +} +CVTimeStamp; +@interface CIImage : NSObject { +} +typedef int CIFormat; +@end enum { +kDAReturnSuccess = 0, kDAReturnError = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x01, kDAReturnBusy = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x02, kDAReturnBadArgument = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x03, kDAReturnExclusiveAccess = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x04, kDAReturnNoResources = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x05, kDAReturnNotFound = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x06, kDAReturnNotMounted = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x07, kDAReturnNotPermitted = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x08, kDAReturnNotPrivileged = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x09, kDAReturnNotReady = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x0A, kDAReturnNotWritable = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x0B, kDAReturnUnsupported = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x0C }; +typedef mach_error_t DAReturn; +typedef const struct __DADissenter * DADissenterRef; +extern DADissenterRef DADissenterCreate( CFAllocatorRef allocator, DAReturn status, CFStringRef string ); +@interface CIContext: NSObject { +} +- (CGImageRef)createCGImage:(CIImage *)im fromRect:(CGRect)r; +- (CGImageRef)createCGImage:(CIImage *)im fromRect:(CGRect)r format:(CIFormat)f colorSpace:(CGColorSpaceRef)cs; +- (CGLayerRef)createCGLayerWithSize:(CGSize)size info:(CFDictionaryRef)d; +@end extern NSString* const QCRendererEventKey; +@protocol QCCompositionRenderer - (NSDictionary*) attributes; +@end @interface QCRenderer : NSObject { +} +- (id) createSnapshotImageOfType:(NSString*)type; +@end extern NSString* const QCViewDidStartRenderingNotification; +@interface QCView : NSView { +} +- (id) createSnapshotImageOfType:(NSString*)type; +@end enum { +ICEXIFOrientation1 = 1, ICEXIFOrientation2 = 2, ICEXIFOrientation3 = 3, ICEXIFOrientation4 = 4, ICEXIFOrientation5 = 5, ICEXIFOrientation6 = 6, ICEXIFOrientation7 = 7, ICEXIFOrientation8 = 8, }; +@class ICDevice; +@protocol ICDeviceDelegate @required - (void)didRemoveDevice:(ICDevice*)device; +@end extern NSString *const ICScannerStatusWarmingUp; +@class ICScannerDevice; +@protocol ICScannerDeviceDelegate @optional - (void)scannerDeviceDidBecomeAvailable:(ICScannerDevice*)scanner; +@end + +typedef long unsigned int __darwin_size_t; +typedef __darwin_size_t size_t; +typedef unsigned long CFTypeID; +struct CGPoint { + CGFloat x; + CGFloat y; +}; +typedef struct CGPoint CGPoint; +typedef struct CGGradient *CGGradientRef; +typedef uint32_t CGGradientDrawingOptions; +extern CFTypeID CGGradientGetTypeID(void); +extern CGGradientRef CGGradientCreateWithColorComponents(CGColorSpaceRef + space, const CGFloat components[], const CGFloat locations[], size_t count); +extern CGGradientRef CGGradientCreateWithColors(CGColorSpaceRef space, + CFArrayRef colors, const CGFloat locations[]); +extern CGGradientRef CGGradientRetain(CGGradientRef gradient); +extern void CGGradientRelease(CGGradientRef gradient); +typedef struct CGContext *CGContextRef; +extern void CGContextDrawLinearGradient(CGContextRef context, + CGGradientRef gradient, CGPoint startPoint, CGPoint endPoint, + CGGradientDrawingOptions options); +extern CGColorSpaceRef CGColorSpaceCreateDeviceRGB(void); + +@interface NSMutableArray : NSObject +- (void)addObject:(id)object; ++ (id)array; +@end + +// This is how NSMakeCollectable is declared in the OS X 10.8 headers. +id NSMakeCollectable(CFTypeRef __attribute__((cf_consumed))) __attribute__((ns_returns_retained)); + +typedef const struct __CFUUID * CFUUIDRef; + +extern +void *CFPlugInInstanceCreate(CFAllocatorRef allocator, CFUUIDRef factoryUUID, CFUUIDRef typeUUID); + +//===----------------------------------------------------------------------===// +// Test cases. +//===----------------------------------------------------------------------===// + +CFAbsoluteTime f1() { + CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); + CFDateRef date = CFDateCreate(0, t); + CFRetain(date); + CFRelease(date); + CFDateGetAbsoluteTime(date); // no-warning + CFRelease(date); + t = CFDateGetAbsoluteTime(date); // expected-warning{{Reference-counted object is used after it is released}} + return t; +} + +CFAbsoluteTime f2() { + CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); + CFDateRef date = CFDateCreate(0, t); + [((NSDate*) date) retain]; + CFRelease(date); + CFDateGetAbsoluteTime(date); // no-warning + [((NSDate*) date) release]; + t = CFDateGetAbsoluteTime(date); // expected-warning{{Reference-counted object is used after it is released}} + return t; +} + + +NSDate* global_x; + +// Test to see if we supresss an error when we store the pointer +// to a global. + +CFAbsoluteTime f3() { + CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); + CFDateRef date = CFDateCreate(0, t); + [((NSDate*) date) retain]; + CFRelease(date); + CFDateGetAbsoluteTime(date); // no-warning + global_x = (NSDate*) date; + [((NSDate*) date) release]; + t = CFDateGetAbsoluteTime(date); // no-warning + return t; +} + +//--------------------------------------------------------------------------- +// Test case 'f4' differs for region store and basic store. See +// retain-release-region-store.m and retain-release-basic-store.m. +//--------------------------------------------------------------------------- + +// Test a leak. + +CFAbsoluteTime f5(int x) { + CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); + CFDateRef date = CFDateCreate(0, t); // expected-warning{{leak}} + + if (x) + CFRelease(date); + + return t; +} + +// Test a leak involving the return. + +CFDateRef f6(int x) { + CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); // expected-warning{{leak}} + CFRetain(date); + return date; +} + +// Test a leak involving an overwrite. + +CFDateRef f7() { + CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); //expected-warning{{leak}} + CFRetain(date); + date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); // expected-warning {{leak}} + return date; +} + +// Generalization of Create rule. MyDateCreate returns a CFXXXTypeRef, and +// has the word create. +CFDateRef MyDateCreate(); + +CFDateRef f8() { + CFDateRef date = MyDateCreate(); // expected-warning{{leak}} + CFRetain(date); + return date; +} + +__attribute__((cf_returns_retained)) CFDateRef f9() { + CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); // no-warning + int *p = 0; + // When allocations fail, CFDateCreate can return null. + if (!date) *p = 1; // expected-warning{{null}} + return date; +} + +// Handle DiskArbitration API: +// +// http://developer.apple.com/DOCUMENTATION/DARWIN/Reference/DiscArbitrationFramework/ +// +void f10(io_service_t media, DADiskRef d, CFStringRef s) { + DADiskRef disk = DADiskCreateFromBSDName(kCFAllocatorDefault, 0, "hello"); // expected-warning{{leak}} + if (disk) NSLog(@"ok"); + + disk = DADiskCreateFromIOMedia(kCFAllocatorDefault, 0, media); // expected-warning{{leak}} + if (disk) NSLog(@"ok"); + + CFDictionaryRef dict = DADiskCopyDescription(d); // expected-warning{{leak}} + if (dict) NSLog(@"ok"); + + disk = DADiskCopyWholeDisk(d); // expected-warning{{leak}} + if (disk) NSLog(@"ok"); + + DADissenterRef dissenter = DADissenterCreate(kCFAllocatorDefault, // expected-warning{{leak}} + kDAReturnSuccess, s); + if (dissenter) NSLog(@"ok"); + + DASessionRef session = DASessionCreate(kCFAllocatorDefault); // expected-warning{{leak}} + if (session) NSLog(@"ok"); +} + +// Test retain/release checker with CFString and CFMutableArray. +void f11() { + // Create the array. + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + + // Create a string. + CFStringRef s1 = CFStringCreateWithCString(0, "hello world", + kCFStringEncodingUTF8); + + // Add the string to the array. + CFArrayAppendValue(A, s1); + + // Decrement the reference count. + CFRelease(s1); // no-warning + + // Get the string. We don't own it. + s1 = (CFStringRef) CFArrayGetValueAtIndex(A, 0); + + // Release the array. + CFRelease(A); // no-warning + + // Release the string. This is a bug. + CFRelease(s1); // expected-warning{{Incorrect decrement of the reference count}} +} + +// PR 3337: Handle functions declared using typedefs. +typedef CFTypeRef CREATEFUN(); +CFTypeRef MyCreateFun(); + +void f12() { + CFTypeRef o = MyCreateFun(); // expected-warning {{leak}} +} + +void f13_autorelease() { + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning + [(id) A autorelease]; // no-warning +} + +void f13_autorelease_b() { + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + [(id) A autorelease]; + [(id) A autorelease]; +} // expected-warning{{Object autoreleased too many times}} + +CFMutableArrayRef f13_autorelease_c() { + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + [(id) A autorelease]; + [(id) A autorelease]; + return A; // expected-warning{{Object autoreleased too many times}} +} + +CFMutableArrayRef f13_autorelease_d() { + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + [(id) A autorelease]; + [(id) A autorelease]; + CFMutableArrayRef B = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning{{Object autoreleased too many times}} + CFRelease(B); // no-warning + while (1) {} +} + + +// This case exercises the logic where the leak site is the same as the allocation site. +void f14_leakimmediately() { + CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning{{leak}} +} + +// Test that we track an allocated object beyond the point where the *name* +// of the variable storing the reference is no longer live. +void f15() { + // Create the array. + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + CFMutableArrayRef *B = &A; + // At this point, the name 'A' is no longer live. + CFRelease(*B); // no-warning +} + +// Test when we pass NULL to CFRetain/CFRelease/CFMakeCollectable. +void f16(int x, CFTypeRef p) { + if (p) + return; + + if (x > 0) { + CFRelease(p); // expected-warning{{Null pointer argument in call to CFRelease}} + } + else if (x < 0) { + CFRetain(p); // expected-warning{{Null pointer argument in call to CFRetain}} + } + else { + CFMakeCollectable(p); // expected-warning{{Null pointer argument in call to CFMakeCollectable}} + } +} + +// Test that an object is non-null after being CFRetained/CFReleased. +void f17(int x, CFTypeRef p) { + if (x > 0) { + CFRelease(p); + if (!p) + CFRelease(0); // no-warning + } + else if (x < 0) { + CFRetain(p); + if (!p) + CFRetain(0); // no-warning + } + else { + CFMakeCollectable(p); + if (!p) + CFMakeCollectable(0); // no-warning + } +} + +// Test basic tracking of ivars associated with 'self'. For the retain/release +// checker we currently do not want to flag leaks associated with stores +// of tracked objects to ivars. +@interface SelfIvarTest : NSObject { + id myObj; +} +- (void)test_self_tracking; +@end + +@implementation SelfIvarTest +- (void)test_self_tracking { + myObj = (id) CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} +@end + +// Test return of non-owned objects in contexts where an owned object +// is expected. +@interface TestReturnNotOwnedWhenExpectedOwned +- (NSString*)newString; +@end + +@implementation TestReturnNotOwnedWhenExpectedOwned +- (NSString*)newString { + NSString *s = [NSString stringWithUTF8String:"hello"]; + return s; // expected-warning{{Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected}} +} +@end + +// +int isFoo(char c); + +static void rdar_6659160(char *inkind, char *inname) +{ + // We currently expect that [NSObject alloc] cannot fail. This + // will be a toggled flag in the future. It can indeed return null, but + // Cocoa programmers generally aren't expected to reason about out-of-memory + // conditions. + NSString *kind = [[NSString alloc] initWithUTF8String:inkind]; // expected-warning{{leak}} + + // We do allow stringWithUTF8String to fail. This isn't really correct, as + // far as returning 0. In most error conditions it will throw an exception. + // If allocation fails it could return 0, but again this + // isn't expected. + NSString *name = [NSString stringWithUTF8String:inname]; + if(!name) + return; + + const char *kindC = 0; + const char *nameC = 0; + + // In both cases, we cannot reach a point down below where we + // dereference kindC or nameC with either being null. This is because + // we assume that [NSObject alloc] doesn't fail and that we have the guard + // up above. + + if(kind) + kindC = [kind UTF8String]; + if(name) + nameC = [name UTF8String]; + if(!isFoo(kindC[0])) // expected-warning{{null}} + return; + if(!isFoo(nameC[0])) // no-warning + return; + + [kind release]; + [name release]; // expected-warning{{Incorrect decrement of the reference count}} +} + +// PR 3677 - 'allocWithZone' should be treated as following the Cocoa naming +// conventions with respect to 'return'ing ownership. +@interface PR3677: NSObject @end +@implementation PR3677 ++ (id)allocWithZone:(NSZone *)inZone { + return [super allocWithZone:inZone]; // no-warning +} +@end + +// PR 3820 - Reason about calls to -dealloc +void pr3820_DeallocInsteadOfRelease(void) +{ + id foo = [[NSString alloc] init]; // no-warning + [foo dealloc]; + // foo is not leaked, since it has been deallocated. +} + +void pr3820_ReleaseAfterDealloc(void) +{ + id foo = [[NSString alloc] init]; + [foo dealloc]; + [foo release]; // expected-warning{{used after it is release}} + // NSInternalInconsistencyException: message sent to deallocated object +} + +void pr3820_DeallocAfterRelease(void) +{ + NSLog(@"\n\n[%s]", __FUNCTION__); + id foo = [[NSString alloc] init]; + [foo release]; + [foo dealloc]; // expected-warning{{used after it is released}} + // message sent to released object +} + +// From . The problem here is that 'length' binds to +// '($0 - 1)' after '--length', but SimpleConstraintManager doesn't know how to +// reason about '($0 - 1) > constant'. As a temporary hack, we drop the value +// of '($0 - 1)' and conjure a new symbol. +void rdar6704930(unsigned char *s, unsigned int length) { + NSString* name = 0; + if (s != 0) { + if (length > 0) { + while (length > 0) { + if (*s == ':') { + ++s; + --length; + name = [[NSString alloc] init]; // no-warning + break; + } + ++s; + --length; + } + if ((length == 0) && (name != 0)) { + [name release]; + name = 0; + } + if (length == 0) { // no ':' found -> use it all as name + name = [[NSString alloc] init]; // no-warning + } + } + } + + if (name != 0) { + [name release]; + } +} + +//===----------------------------------------------------------------------===// +// +// One build of the analyzer accidentally stopped tracking the allocated +// object after the 'retain'. +//===----------------------------------------------------------------------===// + +@interface rdar_6833332 : NSObject { + NSWindow *window; +} +@property (nonatomic, retain) NSWindow *window; +@end + +@implementation rdar_6833332 +@synthesize window; +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { + NSMutableDictionary *dict = [[NSMutableDictionary dictionaryWithCapacity:4] retain]; // expected-warning{{leak}} + + [dict setObject:@"foo" forKey:@"bar"]; + + NSLog(@"%@", dict); +} +- (void)dealloc { + [window release]; + [super dealloc]; +} + +- (void)radar10102244 { + NSMutableDictionary *dict = [[NSMutableDictionary dictionaryWithCapacity:4] retain]; // expected-warning{{leak}} + if (window) + NSLog(@"%@", window); +} +@end + +//===----------------------------------------------------------------------===// +// clang checker fails to catch use-after-release +//===----------------------------------------------------------------------===// + +int rdar_6257780_Case1() { + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + NSArray *array = [NSArray array]; + [array release]; // expected-warning{{Incorrect decrement of the reference count of an object that is not owned at this point by the caller}} + [pool drain]; + return 0; +} + +//===----------------------------------------------------------------------===// +// Analyzer is confused about NSAutoreleasePool -allocWithZone:. +//===----------------------------------------------------------------------===// + +void rdar_10640253_autorelease_allocWithZone() { + NSAutoreleasePool *pool = [[NSAutoreleasePool allocWithZone:(NSZone*)0] init]; + (void) pool; +} + +//===----------------------------------------------------------------------===// +// Checker should understand new/setObject:/release constructs +//===----------------------------------------------------------------------===// + +void rdar_6866843() { + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] init]; + NSArray* array = [[NSArray alloc] init]; + [dictionary setObject:array forKey:@"key"]; + [array release]; + // Using 'array' here should be fine + NSLog(@"array = %@\n", array); // no-warning + // Now the array is released + [dictionary release]; + [pool drain]; +} + + +//===----------------------------------------------------------------------===// +// Classes typedef-ed to CF objects should get the same treatment as CF objects +//===----------------------------------------------------------------------===// + +typedef CFTypeRef OtherRef; + +@interface RDar6877235 : NSObject {} +- (CFTypeRef)_copyCFTypeRef; +- (OtherRef)_copyOtherRef; +@end + +@implementation RDar6877235 +- (CFTypeRef)_copyCFTypeRef { + return [[NSString alloc] init]; // no-warning +} +- (OtherRef)_copyOtherRef { + return [[NSString alloc] init]; // no-warning +} +@end + +//===----------------------------------------------------------------------===// +// false positive - init method returns an object +// owned by caller +//===----------------------------------------------------------------------===// + +@interface RDar6320065 : NSObject { + NSString *_foo; +} +- (id)initReturningNewClass; +- (id)_initReturningNewClassBad; +- (id)initReturningNewClassBad2; +@end + +@interface RDar6320065Subclass : RDar6320065 +@end + +@implementation RDar6320065 +- (id)initReturningNewClass { + [self release]; + self = [[RDar6320065Subclass alloc] init]; // no-warning + return self; +} +- (id)_initReturningNewClassBad { + [self release]; + [[RDar6320065Subclass alloc] init]; // expected-warning {{leak}} + return self; +} +- (id)initReturningNewClassBad2 { + [self release]; + self = [[RDar6320065Subclass alloc] init]; + return [self autorelease]; // expected-warning{{Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected}} +} + +@end + +@implementation RDar6320065Subclass +@end + +int RDar6320065_test() { + RDar6320065 *test = [[RDar6320065 alloc] init]; // no-warning + [test release]; + return 0; +} + +//===----------------------------------------------------------------------===// +// -awakeAfterUsingCoder: returns an owned object +// and claims the receiver +//===----------------------------------------------------------------------===// + +@interface RDar7129086 : NSObject {} @end +@implementation RDar7129086 +- (id)awakeAfterUsingCoder:(NSCoder *)aDecoder { + [self release]; // no-warning + return [NSString alloc]; // no-warning +} +@end + +//===----------------------------------------------------------------------===// +// [NSData dataWithBytesNoCopy] does not return a +// retained object +//===----------------------------------------------------------------------===// + +@interface RDar6859457 : NSObject {} +- (NSString*) NoCopyString; +- (NSString*) noCopyString; +@end + +@implementation RDar6859457 +- (NSString*) NoCopyString { return [[NSString alloc] init]; } // expected-warning{{leak}} +- (NSString*) noCopyString { return [[NSString alloc] init]; } // expected-warning{{leak}} +@end + +void test_RDar6859457(RDar6859457 *x, void *bytes, NSUInteger dataLength) { + [x NoCopyString]; // expected-warning{{leak}} + [x noCopyString]; // expected-warning{{leak}} + [NSData dataWithBytesNoCopy:bytes length:dataLength]; // no-warning + [NSData dataWithBytesNoCopy:bytes length:dataLength freeWhenDone:1]; // no-warning +} + +//===----------------------------------------------------------------------===// +// PR 4230 - an autorelease pool is not necessarily leaked during a premature +// return +//===----------------------------------------------------------------------===// + +static void PR4230(void) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // no-warning + NSString *object = [[[NSString alloc] init] autorelease]; // no-warning + return; +} + +static void PR4230_new(void) +{ + NSAutoreleasePool *pool = [NSAutoreleasePool new]; // no-warning + NSString *object = [[[NSString alloc] init] autorelease]; // no-warning + return; +} + +//===----------------------------------------------------------------------===// +// Method name that has a null IdentifierInfo* for its first selector slot. +// This test just makes sure that we handle it. +//===----------------------------------------------------------------------===// + +@interface TestNullIdentifier +@end + +@implementation TestNullIdentifier ++ (id):(int)x, ... { + return [[NSString alloc] init]; // expected-warning{{leak}} +} +@end + +//===----------------------------------------------------------------------===// +// don't flag leaks for return types that cannot be +// determined to be CF types +//===----------------------------------------------------------------------===// + +// We don't know if 'struct s6893565' represents a Core Foundation type, so +// we shouldn't emit an error here. +typedef struct s6893565* TD6893565; + +@interface RDar6893565 {} +-(TD6893565)newThing; +@end + +@implementation RDar6893565 +-(TD6893565)newThing { + return (TD6893565) [[NSString alloc] init]; // no-warning +} +@end + +//===----------------------------------------------------------------------===// +// clang: false positives w/QC and CoreImage methods +//===----------------------------------------------------------------------===// + +void rdar6902710(QCView *view, QCRenderer *renderer, CIContext *context, + NSString *str, CIImage *img, CGRect rect, + CIFormat form, CGColorSpaceRef cs) { + [view createSnapshotImageOfType:str]; // expected-warning{{leak}} + [renderer createSnapshotImageOfType:str]; // expected-warning{{leak}} + [context createCGImage:img fromRect:rect]; // expected-warning{{leak}} + [context createCGImage:img fromRect:rect format:form colorSpace:cs]; // expected-warning{{leak}} +} + +//===----------------------------------------------------------------------===// +// -[CIContext createCGLayerWithSize:info:] +// misinterpreted by clang scan-build +//===----------------------------------------------------------------------===// + +void rdar6945561(CIContext *context, CGSize size, CFDictionaryRef d) { + [context createCGLayerWithSize:size info:d]; // expected-warning{{leak}} +} + +//===----------------------------------------------------------------------===// +// add knowledge of IOKit functions to retain/release +// checker +//===----------------------------------------------------------------------===// + +void IOBSDNameMatching_wrapper(mach_port_t masterPort, uint32_t options, const char * bsdName) { + IOBSDNameMatching(masterPort, options, bsdName); // expected-warning{{leak}} +} + +void IOServiceMatching_wrapper(const char * name) { + IOServiceMatching(name); // expected-warning{{leak}} +} + +void IOServiceNameMatching_wrapper(const char * name) { + IOServiceNameMatching(name); // expected-warning{{leak}} +} + +CF_RETURNS_RETAINED CFDictionaryRef CreateDict(); + +void IOServiceAddNotification_wrapper(mach_port_t masterPort, const io_name_t notificationType, + mach_port_t wakePort, uintptr_t reference, io_iterator_t * notification ) { + + CFDictionaryRef matching = CreateDict(); + CFRelease(matching); + IOServiceAddNotification(masterPort, notificationType, matching, // expected-warning{{used after it is released}} expected-warning{{deprecated}} + wakePort, reference, notification); +} + +void IORegistryEntryIDMatching_wrapper(uint64_t entryID ) { + IORegistryEntryIDMatching(entryID); // expected-warning{{leak}} +} + +void IOOpenFirmwarePathMatching_wrapper(mach_port_t masterPort, uint32_t options, + const char * path) { + IOOpenFirmwarePathMatching(masterPort, options, path); // expected-warning{{leak}} +} + +void IOServiceGetMatchingService_wrapper(mach_port_t masterPort) { + CFDictionaryRef matching = CreateDict(); + IOServiceGetMatchingService(masterPort, matching); + CFRelease(matching); // expected-warning{{used after it is released}} +} + +void IOServiceGetMatchingServices_wrapper(mach_port_t masterPort, io_iterator_t *existing) { + CFDictionaryRef matching = CreateDict(); + IOServiceGetMatchingServices(masterPort, matching, existing); + CFRelease(matching); // expected-warning{{used after it is released}} +} + +void IOServiceAddMatchingNotification_wrapper(IONotificationPortRef notifyPort, const io_name_t notificationType, + IOServiceMatchingCallback callback, void * refCon, io_iterator_t * notification) { + + CFDictionaryRef matching = CreateDict(); + IOServiceAddMatchingNotification(notifyPort, notificationType, matching, callback, refCon, notification); + CFRelease(matching); // expected-warning{{used after it is released}} +} + +//===----------------------------------------------------------------------===// +// Test of handling objects whose references "escape" to containers. +//===----------------------------------------------------------------------===// + +void CFDictionaryAddValue(CFMutableDictionaryRef, void *, void *); + +// +void rdar_6539791(CFMutableDictionaryRef y, void* key, void* val_key) { + CFMutableDictionaryRef x = CFDictionaryCreateMutable(kCFAllocatorDefault, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); + CFDictionaryAddValue(y, key, x); + CFRelease(x); // the dictionary keeps a reference, so the object isn't deallocated yet + signed z = 1; + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); + if (value) { + CFDictionaryAddValue(x, val_key, (void*)value); // no-warning + CFRelease(value); + CFDictionaryAddValue(y, val_key, (void*)value); // no-warning + } +} + +// +// Same issue, except with "AppendValue" functions. +void rdar_6560661(CFMutableArrayRef x) { + signed z = 1; + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); + // CFArrayAppendValue keeps a reference to value. + CFArrayAppendValue(x, value); + CFRelease(value); + CFRetain(value); + CFRelease(value); // no-warning +} + +// +// Same issue, excwept with "CFAttributeStringSetAttribute". +void rdar_7152619(CFStringRef str) { + CFAttributedStringRef string = CFAttributedStringCreate(kCFAllocatorDefault, str, 0); + CFMutableAttributedStringRef attrString = CFAttributedStringCreateMutableCopy(kCFAllocatorDefault, 100, string); + CFRelease(string); + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning{{leak}} + CFAttributedStringSetAttribute(attrString, CFRangeMake(0, 1), str, number); + [number release]; + [number retain]; + CFRelease(attrString); +} + +//===----------------------------------------------------------------------===// +// Test of handling CGGradientXXX functions. +//===----------------------------------------------------------------------===// + +void rdar_7184450(CGContextRef myContext, CGFloat x, CGPoint myStartPoint, + CGPoint myEndPoint) { + size_t num_locations = 6; + CGFloat locations[6] = { 0.0, 0.265, 0.28, 0.31, 0.36, 1.0 }; + CGFloat components[28] = { 239.0/256.0, 167.0/256.0, 170.0/256.0, + x, // Start color + 207.0/255.0, 39.0/255.0, 39.0/255.0, x, + 147.0/255.0, 21.0/255.0, 22.0/255.0, x, + 175.0/255.0, 175.0/255.0, 175.0/255.0, x, + 255.0/255.0,255.0/255.0, 255.0/255.0, x, + 255.0/255.0,255.0/255.0, 255.0/255.0, x + }; // End color + + CGGradientRef myGradient = + CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), // expected-warning{{leak}} + components, locations, num_locations); + + CGContextDrawLinearGradient(myContext, myGradient, myStartPoint, myEndPoint, + 0); + CGGradientRelease(myGradient); +} + +void rdar_7184450_pos(CGContextRef myContext, CGFloat x, CGPoint myStartPoint, + CGPoint myEndPoint) { + size_t num_locations = 6; + CGFloat locations[6] = { 0.0, 0.265, 0.28, 0.31, 0.36, 1.0 }; + CGFloat components[28] = { 239.0/256.0, 167.0/256.0, 170.0/256.0, + x, // Start color + 207.0/255.0, 39.0/255.0, 39.0/255.0, x, + 147.0/255.0, 21.0/255.0, 22.0/255.0, x, + 175.0/255.0, 175.0/255.0, 175.0/255.0, x, + 255.0/255.0,255.0/255.0, 255.0/255.0, x, + 255.0/255.0,255.0/255.0, 255.0/255.0, x + }; // End color + + CGGradientRef myGradient = + CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), components, locations, num_locations); // expected-warning 2 {{leak}} + + CGContextDrawLinearGradient(myContext, myGradient, myStartPoint, myEndPoint, + 0); +} + +//===----------------------------------------------------------------------===// +// clang false positive: retained instance passed to +// thread in pthread_create marked as leak +// +// Until we have full IPA, the analyzer should stop tracking the reference +// count of objects passed to pthread_create. +// +//===----------------------------------------------------------------------===// + +struct _opaque_pthread_t {}; +struct _opaque_pthread_attr_t {}; +typedef struct _opaque_pthread_t *__darwin_pthread_t; +typedef struct _opaque_pthread_attr_t __darwin_pthread_attr_t; +typedef __darwin_pthread_t pthread_t; +typedef __darwin_pthread_attr_t pthread_attr_t; +typedef unsigned long __darwin_pthread_key_t; +typedef __darwin_pthread_key_t pthread_key_t; + +int pthread_create(pthread_t *, const pthread_attr_t *, + void *(*)(void *), void *); + +int pthread_setspecific(pthread_key_t key, const void *value); + +void *rdar_7299394_start_routine(void *p) { + [((id) p) release]; + return 0; +} +void rdar_7299394(pthread_attr_t *attr, pthread_t *thread, void *args) { + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + pthread_create(thread, attr, rdar_7299394_start_routine, number); +} +void rdar_7299394_positive(pthread_attr_t *attr, pthread_t *thread) { + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning{{leak}} +} + +//===----------------------------------------------------------------------===// +// false positive with not understanding thread +// local storage +//===----------------------------------------------------------------------===// + +void rdar11282706(pthread_key_t key) { + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + pthread_setspecific(key, (void*) number); +} + +//===----------------------------------------------------------------------===// +// False leak associated with call to +// CVPixelBufferCreateWithBytes () +// +// According to the Core Video Reference (ADC), CVPixelBufferCreateWithBytes and +// CVPixelBufferCreateWithPlanarBytes can release (via a callback) the +// pixel buffer object. These test cases show how the analyzer stops tracking +// the reference count for the objects passed for this argument. This +// could be made smarter. +//===----------------------------------------------------------------------===// + +typedef int int32_t; +typedef UInt32 FourCharCode; +typedef FourCharCode OSType; +typedef uint64_t CVOptionFlags; +typedef int32_t CVReturn; +typedef struct __CVBuffer *CVBufferRef; +typedef CVBufferRef CVImageBufferRef; +typedef CVImageBufferRef CVPixelBufferRef; +typedef void (*CVPixelBufferReleaseBytesCallback)( void *releaseRefCon, const void *baseAddress ); + +extern CVReturn CVPixelBufferCreateWithBytes(CFAllocatorRef allocator, + size_t width, + size_t height, + OSType pixelFormatType, + void *baseAddress, + size_t bytesPerRow, + CVPixelBufferReleaseBytesCallback releaseCallback, + void *releaseRefCon, + CFDictionaryRef pixelBufferAttributes, + CVPixelBufferRef *pixelBufferOut) ; + +typedef void (*CVPixelBufferReleasePlanarBytesCallback)( void *releaseRefCon, const void *dataPtr, size_t dataSize, size_t numberOfPlanes, const void *planeAddresses[] ); + +extern CVReturn CVPixelBufferCreateWithPlanarBytes(CFAllocatorRef allocator, + size_t width, + size_t height, + OSType pixelFormatType, + void *dataPtr, + size_t dataSize, + size_t numberOfPlanes, + void *planeBaseAddress[], + size_t planeWidth[], + size_t planeHeight[], + size_t planeBytesPerRow[], + CVPixelBufferReleasePlanarBytesCallback releaseCallback, + void *releaseRefCon, + CFDictionaryRef pixelBufferAttributes, + CVPixelBufferRef *pixelBufferOut) ; + +extern CVReturn CVPixelBufferCreateWithBytes(CFAllocatorRef allocator, + size_t width, + size_t height, + OSType pixelFormatType, + void *baseAddress, + size_t bytesPerRow, + CVPixelBufferReleaseBytesCallback releaseCallback, + void *releaseRefCon, + CFDictionaryRef pixelBufferAttributes, + CVPixelBufferRef *pixelBufferOut) ; + +CVReturn rdar_7283567(CFAllocatorRef allocator, size_t width, size_t height, + OSType pixelFormatType, void *baseAddress, + size_t bytesPerRow, + CVPixelBufferReleaseBytesCallback releaseCallback, + CFDictionaryRef pixelBufferAttributes, + CVPixelBufferRef *pixelBufferOut) { + + // For the allocated object, it doesn't really matter what type it is + // for the purpose of this test. All we want to show is that + // this is freed later by the callback. + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + + return CVPixelBufferCreateWithBytes(allocator, width, height, pixelFormatType, + baseAddress, bytesPerRow, releaseCallback, + number, // potentially released by callback + pixelBufferAttributes, pixelBufferOut) ; +} + +CVReturn rdar_7283567_2(CFAllocatorRef allocator, size_t width, size_t height, + OSType pixelFormatType, void *dataPtr, size_t dataSize, + size_t numberOfPlanes, void *planeBaseAddress[], + size_t planeWidth[], size_t planeHeight[], size_t planeBytesPerRow[], + CVPixelBufferReleasePlanarBytesCallback releaseCallback, + CFDictionaryRef pixelBufferAttributes, + CVPixelBufferRef *pixelBufferOut) { + + // For the allocated object, it doesn't really matter what type it is + // for the purpose of this test. All we want to show is that + // this is freed later by the callback. + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + + return CVPixelBufferCreateWithPlanarBytes(allocator, + width, height, pixelFormatType, dataPtr, dataSize, + numberOfPlanes, planeBaseAddress, planeWidth, + planeHeight, planeBytesPerRow, releaseCallback, + number, // potentially released by callback + pixelBufferAttributes, pixelBufferOut) ; +} + +//===----------------------------------------------------------------------===// +// False leak associated with +// CGBitmapContextCreateWithData +//===----------------------------------------------------------------------===// +typedef uint32_t CGBitmapInfo; +typedef void (*CGBitmapContextReleaseDataCallback)(void *releaseInfo, void *data); + +CGContextRef CGBitmapContextCreateWithData(void *data, + size_t width, size_t height, size_t bitsPerComponent, + size_t bytesPerRow, CGColorSpaceRef space, CGBitmapInfo bitmapInfo, + CGBitmapContextReleaseDataCallback releaseCallback, void *releaseInfo); + +void rdar_7358899(void *data, + size_t width, size_t height, size_t bitsPerComponent, + size_t bytesPerRow, CGColorSpaceRef space, CGBitmapInfo bitmapInfo, + CGBitmapContextReleaseDataCallback releaseCallback) { + + // For the allocated object, it doesn't really matter what type it is + // for the purpose of this test. All we want to show is that + // this is freed later by the callback. + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + + CGBitmapContextCreateWithData(data, width, height, bitsPerComponent, // expected-warning{{leak}} + bytesPerRow, space, bitmapInfo, releaseCallback, number); +} + +//===----------------------------------------------------------------------===// +// allow 'new', 'copy', 'alloc', 'init' prefix to +// start before '_' when determining Cocoa fundamental rule +// +// Previously the retain/release checker just skipped prefixes before the +// first '_' entirely. Now the checker honors the prefix if it results in a +// recognizable naming convention (e.g., 'new', 'init'). +//===----------------------------------------------------------------------===// + +@interface RDar7265711 {} +- (id) new_stuff; +@end + +void rdar7265711_a(RDar7265711 *x) { + id y = [x new_stuff]; // expected-warning{{leak}} +} + +void rdar7265711_b(RDar7265711 *x) { + id y = [x new_stuff]; // no-warning + [y release]; +} + +//===----------------------------------------------------------------------===// +// clang thinks [NSCursor dragCopyCursor] returns a +// retained reference +//===----------------------------------------------------------------------===// + +@interface NSCursor : NSObject ++ (NSCursor *)dragCopyCursor; +@end + +void rdar7306898(void) { + // 'dragCopyCursor' does not follow Cocoa's fundamental rule. It is a noun, not an sentence + // implying a 'copy' of something. + NSCursor *c = [NSCursor dragCopyCursor]; // no-warning + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning{{leak}} +} + +//===----------------------------------------------------------------------===// +// sending 'release', 'retain', etc. to a Class +// directly is not likely what the user intended +//===----------------------------------------------------------------------===// + +@interface RDar7252064 : NSObject @end +void rdar7252064(void) { + [RDar7252064 release]; // expected-warning{{The 'release' message should be sent to instances of class 'RDar7252064' and not the class directly}} + [RDar7252064 retain]; // expected-warning{{The 'retain' message should be sent to instances of class 'RDar7252064' and not the class directly}} + [RDar7252064 autorelease]; // expected-warning{{The 'autorelease' message should be sent to instances of class 'RDar7252064' and not the class directly}} + [NSAutoreleasePool drain]; // expected-warning{{method '+drain' not found}} expected-warning{{The 'drain' message should be sent to instances of class 'NSAutoreleasePool' and not the class directly}} +} + +//===----------------------------------------------------------------------===// +// Tests of ownership attributes. +//===----------------------------------------------------------------------===// + +typedef NSString* MyStringTy; + +@protocol FooP; + +@interface TestOwnershipAttr : NSObject +- (NSString*) returnsAnOwnedString NS_RETURNS_RETAINED; // no-warning +- (NSString*) returnsAnOwnedCFString CF_RETURNS_RETAINED; // no-warning +- (MyStringTy) returnsAnOwnedTypedString NS_RETURNS_RETAINED; // no-warning +- (NSString*) newString NS_RETURNS_NOT_RETAINED; // no-warning +- (NSString*) newString_auto NS_RETURNS_AUTORELEASED; // no-warning +- (NSString*) newStringNoAttr; +- (int) returnsAnOwnedInt NS_RETURNS_RETAINED; // expected-warning{{'ns_returns_retained' attribute only applies to methods that return an Objective-C object}} +- (id) pseudoInit NS_CONSUMES_SELF NS_RETURNS_RETAINED; ++ (void) consume:(id) NS_CONSUMED x; ++ (void) consume2:(id) CF_CONSUMED x; +@end + +static int ownership_attribute_doesnt_go_here NS_RETURNS_RETAINED; // expected-warning{{'ns_returns_retained' attribute only applies to functions and methods}} + +void test_attr_1(TestOwnershipAttr *X) { + NSString *str = [X returnsAnOwnedString]; // expected-warning{{leak}} +} + +void test_attr_1b(TestOwnershipAttr *X) { + NSString *str = [X returnsAnOwnedCFString]; // expected-warning{{leak}} +} + +void test_attr1c(TestOwnershipAttr *X) { + NSString *str = [X newString]; // no-warning + NSString *str2 = [X newStringNoAttr]; // expected-warning{{leak}} + NSString *str3 = [X newString_auto]; // no-warning + NSString *str4 = [[X newString_auto] retain]; // expected-warning {{leak}} +} + +void testattr2_a() { + TestOwnershipAttr *x = [TestOwnershipAttr alloc]; // expected-warning{{leak}} +} + +void testattr2_b() { + TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit]; // expected-warning{{leak}} +} + +void testattr2_b_11358224_self_assign_looses_the_leak() { + TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit];// expected-warning{{leak}} + x = x; +} + +void testattr2_c() { + TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit]; // no-warning + [x release]; +} + +void testattr3() { + TestOwnershipAttr *x = [TestOwnershipAttr alloc]; // no-warning + [TestOwnershipAttr consume:x]; + TestOwnershipAttr *y = [TestOwnershipAttr alloc]; // no-warning + [TestOwnershipAttr consume2:y]; +} + +void consume_ns(id NS_CONSUMED x); +void consume_cf(id CF_CONSUMED x); + +void testattr4() { + TestOwnershipAttr *x = [TestOwnershipAttr alloc]; // no-warning + consume_ns(x); + TestOwnershipAttr *y = [TestOwnershipAttr alloc]; // no-warning + consume_cf(y); +} + +@interface TestOwnershipAttr2 : NSObject +- (NSString*) newString NS_RETURNS_NOT_RETAINED; // no-warning +@end + +@implementation TestOwnershipAttr2 +- (NSString*) newString { + return [NSString alloc]; // expected-warning {{Potential leak of an object}} +} +@end + +@interface MyClassTestCFAttr : NSObject {} +- (NSDate*) returnsCFRetained CF_RETURNS_RETAINED; +- (CFDateRef) returnsCFRetainedAsCF CF_RETURNS_RETAINED; +- (CFDateRef) newCFRetainedAsCF CF_RETURNS_NOT_RETAINED; +- (CFDateRef) newCFRetainedAsCFNoAttr; +- (NSDate*) alsoReturnsRetained; +- (CFDateRef) alsoReturnsRetainedAsCF; +- (NSDate*) returnsNSRetained NS_RETURNS_RETAINED; +@end + +CF_RETURNS_RETAINED +CFDateRef returnsRetainedCFDate() { + return CFDateCreate(0, CFAbsoluteTimeGetCurrent()); +} + +@implementation MyClassTestCFAttr +- (NSDate*) returnsCFRetained { + return (NSDate*) returnsRetainedCFDate(); // No leak. +} + +- (CFDateRef) returnsCFRetainedAsCF { + return returnsRetainedCFDate(); // No leak. +} + +- (CFDateRef) newCFRetainedAsCF { + return (CFDateRef)[(id)[self returnsCFRetainedAsCF] autorelease]; +} + +- (CFDateRef) newCFRetainedAsCFNoAttr { + return (CFDateRef)[(id)[self returnsCFRetainedAsCF] autorelease]; // expected-warning{{Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected}} +} + +- (NSDate*) alsoReturnsRetained { + return (NSDate*) returnsRetainedCFDate(); // expected-warning{{leak}} +} + +- (CFDateRef) alsoReturnsRetainedAsCF { + return returnsRetainedCFDate(); // expected-warning{{leak}} +} + + +- (NSDate*) returnsNSRetained { + return (NSDate*) returnsRetainedCFDate(); // no-warning +} +@end + +//===----------------------------------------------------------------------===// +// Test that leaks post-dominated by "panic" functions are not reported. +// +// do not report a leak when post-dominated by a call +// to a noreturn or panic function +//===----------------------------------------------------------------------===// + +void panic() __attribute__((noreturn)); +void panic_not_in_hardcoded_list() __attribute__((noreturn)); + +void test_panic_negative() { + signed z = 1; + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); // expected-warning{{leak}} +} + +void test_panic_positive() { + signed z = 1; + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); // no-warning + panic(); +} + +void test_panic_neg_2(int x) { + signed z = 1; + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); // expected-warning{{leak}} + if (x) + panic(); +} + +void test_panic_pos_2(int x) { + signed z = 1; + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); // no-warning + if (x) + panic(); + if (!x) { + // This showed up in , where we silently missed checking + // the function type for noreturn. "panic()" is a hard-coded known panic function + // that isn't always noreturn. + panic_not_in_hardcoded_list(); + } +} + +//===----------------------------------------------------------------------===// +// Test uses of blocks (closures) +//===----------------------------------------------------------------------===// + +void test_blocks_1_pos(void) { + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning{{leak}} + ^{}(); +} + +void test_blocks_1_indirect_release(void) { + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + ^{ [number release]; }(); +} + +void test_blocks_1_indirect_retain(void) { + // Eventually this should be reported as a leak. + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + ^{ [number retain]; }(); +} + +void test_blocks_1_indirect_release_via_call(void) { + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + ^(NSObject *o){ [o release]; }(number); +} + +void test_blocks_1_indirect_retain_via_call(void) { + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning {{leak}} + ^(NSObject *o){ [o retain]; }(number); +} + +//===--------------------------------------------------------------------===// +// Test sending message to super that returns an object alias. Previously +// this caused a crash in the analyzer. +//===--------------------------------------------------------------------===// + +@interface Rdar8015556 : NSObject {} @end +@implementation Rdar8015556 +- (id)retain { + return [super retain]; +} +@end + +// - Correcly handle Class<...> in Cocoa Conventions +// detector. + +@protocol Prot_R8272168 @end +Class GetAClassThatImplementsProt_R8272168(); +void r8272168() { + GetAClassThatImplementsProt_R8272168(); +} + +// Test case for , which in the past triggered +// a false positive. +@interface RDar8356342 +- (NSDate*) rdar8356342:(NSDate *)inValue; +@end + +@implementation RDar8356342 +- (NSDate*) rdar8356342:(NSDate*)inValue { + NSDate *outValue = inValue; + if (outValue == 0) + outValue = [[NSDate alloc] init]; // no-warning + + if (outValue != inValue) + [outValue autorelease]; + + return outValue; +} +@end + +// - This test case previously crashed because +// of a bug in BugReporter. +extern const void *CFDictionaryGetValue(CFDictionaryRef theDict, const void *key); +typedef struct __CFError * CFErrorRef; +extern const CFStringRef kCFErrorUnderlyingErrorKey; +extern CFDictionaryRef CFErrorCopyUserInfo(CFErrorRef err); +static void rdar_8724287(CFErrorRef error) +{ + CFErrorRef error_to_dump; + + error_to_dump = error; + while (error_to_dump != ((void*)0)) { + CFDictionaryRef info; + + info = CFErrorCopyUserInfo(error_to_dump); // expected-warning{{Potential leak of an object}} + + if (info != ((void*)0)) { + } + + error_to_dump = (CFErrorRef) CFDictionaryGetValue(info, kCFErrorUnderlyingErrorKey); + } +} + +// - Make sure the model applies cf_consumed +// correctly in argument positions besides the first. +extern void *CFStringCreate(void); +extern void rdar_9234108_helper(void *key, void * CF_CONSUMED value); +void rdar_9234108() { + rdar_9234108_helper(0, CFStringCreate()); +} + +// - Make sure that objc_method_family works +// to override naming conventions. +struct TwoDoubles { + double one; + double two; +}; +typedef struct TwoDoubles TwoDoubles; + +@interface NSValue (Mine) +- (id)_prefix_initWithTwoDoubles:(TwoDoubles)twoDoubles __attribute__((objc_method_family(init))); +@end + +@implementation NSValue (Mine) +- (id)_prefix_initWithTwoDoubles:(TwoDoubles)twoDoubles +{ + return [self init]; +} +@end + +void rdar9726279() { + TwoDoubles twoDoubles = { 0.0, 0.0 }; + NSValue *value = [[NSValue alloc] _prefix_initWithTwoDoubles:twoDoubles]; + [value release]; +} + +// +// Test camelcase support for CF conventions. While Core Foundation APIs +// don't use camel casing, other code is allowed to use it. +CFArrayRef camelcase_create_1() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + +CFArrayRef camelcase_createno() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning {{leak}} +} + +CFArrayRef camelcase_copy() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + +CFArrayRef camelcase_copying() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning {{leak}} +} + +CFArrayRef copyCamelCase() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + +CFArrayRef __copyCamelCase() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + +CFArrayRef __createCamelCase() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + +CFArrayRef camel_create() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + + +CFArrayRef camel_creat() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning {{leak}} +} + +CFArrayRef camel_copy() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + +CFArrayRef camel_copyMachine() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + +CFArrayRef camel_copymachine() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning {{leak}} +} + +// rdar://problem/8024350 +@protocol F18P +- (id) clone; +@end +@interface F18 : NSObject @end +@interface F18(Cat) +- (id) clone NS_RETURNS_RETAINED; +@end + +@implementation F18 +- (id) clone { + return [F18 alloc]; +} +@end + +// Radar 6582778. +void rdar6582778(void) { + CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); + CFTypeRef vals[] = { CFDateCreate(0, t) }; // expected-warning {{leak}} +} + +CFTypeRef global; + +void rdar6582778_2(void) { + CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); + global = CFDateCreate(0, t); // no-warning +} + +// - Test that objects passed to containers +// are marked "escaped". + +void rdar10232019() { + NSMutableArray *array = [NSMutableArray array]; + + NSString *string = [[NSString alloc] initWithUTF8String:"foo"]; + [array addObject:string]; + [string release]; + + NSString *otherString = [string stringByAppendingString:@"bar"]; // no-warning + NSLog(@"%@", otherString); +} + +void rdar10232019_positive() { + NSMutableArray *array = [NSMutableArray array]; + + NSString *string = [[NSString alloc] initWithUTF8String:"foo"]; + [string release]; + + NSString *otherString = [string stringByAppendingString:@"bar"]; // expected-warning {{Reference-counted object is used after it is release}} + NSLog(@"%@", otherString); +} + +// RetainCountChecker support for XPC. +// +typedef void * xpc_object_t; +xpc_object_t _CFXPCCreateXPCObjectFromCFObject(CFTypeRef cf); +void xpc_release(xpc_object_t object); + +void rdar9658496() { + CFStringRef cf; + xpc_object_t xpc; + cf = CFStringCreateWithCString( ((CFAllocatorRef)0), "test", kCFStringEncodingUTF8 ); // no-warning + xpc = _CFXPCCreateXPCObjectFromCFObject( cf ); + CFRelease(cf); + xpc_release(xpc); +} + +// Support annotations with method families. +@interface RDar10824732 : NSObject +- (id)initWithObj:(id CF_CONSUMED)obj; +@end + +@implementation RDar10824732 +- (id)initWithObj:(id)obj { + [obj release]; + return [super init]; +} +@end + +void rdar_10824732() { + @autoreleasepool { + NSString *obj = @"test"; + RDar10824732 *foo = [[RDar10824732 alloc] initWithObj:obj]; // no-warning + [foo release]; + } +} + +// Stop tracking objects passed to functions, which take callbacks as parameters. +// radar://10973977 +typedef int (*CloseCallback) (void *); +void ReaderForIO(CloseCallback ioclose, void *ioctx); +int IOClose(void *context); + +@protocol SInS +@end + +@interface radar10973977 : NSObject +- (id)inputS; +- (void)reader; +@end + +@implementation radar10973977 +- (void)reader +{ + id inputS = [[self inputS] retain]; + ReaderForIO(IOClose, inputS); +} +- (id)inputS +{ + return 0; +} +@end + +// Object escapes through a selector callback: radar://11398514 +extern id NSApp; +@interface MySheetController +- (id)inputS; +- (void)showDoSomethingSheetAction:(id)action; +- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo; +@end + +@implementation MySheetController +- (id)inputS { + return 0; +} +- (void)showDoSomethingSheetAction:(id)action { + id inputS = [[self inputS] retain]; + [NSApp beginSheet:0 + modalForWindow:0 + modalDelegate:0 + didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) + contextInfo:(void *)inputS]; // no - warning +} +- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo { + + id contextObject = (id)contextInfo; + [contextObject release]; +} + +- (id)copyAutoreleaseRadar13081402 { + id x = [[[NSString alloc] initWithUTF8String:"foo"] autorelease]; + [x retain]; + return x; // no warning +} + +@end +//===----------------------------------------------------------------------===// +// Test returning allocated memory in a struct. +// +// We currently don't have a general way to track pointers that "escape". +// Here we test that RetainCountChecker doesn't get excited about returning +// allocated CF objects in struct fields. +//===----------------------------------------------------------------------===// +void *malloc(size_t); +struct rdar11104566 { CFStringRef myStr; }; +struct rdar11104566 test_rdar11104566() { + CFStringRef cf = CFStringCreateWithCString( ((CFAllocatorRef)0), "test", kCFStringEncodingUTF8 ); // no-warning + struct rdar11104566 V; + V.myStr = cf; + return V; // no-warning +} + +struct rdar11104566 *test_2_rdar11104566() { + CFStringRef cf = CFStringCreateWithCString( ((CFAllocatorRef)0), "test", kCFStringEncodingUTF8 ); // no-warning + struct rdar11104566 *V = (struct rdar11104566 *) malloc(sizeof(*V)); + V->myStr = cf; + return V; // no-warning +} + +//===----------------------------------------------------------------------===// +// ObjC literals support. +//===----------------------------------------------------------------------===// + +void test_objc_arrays() { + { // CASE ONE -- OBJECT IN ARRAY CREATED DIRECTLY + NSObject *o = [[NSObject alloc] init]; + NSArray *a = [[NSArray alloc] initWithObjects:o, (void*)0]; // expected-warning {{leak}} + [o release]; + [a description]; + [o description]; + } + + { // CASE TWO -- OBJECT IN ARRAY CREATED BY DUPING AUTORELEASED ARRAY + NSObject *o = [[NSObject alloc] init]; + NSArray *a1 = [NSArray arrayWithObjects:o, (void*)0]; + NSArray *a2 = [[NSArray alloc] initWithArray:a1]; // expected-warning {{leak}} + [o release]; + [a2 description]; + [o description]; + } + + { // CASE THREE -- OBJECT IN RETAINED @[] + NSObject *o = [[NSObject alloc] init]; + NSArray *a3 = [@[o] retain]; // expected-warning {{leak}} + [o release]; + [a3 description]; + [o description]; + } + + { // CASE FOUR -- OBJECT IN ARRAY CREATED BY DUPING @[] + NSObject *o = [[NSObject alloc] init]; + NSArray *a = [[NSArray alloc] initWithArray:@[o]]; // expected-warning {{leak}} + [o release]; + + [a description]; + [o description]; + } + + { // CASE FIVE -- OBJECT IN RETAINED @{} + NSValue *o = [[NSValue alloc] init]; + NSDictionary *a = [@{o : o} retain]; // expected-warning {{leak}} + [o release]; + + [a description]; + [o description]; + } +} + +void test_objc_integer_literals() { + id value = [@1 retain]; // expected-warning {{leak}} + [value description]; +} + +void test_objc_boxed_expressions(int x, const char *y) { + id value = [@(x) retain]; // expected-warning {{leak}} + [value description]; + + value = [@(y) retain]; // expected-warning {{leak}} + [value description]; +} + +// Test NSLog doesn't escape tracked objects. +void rdar11400885(int y) +{ + @autoreleasepool { + NSString *printString; + if(y > 2) + printString = [[NSString alloc] init]; + else + printString = [[NSString alloc] init]; + NSLog(@"Once %@", printString); + [printString release]; + NSLog(@"Again: %@", printString); // expected-warning {{Reference-counted object is used after it is released}} + } +} + +id makeCollectableNonLeak() { + extern CFTypeRef CFCreateSomething(); + + CFTypeRef object = CFCreateSomething(); // +1 + CFRetain(object); // +2 + id objCObject = NSMakeCollectable(object); // +2 + [objCObject release]; // +1 + return [objCObject autorelease]; // +0 +} + + +void consumeAndStopTracking(id NS_CONSUMED obj, void (^callback)(void)); +void CFConsumeAndStopTracking(CFTypeRef CF_CONSUMED obj, void (^callback)(void)); + +void testConsumeAndStopTracking() { + id retained = [@[] retain]; // +1 + consumeAndStopTracking(retained, ^{}); // no-warning + + id doubleRetained = [[@[] retain] retain]; // +2 + consumeAndStopTracking(doubleRetained, ^{ + [doubleRetained release]; + }); // no-warning + + id unretained = @[]; // +0 + consumeAndStopTracking(unretained, ^{}); // expected-warning {{Incorrect decrement of the reference count of an object that is not owned at this point by the caller}} +} + +void testCFConsumeAndStopTracking() { + id retained = [@[] retain]; // +1 + CFConsumeAndStopTracking((CFTypeRef)retained, ^{}); // no-warning + + id doubleRetained = [[@[] retain] retain]; // +2 + CFConsumeAndStopTracking((CFTypeRef)doubleRetained, ^{ + [doubleRetained release]; + }); // no-warning + + id unretained = @[]; // +0 + CFConsumeAndStopTracking((CFTypeRef)unretained, ^{}); // expected-warning {{Incorrect decrement of the reference count of an object that is not owned at this point by the caller}} +} +//===----------------------------------------------------------------------===// +// Test 'pragma clang arc_cf_code_audited' support. +//===----------------------------------------------------------------------===// + +typedef void *MyCFType; +#pragma clang arc_cf_code_audited begin +MyCFType CreateMyCFType(); +#pragma clang arc_cf_code_audited end + +void test_custom_cf() { + MyCFType x = CreateMyCFType(); // expected-warning {{leak of an object stored into 'x'}} +} + +//===----------------------------------------------------------------------===// +// Test calling CFPlugInInstanceCreate, which appears in CF but doesn't +// return a CF object. +//===----------------------------------------------------------------------===// + +void test_CFPlugInInstanceCreate(CFUUIDRef factoryUUID, CFUUIDRef typeUUID) { + CFPlugInInstanceCreate(kCFAllocatorDefault, factoryUUID, typeUUID); // no-warning +} + +//===----------------------------------------------------------------------===// +// PR14927: -drain only has retain-count semantics on NSAutoreleasePool. +//===----------------------------------------------------------------------===// + +@interface PR14927 : NSObject +- (void)drain; +@end + +void test_drain() { + PR14927 *obj = [[PR14927 alloc] init]; + [obj drain]; + [obj release]; // no-warning +} + +//===----------------------------------------------------------------------===// +// Allow cf_returns_retained and cf_returns_not_retained to mark a return +// value as tracked, even if the object isn't a known CF type. +//===----------------------------------------------------------------------===// + +MyCFType getCustom() __attribute__((cf_returns_not_retained)); +MyCFType makeCustom() __attribute__((cf_returns_retained)); + +void testCustomReturnsRetained() { + MyCFType obj = makeCustom(); // expected-warning {{leak of an object stored into 'obj'}} +} + +void testCustomReturnsNotRetained() { + CFRelease(getCustom()); // expected-warning {{Incorrect decrement of the reference count of an object that is not owned at this point by the caller}} +} + +//===----------------------------------------------------------------------===// +// Don't print variables which are out of the current scope. +//===----------------------------------------------------------------------===// +@interface MyObj12706177 : NSObject +-(id)initX; ++(void)test12706177; +@end +static int Cond; +@implementation MyObj12706177 +-(id)initX { + if (Cond) + return 0; + self = [super init]; + return self; +} ++(void)test12706177 { + id x = [[MyObj12706177 alloc] initX]; //expected-warning {{Potential leak of an object}} + [x release]; +} +@end + +//===----------------------------------------------------------------------===// +// xpc_connection_set_finalizer_f +//===----------------------------------------------------------------------===// + +typedef xpc_object_t xpc_connection_t; +typedef void (*xpc_finalizer_t)(void *value); +void xpc_connection_set_context(xpc_connection_t connection, void *ctx); +void xpc_connection_set_finalizer_f(xpc_connection_t connection, + xpc_finalizer_t finalizer); +void releaseAfterXPC(void *context) { + [(NSArray *)context release]; +} + +void rdar13783514(xpc_connection_t connection) { + xpc_connection_set_context(connection, [[NSMutableArray alloc] init]); + xpc_connection_set_finalizer_f(connection, releaseAfterXPC); +} // no-warning + +CFAttributedStringRef CFAttributedCreate(void *CFObj CF_CONSUMED) CF_RETURNS_RETAINED; + +@interface Action +- (SEL)action; +- (void)setAction:(SEL)aSelector; +- (id) target; +- (void)setTarget:(id)aTarget; +@end diff --git a/test/ARCMT/objcmt-arc-cf-annotations.m.result b/test/ARCMT/objcmt-arc-cf-annotations.m.result new file mode 100644 index 000000000000..7e0a9042f5e6 --- /dev/null +++ b/test/ARCMT/objcmt-arc-cf-annotations.m.result @@ -0,0 +1,2093 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fblocks -objcmt-migrate-annotation -objcmt-migrate-instancetype -objcmt-migrate-readwrite-property -mt-migrate-directory %t %s -x objective-c -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c %s.result + +#ifndef CF_IMPLICIT_BRIDGING_ENABLED +#if __has_feature(arc_cf_code_audited) +#define CF_IMPLICIT_BRIDGING_ENABLED _Pragma("clang arc_cf_code_audited begin") +#else +#define CF_IMPLICIT_BRIDGING_ENABLED +#endif +#endif + +#ifndef CF_IMPLICIT_BRIDGING_DISABLED +#if __has_feature(arc_cf_code_audited) +#define CF_IMPLICIT_BRIDGING_DISABLED _Pragma("clang arc_cf_code_audited end") +#else +#define CF_IMPLICIT_BRIDGING_DISABLED +#endif +#endif + +#if __has_feature(attribute_ns_returns_retained) +#define NS_RETURNS_RETAINED __attribute__((ns_returns_retained)) +#endif +#if __has_feature(attribute_cf_returns_retained) +#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) +#endif +#if __has_feature(attribute_ns_returns_not_retained) +#define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) +#endif +#if __has_feature(attribute_cf_returns_not_retained) +#define CF_RETURNS_NOT_RETAINED __attribute__((cf_returns_not_retained)) +#endif +#if __has_feature(attribute_ns_consumes_self) +#define NS_CONSUMES_SELF __attribute__((ns_consumes_self)) +#endif +#if __has_feature(attribute_ns_consumed) +#define NS_CONSUMED __attribute__((ns_consumed)) +#endif +#if __has_feature(attribute_cf_consumed) +#define CF_CONSUMED __attribute__((cf_consumed)) +#endif +#if __has_attribute(ns_returns_autoreleased) +#define NS_RETURNS_AUTORELEASED __attribute__((ns_returns_autoreleased)) +#endif + +//===----------------------------------------------------------------------===// +// The following code is reduced using delta-debugging from Mac OS X headers: +// +// #include +// #include +// #include +// #include +// #include +// #include +// +// It includes the basic definitions for the test cases below. +//===----------------------------------------------------------------------===// + +typedef unsigned int __darwin_natural_t; +typedef unsigned long uintptr_t; +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; +typedef unsigned int UInt32; +typedef signed long CFIndex; +typedef CFIndex CFByteOrder; +typedef struct { + CFIndex location; + CFIndex length; +} CFRange; +static __inline__ __attribute__((always_inline)) CFRange CFRangeMake(CFIndex loc, CFIndex len) { + CFRange range; + range.location = loc; + range.length = len; + return range; +} +typedef const void * CFTypeRef; +typedef const struct __CFString * CFStringRef; +typedef const struct __CFAllocator * CFAllocatorRef; +extern const CFAllocatorRef kCFAllocatorDefault; +extern CFTypeRef CFRetain(CFTypeRef cf); + +CF_IMPLICIT_BRIDGING_ENABLED + +extern void CFRelease(CFTypeRef cf); + +CF_IMPLICIT_BRIDGING_DISABLED + +extern CFTypeRef CFMakeCollectable(CFTypeRef cf); +typedef struct { +} +CFArrayCallBacks; +extern const CFArrayCallBacks kCFTypeArrayCallBacks; +typedef const struct __CFArray * CFArrayRef; +typedef struct __CFArray * CFMutableArrayRef; +extern CFMutableArrayRef CFArrayCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFArrayCallBacks *callBacks) CF_RETURNS_RETAINED; +extern const void *CFArrayGetValueAtIndex(CFArrayRef theArray, CFIndex idx) CF_RETURNS_NOT_RETAINED; +extern void CFArrayAppendValue(CFMutableArrayRef theArray, const void *value); +typedef struct { +} +CFDictionaryKeyCallBacks; +extern const CFDictionaryKeyCallBacks kCFTypeDictionaryKeyCallBacks; +typedef struct { +} +CFDictionaryValueCallBacks; +extern const CFDictionaryValueCallBacks kCFTypeDictionaryValueCallBacks; +typedef const struct __CFDictionary * CFDictionaryRef; +typedef struct __CFDictionary * CFMutableDictionaryRef; +extern CFMutableDictionaryRef CFDictionaryCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFDictionaryKeyCallBacks *keyCallBacks, const CFDictionaryValueCallBacks *valueCallBacks) CF_RETURNS_RETAINED; +typedef UInt32 CFStringEncoding; +enum { +kCFStringEncodingMacRoman = 0, kCFStringEncodingWindowsLatin1 = 0x0500, kCFStringEncodingISOLatin1 = 0x0201, kCFStringEncodingNextStepLatin = 0x0B01, kCFStringEncodingASCII = 0x0600, kCFStringEncodingUnicode = 0x0100, kCFStringEncodingUTF8 = 0x08000100, kCFStringEncodingNonLossyASCII = 0x0BFF , kCFStringEncodingUTF16 = 0x0100, kCFStringEncodingUTF16BE = 0x10000100, kCFStringEncodingUTF16LE = 0x14000100, kCFStringEncodingUTF32 = 0x0c000100, kCFStringEncodingUTF32BE = 0x18000100, kCFStringEncodingUTF32LE = 0x1c000100 }; +extern CFStringRef CFStringCreateWithCString(CFAllocatorRef alloc, const char *cStr, CFStringEncoding encoding) CF_RETURNS_RETAINED; +typedef double CFTimeInterval; +typedef CFTimeInterval CFAbsoluteTime; +extern CFAbsoluteTime CFAbsoluteTimeGetCurrent(void); +typedef const struct __CFDate * CFDateRef; +extern CFDateRef CFDateCreate(CFAllocatorRef allocator, CFAbsoluteTime at) CF_RETURNS_RETAINED; +extern CFAbsoluteTime CFDateGetAbsoluteTime(CFDateRef theDate); +typedef __darwin_natural_t natural_t; +typedef natural_t mach_port_name_t; +typedef mach_port_name_t mach_port_t; +typedef int kern_return_t; +typedef kern_return_t mach_error_t; +enum { +kCFNumberSInt8Type = 1, kCFNumberSInt16Type = 2, kCFNumberSInt32Type = 3, kCFNumberSInt64Type = 4, kCFNumberFloat32Type = 5, kCFNumberFloat64Type = 6, kCFNumberCharType = 7, kCFNumberShortType = 8, kCFNumberIntType = 9, kCFNumberLongType = 10, kCFNumberLongLongType = 11, kCFNumberFloatType = 12, kCFNumberDoubleType = 13, kCFNumberCFIndexType = 14, kCFNumberNSIntegerType = 15, kCFNumberCGFloatType = 16, kCFNumberMaxType = 16 }; +typedef CFIndex CFNumberType; +typedef const struct __CFNumber * CFNumberRef; +extern CFNumberRef CFNumberCreate(CFAllocatorRef allocator, CFNumberType theType, const void *valuePtr) CF_RETURNS_RETAINED; +typedef const struct __CFAttributedString *CFAttributedStringRef; +typedef struct __CFAttributedString *CFMutableAttributedStringRef; +extern CFAttributedStringRef CFAttributedStringCreate(CFAllocatorRef alloc, CFStringRef str, CFDictionaryRef attributes) CF_RETURNS_RETAINED ; +extern CFMutableAttributedStringRef CFAttributedStringCreateMutableCopy(CFAllocatorRef alloc, CFIndex maxLength, CFAttributedStringRef aStr) CF_RETURNS_RETAINED ; +extern void CFAttributedStringSetAttribute(CFMutableAttributedStringRef aStr, CFRange range, CFStringRef attrName, CFTypeRef value) ; +typedef signed char BOOL; +typedef unsigned long NSUInteger; +@class NSString, Protocol; +extern void NSLog(NSString *format, ...) __attribute__((format(__NSString__, 1, 2))); +typedef struct _NSZone NSZone; +@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; +@protocol NSObject +- (BOOL)isEqual:(id)object; +- (id)retain; +- (oneway void)release; +- (id)autorelease; +- (NSString *)description; +- (instancetype)init; +@end +@protocol NSCopying +- (id)copyWithZone:(NSZone *)zone; +@end +@protocol NSMutableCopying - (id)mutableCopyWithZone:(NSZone *)zone; +@end +@protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder; +@end +@interface NSObject {} ++ (id)allocWithZone:(NSZone *)zone; ++ (id)alloc; ++ (id)new; +- (void)dealloc; +@end +@interface NSObject (NSCoderMethods) +- (id)awakeAfterUsingCoder:(NSCoder *)aDecoder; +@end +extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone); +typedef struct { +} +NSFastEnumerationState; +@protocol NSFastEnumeration +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len; +@end +@class NSString, NSDictionary; +@interface NSValue : NSObject - (void)getValue:(void *)value; +@end +@interface NSNumber : NSValue +- (char)charValue; +- (instancetype)initWithInt:(int)value; ++ (NSNumber *)numberWithInt:(int)value; +@end +@class NSString; +@interface NSArray : NSObject +- (NSUInteger)count; +- (instancetype)initWithObjects:(const id [])objects count:(NSUInteger)cnt; ++ (instancetype)arrayWithObject:(id)anObject; ++ (instancetype)arrayWithObjects:(const id [])objects count:(NSUInteger)cnt; ++ (instancetype)arrayWithObjects:(id)firstObj, ... __attribute__((sentinel(0,1))); +- (instancetype)initWithObjects:(id)firstObj, ... __attribute__((sentinel(0,1))); +- (instancetype)initWithArray:(NSArray *)array; +@end @interface NSArray (NSArrayCreation) + (instancetype)array; +@end @interface NSAutoreleasePool : NSObject { +} +- (void)drain; +@end extern NSString * const NSBundleDidLoadNotification; +typedef double NSTimeInterval; +@interface NSDate : NSObject - (NSTimeInterval)timeIntervalSinceReferenceDate; +@end typedef unsigned short unichar; +@interface NSString : NSObject +- (NSUInteger)length; +- (NSString *)stringByAppendingString:(NSString *)aString; +- ( const char *)UTF8String; +- (instancetype)initWithUTF8String:(const char *)nullTerminatedCString; ++ (instancetype)stringWithUTF8String:(const char *)nullTerminatedCString; +@end @class NSString, NSURL, NSError; +@interface NSData : NSObject - (NSUInteger)length; ++ (instancetype)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length; ++ (instancetype)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)b; +@end @class NSLocale, NSDate, NSCalendar, NSTimeZone, NSError, NSArray, NSMutableDictionary; +@interface NSDictionary : NSObject +- (NSUInteger)count; ++ (instancetype)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; ++ (instancetype)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(NSUInteger)cnt; +@end +@interface NSMutableDictionary : NSDictionary - (void)removeObjectForKey:(id)aKey; +- (void)setObject:(id)anObject forKey:(id)aKey; +@end @interface NSMutableDictionary (NSMutableDictionaryCreation) + (instancetype)dictionaryWithCapacity:(NSUInteger)numItems; +@end typedef double CGFloat; +struct CGSize { +}; +typedef struct CGSize CGSize; +struct CGRect { +}; +typedef struct CGRect CGRect; +typedef mach_port_t io_object_t; +typedef char io_name_t[128]; +typedef io_object_t io_iterator_t; +typedef io_object_t io_service_t; +typedef struct IONotificationPort * IONotificationPortRef; +typedef void (*IOServiceMatchingCallback)( void * refcon, io_iterator_t iterator ); + +CF_IMPLICIT_BRIDGING_ENABLED + +io_service_t IOServiceGetMatchingService( mach_port_t masterPort, CFDictionaryRef matching ); +kern_return_t IOServiceGetMatchingServices( mach_port_t masterPort, CFDictionaryRef matching, io_iterator_t * existing ); + +CF_IMPLICIT_BRIDGING_DISABLED + +kern_return_t IOServiceAddNotification( mach_port_t masterPort, const io_name_t notificationType, CFDictionaryRef matching, mach_port_t wakePort, uintptr_t reference, io_iterator_t * notification ) __attribute__((deprecated)); // expected-note {{'IOServiceAddNotification' declared here}} +kern_return_t IOServiceAddMatchingNotification( IONotificationPortRef notifyPort, const io_name_t notificationType, CFDictionaryRef CF_CONSUMED matching, IOServiceMatchingCallback callback, void * refCon, io_iterator_t * notification ); + +CF_IMPLICIT_BRIDGING_ENABLED + +CFMutableDictionaryRef IOServiceMatching( const char * name ); +CFMutableDictionaryRef IOServiceNameMatching( const char * name ); +CFMutableDictionaryRef IOBSDNameMatching( mach_port_t masterPort, uint32_t options, const char * bsdName ); +CFMutableDictionaryRef IOOpenFirmwarePathMatching( mach_port_t masterPort, uint32_t options, const char * path ); +CFMutableDictionaryRef IORegistryEntryIDMatching( uint64_t entryID ); + +CF_IMPLICIT_BRIDGING_DISABLED + +typedef struct __DASession * DASessionRef; +extern DASessionRef DASessionCreate( CFAllocatorRef allocator ) CF_RETURNS_RETAINED; +typedef struct __DADisk * DADiskRef; +extern DADiskRef DADiskCreateFromBSDName( CFAllocatorRef allocator, DASessionRef session, const char * name ) CF_RETURNS_RETAINED; +extern DADiskRef DADiskCreateFromIOMedia( CFAllocatorRef allocator, DASessionRef session, io_service_t media ) CF_RETURNS_RETAINED; +extern CFDictionaryRef DADiskCopyDescription( DADiskRef disk ) CF_RETURNS_RETAINED; +extern DADiskRef DADiskCopyWholeDisk( DADiskRef disk ) CF_RETURNS_RETAINED; +@interface NSTask : NSObject - (instancetype)init; +@end typedef struct CGColorSpace *CGColorSpaceRef; +typedef struct CGImage *CGImageRef; +typedef struct CGLayer *CGLayerRef; +@interface NSResponder : NSObject { +} +@end @protocol NSAnimatablePropertyContainer - (id)animator; +@end extern NSString *NSAnimationTriggerOrderIn ; +@interface NSView : NSResponder { +} +@end @protocol NSValidatedUserInterfaceItem - (SEL)action; +@end @protocol NSUserInterfaceValidations - (BOOL)validateUserInterfaceItem:(id )anItem; +@end @class NSDate, NSDictionary, NSError, NSException, NSNotification; +@class NSTextField, NSPanel, NSArray, NSWindow, NSImage, NSButton, NSError; +@interface NSApplication : NSResponder { +} +- (void)beginSheet:(NSWindow *)sheet modalForWindow:(NSWindow *)docWindow modalDelegate:(id)modalDelegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo; +@end enum { +NSTerminateCancel = 0, NSTerminateNow = 1, NSTerminateLater = 2 }; +typedef NSUInteger NSApplicationTerminateReply; +@protocol NSApplicationDelegate @optional - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender; +@end @class NSAttributedString, NSEvent, NSFont, NSFormatter, NSImage, NSMenu, NSText, NSView, NSTextView; +@interface NSCell : NSObject { +} +@end +typedef struct { +} +CVTimeStamp; +@interface CIImage : NSObject { +} +typedef int CIFormat; +@end enum { +kDAReturnSuccess = 0, kDAReturnError = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x01, kDAReturnBusy = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x02, kDAReturnBadArgument = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x03, kDAReturnExclusiveAccess = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x04, kDAReturnNoResources = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x05, kDAReturnNotFound = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x06, kDAReturnNotMounted = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x07, kDAReturnNotPermitted = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x08, kDAReturnNotPrivileged = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x09, kDAReturnNotReady = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x0A, kDAReturnNotWritable = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x0B, kDAReturnUnsupported = (((0x3eU)&0x3f)<<26) | (((0x368)&0xfff)<<14) | 0x0C }; +typedef mach_error_t DAReturn; +typedef const struct __DADissenter * DADissenterRef; +extern DADissenterRef DADissenterCreate( CFAllocatorRef allocator, DAReturn status, CFStringRef string ) CF_RETURNS_RETAINED; +@interface CIContext: NSObject { +} +- (CGImageRef)createCGImage:(CIImage *)im fromRect:(CGRect)r CF_RETURNS_RETAINED; +- (CGImageRef)createCGImage:(CIImage *)im fromRect:(CGRect)r format:(CIFormat)f colorSpace:(CGColorSpaceRef)cs CF_RETURNS_RETAINED; +- (CGLayerRef)createCGLayerWithSize:(CGSize)size info:(CFDictionaryRef)d CF_RETURNS_RETAINED; +@end extern NSString* const QCRendererEventKey; +@protocol QCCompositionRenderer - (NSDictionary*) attributes; +@end @interface QCRenderer : NSObject { +} +- (id) createSnapshotImageOfType:(NSString*)type; +@end extern NSString* const QCViewDidStartRenderingNotification; +@interface QCView : NSView { +} +- (id) createSnapshotImageOfType:(NSString*)type; +@end enum { +ICEXIFOrientation1 = 1, ICEXIFOrientation2 = 2, ICEXIFOrientation3 = 3, ICEXIFOrientation4 = 4, ICEXIFOrientation5 = 5, ICEXIFOrientation6 = 6, ICEXIFOrientation7 = 7, ICEXIFOrientation8 = 8, }; +@class ICDevice; +@protocol ICDeviceDelegate @required - (void)didRemoveDevice:(ICDevice*)device; +@end extern NSString *const ICScannerStatusWarmingUp; +@class ICScannerDevice; +@protocol ICScannerDeviceDelegate @optional - (void)scannerDeviceDidBecomeAvailable:(ICScannerDevice*)scanner; +@end + +typedef long unsigned int __darwin_size_t; +typedef __darwin_size_t size_t; +typedef unsigned long CFTypeID; +struct CGPoint { + CGFloat x; + CGFloat y; +}; +typedef struct CGPoint CGPoint; +typedef struct CGGradient *CGGradientRef; +typedef uint32_t CGGradientDrawingOptions; +extern CFTypeID CGGradientGetTypeID(void); +extern CGGradientRef CGGradientCreateWithColorComponents(CGColorSpaceRef + space, const CGFloat components[], const CGFloat locations[], size_t count) CF_RETURNS_RETAINED; +extern CGGradientRef CGGradientCreateWithColors(CGColorSpaceRef space, + CFArrayRef colors, const CGFloat locations[]) CF_RETURNS_RETAINED; +extern CGGradientRef CGGradientRetain(CGGradientRef gradient); + +CF_IMPLICIT_BRIDGING_ENABLED + +extern void CGGradientRelease(CGGradientRef gradient); + +CF_IMPLICIT_BRIDGING_DISABLED + +typedef struct CGContext *CGContextRef; +extern void CGContextDrawLinearGradient(CGContextRef context, + CGGradientRef gradient, CGPoint startPoint, CGPoint endPoint, + CGGradientDrawingOptions options); + +CF_IMPLICIT_BRIDGING_ENABLED + +extern CGColorSpaceRef CGColorSpaceCreateDeviceRGB(void); + +CF_IMPLICIT_BRIDGING_DISABLED + + +@interface NSMutableArray : NSObject +- (void)addObject:(id)object; ++ (instancetype)array; +@end + +// This is how NSMakeCollectable is declared in the OS X 10.8 headers. +id NSMakeCollectable(CFTypeRef __attribute__((cf_consumed))) __attribute__((ns_returns_retained)); + +typedef const struct __CFUUID * CFUUIDRef; + +extern +void *CFPlugInInstanceCreate(CFAllocatorRef allocator, CFUUIDRef factoryUUID, CFUUIDRef typeUUID); + +//===----------------------------------------------------------------------===// +// Test cases. +//===----------------------------------------------------------------------===// + +CFAbsoluteTime f1() { + CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); + CFDateRef date = CFDateCreate(0, t); + CFRetain(date); + CFRelease(date); + CFDateGetAbsoluteTime(date); // no-warning + CFRelease(date); + t = CFDateGetAbsoluteTime(date); // expected-warning{{Reference-counted object is used after it is released}} + return t; +} + +CFAbsoluteTime f2() { + CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); + CFDateRef date = CFDateCreate(0, t); + [((NSDate*) date) retain]; + CFRelease(date); + CFDateGetAbsoluteTime(date); // no-warning + [((NSDate*) date) release]; + t = CFDateGetAbsoluteTime(date); // expected-warning{{Reference-counted object is used after it is released}} + return t; +} + + +NSDate* global_x; + +// Test to see if we supresss an error when we store the pointer +// to a global. + +CFAbsoluteTime f3() { + CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); + CFDateRef date = CFDateCreate(0, t); + [((NSDate*) date) retain]; + CFRelease(date); + CFDateGetAbsoluteTime(date); // no-warning + global_x = (NSDate*) date; + [((NSDate*) date) release]; + t = CFDateGetAbsoluteTime(date); // no-warning + return t; +} + +//--------------------------------------------------------------------------- +// Test case 'f4' differs for region store and basic store. See +// retain-release-region-store.m and retain-release-basic-store.m. +//--------------------------------------------------------------------------- + +// Test a leak. + +CFAbsoluteTime f5(int x) { + CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); + CFDateRef date = CFDateCreate(0, t); // expected-warning{{leak}} + + if (x) + CFRelease(date); + + return t; +} + +// Test a leak involving the return. + +CFDateRef f6(int x) { + CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); // expected-warning{{leak}} + CFRetain(date); + return date; +} + +// Test a leak involving an overwrite. + +CFDateRef f7() { + CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); //expected-warning{{leak}} + CFRetain(date); + date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); // expected-warning {{leak}} + return date; +} + +// Generalization of Create rule. MyDateCreate returns a CFXXXTypeRef, and +// has the word create. + +CF_IMPLICIT_BRIDGING_ENABLED + +CFDateRef MyDateCreate(); + +CF_IMPLICIT_BRIDGING_DISABLED + + +CFDateRef f8() { + CFDateRef date = MyDateCreate(); // expected-warning{{leak}} + CFRetain(date); + return date; +} + +__attribute__((cf_returns_retained)) CFDateRef f9() { + CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); // no-warning + int *p = 0; + // When allocations fail, CFDateCreate can return null. + if (!date) *p = 1; // expected-warning{{null}} + return date; +} + +// Handle DiskArbitration API: +// +// http://developer.apple.com/DOCUMENTATION/DARWIN/Reference/DiscArbitrationFramework/ +// +void f10(io_service_t media, DADiskRef d, CFStringRef s) { + DADiskRef disk = DADiskCreateFromBSDName(kCFAllocatorDefault, 0, "hello"); // expected-warning{{leak}} + if (disk) NSLog(@"ok"); + + disk = DADiskCreateFromIOMedia(kCFAllocatorDefault, 0, media); // expected-warning{{leak}} + if (disk) NSLog(@"ok"); + + CFDictionaryRef dict = DADiskCopyDescription(d); // expected-warning{{leak}} + if (dict) NSLog(@"ok"); + + disk = DADiskCopyWholeDisk(d); // expected-warning{{leak}} + if (disk) NSLog(@"ok"); + + DADissenterRef dissenter = DADissenterCreate(kCFAllocatorDefault, // expected-warning{{leak}} + kDAReturnSuccess, s); + if (dissenter) NSLog(@"ok"); + + DASessionRef session = DASessionCreate(kCFAllocatorDefault); // expected-warning{{leak}} + if (session) NSLog(@"ok"); +} + +// Test retain/release checker with CFString and CFMutableArray. +void f11() { + // Create the array. + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + + // Create a string. + CFStringRef s1 = CFStringCreateWithCString(0, "hello world", + kCFStringEncodingUTF8); + + // Add the string to the array. + CFArrayAppendValue(A, s1); + + // Decrement the reference count. + CFRelease(s1); // no-warning + + // Get the string. We don't own it. + s1 = (CFStringRef) CFArrayGetValueAtIndex(A, 0); + + // Release the array. + CFRelease(A); // no-warning + + // Release the string. This is a bug. + CFRelease(s1); // expected-warning{{Incorrect decrement of the reference count}} +} + +// PR 3337: Handle functions declared using typedefs. +typedef CFTypeRef CREATEFUN(); + +CF_IMPLICIT_BRIDGING_ENABLED + +CFTypeRef MyCreateFun(); + +CF_IMPLICIT_BRIDGING_DISABLED + + +void f12() { + CFTypeRef o = MyCreateFun(); // expected-warning {{leak}} +} + +void f13_autorelease() { + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning + [(id) A autorelease]; // no-warning +} + +void f13_autorelease_b() { + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + [(id) A autorelease]; + [(id) A autorelease]; +} // expected-warning{{Object autoreleased too many times}} + +CFMutableArrayRef f13_autorelease_c() { + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + [(id) A autorelease]; + [(id) A autorelease]; + return A; // expected-warning{{Object autoreleased too many times}} +} + +CFMutableArrayRef f13_autorelease_d() { + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + [(id) A autorelease]; + [(id) A autorelease]; + CFMutableArrayRef B = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning{{Object autoreleased too many times}} + CFRelease(B); // no-warning + while (1) {} +} + + +// This case exercises the logic where the leak site is the same as the allocation site. +void f14_leakimmediately() { + CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning{{leak}} +} + +// Test that we track an allocated object beyond the point where the *name* +// of the variable storing the reference is no longer live. +void f15() { + // Create the array. + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + CFMutableArrayRef *B = &A; + // At this point, the name 'A' is no longer live. + CFRelease(*B); // no-warning +} + +// Test when we pass NULL to CFRetain/CFRelease/CFMakeCollectable. +void f16(int x, CFTypeRef p) { + if (p) + return; + + if (x > 0) { + CFRelease(p); // expected-warning{{Null pointer argument in call to CFRelease}} + } + else if (x < 0) { + CFRetain(p); // expected-warning{{Null pointer argument in call to CFRetain}} + } + else { + CFMakeCollectable(p); // expected-warning{{Null pointer argument in call to CFMakeCollectable}} + } +} + +// Test that an object is non-null after being CFRetained/CFReleased. +void f17(int x, CFTypeRef p) { + if (x > 0) { + CFRelease(p); + if (!p) + CFRelease(0); // no-warning + } + else if (x < 0) { + CFRetain(p); + if (!p) + CFRetain(0); // no-warning + } + else { + CFMakeCollectable(p); + if (!p) + CFMakeCollectable(0); // no-warning + } +} + +// Test basic tracking of ivars associated with 'self'. For the retain/release +// checker we currently do not want to flag leaks associated with stores +// of tracked objects to ivars. +@interface SelfIvarTest : NSObject { + id myObj; +} +- (void)test_self_tracking; +@end + +@implementation SelfIvarTest +- (void)test_self_tracking { + myObj = (id) CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} +@end + +// Test return of non-owned objects in contexts where an owned object +// is expected. +@interface TestReturnNotOwnedWhenExpectedOwned +- (NSString*)newString; +@end + +@implementation TestReturnNotOwnedWhenExpectedOwned +- (NSString*)newString { + NSString *s = [NSString stringWithUTF8String:"hello"]; + return s; // expected-warning{{Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected}} +} +@end + +// +int isFoo(char c); + +static void rdar_6659160(char *inkind, char *inname) +{ + // We currently expect that [NSObject alloc] cannot fail. This + // will be a toggled flag in the future. It can indeed return null, but + // Cocoa programmers generally aren't expected to reason about out-of-memory + // conditions. + NSString *kind = [[NSString alloc] initWithUTF8String:inkind]; // expected-warning{{leak}} + + // We do allow stringWithUTF8String to fail. This isn't really correct, as + // far as returning 0. In most error conditions it will throw an exception. + // If allocation fails it could return 0, but again this + // isn't expected. + NSString *name = [NSString stringWithUTF8String:inname]; + if(!name) + return; + + const char *kindC = 0; + const char *nameC = 0; + + // In both cases, we cannot reach a point down below where we + // dereference kindC or nameC with either being null. This is because + // we assume that [NSObject alloc] doesn't fail and that we have the guard + // up above. + + if(kind) + kindC = [kind UTF8String]; + if(name) + nameC = [name UTF8String]; + if(!isFoo(kindC[0])) // expected-warning{{null}} + return; + if(!isFoo(nameC[0])) // no-warning + return; + + [kind release]; + [name release]; // expected-warning{{Incorrect decrement of the reference count}} +} + +// PR 3677 - 'allocWithZone' should be treated as following the Cocoa naming +// conventions with respect to 'return'ing ownership. +@interface PR3677: NSObject @end +@implementation PR3677 ++ (id)allocWithZone:(NSZone *)inZone { + return [super allocWithZone:inZone]; // no-warning +} +@end + +// PR 3820 - Reason about calls to -dealloc +void pr3820_DeallocInsteadOfRelease(void) +{ + id foo = [[NSString alloc] init]; // no-warning + [foo dealloc]; + // foo is not leaked, since it has been deallocated. +} + +void pr3820_ReleaseAfterDealloc(void) +{ + id foo = [[NSString alloc] init]; + [foo dealloc]; + [foo release]; // expected-warning{{used after it is release}} + // NSInternalInconsistencyException: message sent to deallocated object +} + +void pr3820_DeallocAfterRelease(void) +{ + NSLog(@"\n\n[%s]", __FUNCTION__); + id foo = [[NSString alloc] init]; + [foo release]; + [foo dealloc]; // expected-warning{{used after it is released}} + // message sent to released object +} + +// From . The problem here is that 'length' binds to +// '($0 - 1)' after '--length', but SimpleConstraintManager doesn't know how to +// reason about '($0 - 1) > constant'. As a temporary hack, we drop the value +// of '($0 - 1)' and conjure a new symbol. +void rdar6704930(unsigned char *s, unsigned int length) { + NSString* name = 0; + if (s != 0) { + if (length > 0) { + while (length > 0) { + if (*s == ':') { + ++s; + --length; + name = [[NSString alloc] init]; // no-warning + break; + } + ++s; + --length; + } + if ((length == 0) && (name != 0)) { + [name release]; + name = 0; + } + if (length == 0) { // no ':' found -> use it all as name + name = [[NSString alloc] init]; // no-warning + } + } + } + + if (name != 0) { + [name release]; + } +} + +//===----------------------------------------------------------------------===// +// +// One build of the analyzer accidentally stopped tracking the allocated +// object after the 'retain'. +//===----------------------------------------------------------------------===// + +@interface rdar_6833332 : NSObject { + NSWindow *window; +} +@property (nonatomic, retain) NSWindow *window; +@end + +@implementation rdar_6833332 +@synthesize window; +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { + NSMutableDictionary *dict = [[NSMutableDictionary dictionaryWithCapacity:4] retain]; // expected-warning{{leak}} + + [dict setObject:@"foo" forKey:@"bar"]; + + NSLog(@"%@", dict); +} +- (void)dealloc { + [window release]; + [super dealloc]; +} + +- (void)radar10102244 { + NSMutableDictionary *dict = [[NSMutableDictionary dictionaryWithCapacity:4] retain]; // expected-warning{{leak}} + if (window) + NSLog(@"%@", window); +} +@end + +//===----------------------------------------------------------------------===// +// clang checker fails to catch use-after-release +//===----------------------------------------------------------------------===// + +int rdar_6257780_Case1() { + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + NSArray *array = [NSArray array]; + [array release]; // expected-warning{{Incorrect decrement of the reference count of an object that is not owned at this point by the caller}} + [pool drain]; + return 0; +} + +//===----------------------------------------------------------------------===// +// Analyzer is confused about NSAutoreleasePool -allocWithZone:. +//===----------------------------------------------------------------------===// + +void rdar_10640253_autorelease_allocWithZone() { + NSAutoreleasePool *pool = [[NSAutoreleasePool allocWithZone:(NSZone*)0] init]; + (void) pool; +} + +//===----------------------------------------------------------------------===// +// Checker should understand new/setObject:/release constructs +//===----------------------------------------------------------------------===// + +void rdar_6866843() { + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] init]; + NSArray* array = [[NSArray alloc] init]; + [dictionary setObject:array forKey:@"key"]; + [array release]; + // Using 'array' here should be fine + NSLog(@"array = %@\n", array); // no-warning + // Now the array is released + [dictionary release]; + [pool drain]; +} + + +//===----------------------------------------------------------------------===// +// Classes typedef-ed to CF objects should get the same treatment as CF objects +//===----------------------------------------------------------------------===// + +typedef CFTypeRef OtherRef; + +@interface RDar6877235 : NSObject {} +- (CFTypeRef)_copyCFTypeRef CF_RETURNS_RETAINED; +- (OtherRef)_copyOtherRef CF_RETURNS_RETAINED; +@end + +@implementation RDar6877235 +- (CFTypeRef)_copyCFTypeRef { + return [[NSString alloc] init]; // no-warning +} +- (OtherRef)_copyOtherRef { + return [[NSString alloc] init]; // no-warning +} +@end + +//===----------------------------------------------------------------------===// +// false positive - init method returns an object +// owned by caller +//===----------------------------------------------------------------------===// + +@interface RDar6320065 : NSObject { + NSString *_foo; +} +- (instancetype)initReturningNewClass; +- (id)_initReturningNewClassBad; +- (instancetype)initReturningNewClassBad2; +@end + +@interface RDar6320065Subclass : RDar6320065 +@end + +@implementation RDar6320065 +- (instancetype)initReturningNewClass { + [self release]; + self = [[RDar6320065Subclass alloc] init]; // no-warning + return self; +} +- (id)_initReturningNewClassBad { + [self release]; + [[RDar6320065Subclass alloc] init]; // expected-warning {{leak}} + return self; +} +- (instancetype)initReturningNewClassBad2 { + [self release]; + self = [[RDar6320065Subclass alloc] init]; + return [self autorelease]; // expected-warning{{Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected}} +} + +@end + +@implementation RDar6320065Subclass +@end + +int RDar6320065_test() { + RDar6320065 *test = [[RDar6320065 alloc] init]; // no-warning + [test release]; + return 0; +} + +//===----------------------------------------------------------------------===// +// -awakeAfterUsingCoder: returns an owned object +// and claims the receiver +//===----------------------------------------------------------------------===// + +@interface RDar7129086 : NSObject {} @end +@implementation RDar7129086 +- (id)awakeAfterUsingCoder:(NSCoder *)aDecoder { + [self release]; // no-warning + return [NSString alloc]; // no-warning +} +@end + +//===----------------------------------------------------------------------===// +// [NSData dataWithBytesNoCopy] does not return a +// retained object +//===----------------------------------------------------------------------===// + +@interface RDar6859457 : NSObject {} +- (NSString*) NoCopyString; +- (NSString*) noCopyString; +@end + +@implementation RDar6859457 +- (NSString*) NoCopyString { return [[NSString alloc] init]; } // expected-warning{{leak}} +- (NSString*) noCopyString { return [[NSString alloc] init]; } // expected-warning{{leak}} +@end + +void test_RDar6859457(RDar6859457 *x, void *bytes, NSUInteger dataLength) { + [x NoCopyString]; // expected-warning{{leak}} + [x noCopyString]; // expected-warning{{leak}} + [NSData dataWithBytesNoCopy:bytes length:dataLength]; // no-warning + [NSData dataWithBytesNoCopy:bytes length:dataLength freeWhenDone:1]; // no-warning +} + +//===----------------------------------------------------------------------===// +// PR 4230 - an autorelease pool is not necessarily leaked during a premature +// return +//===----------------------------------------------------------------------===// + +static void PR4230(void) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // no-warning + NSString *object = [[[NSString alloc] init] autorelease]; // no-warning + return; +} + +static void PR4230_new(void) +{ + NSAutoreleasePool *pool = [NSAutoreleasePool new]; // no-warning + NSString *object = [[[NSString alloc] init] autorelease]; // no-warning + return; +} + +//===----------------------------------------------------------------------===// +// Method name that has a null IdentifierInfo* for its first selector slot. +// This test just makes sure that we handle it. +//===----------------------------------------------------------------------===// + +@interface TestNullIdentifier +@end + +@implementation TestNullIdentifier ++ (id):(int)x, ... { + return [[NSString alloc] init]; // expected-warning{{leak}} +} +@end + +//===----------------------------------------------------------------------===// +// don't flag leaks for return types that cannot be +// determined to be CF types +//===----------------------------------------------------------------------===// + +// We don't know if 'struct s6893565' represents a Core Foundation type, so +// we shouldn't emit an error here. +typedef struct s6893565* TD6893565; + +@interface RDar6893565 {} +-(TD6893565)newThing; +@end + +@implementation RDar6893565 +-(TD6893565)newThing { + return (TD6893565) [[NSString alloc] init]; // no-warning +} +@end + +//===----------------------------------------------------------------------===// +// clang: false positives w/QC and CoreImage methods +//===----------------------------------------------------------------------===// + +void rdar6902710(QCView *view, QCRenderer *renderer, CIContext *context, + NSString *str, CIImage *img, CGRect rect, + CIFormat form, CGColorSpaceRef cs) { + [view createSnapshotImageOfType:str]; // expected-warning{{leak}} + [renderer createSnapshotImageOfType:str]; // expected-warning{{leak}} + [context createCGImage:img fromRect:rect]; // expected-warning{{leak}} + [context createCGImage:img fromRect:rect format:form colorSpace:cs]; // expected-warning{{leak}} +} + +//===----------------------------------------------------------------------===// +// -[CIContext createCGLayerWithSize:info:] +// misinterpreted by clang scan-build +//===----------------------------------------------------------------------===// + +void rdar6945561(CIContext *context, CGSize size, CFDictionaryRef d) { + [context createCGLayerWithSize:size info:d]; // expected-warning{{leak}} +} + +//===----------------------------------------------------------------------===// +// add knowledge of IOKit functions to retain/release +// checker +//===----------------------------------------------------------------------===// + +void IOBSDNameMatching_wrapper(mach_port_t masterPort, uint32_t options, const char * bsdName) { + IOBSDNameMatching(masterPort, options, bsdName); // expected-warning{{leak}} +} + +void IOServiceMatching_wrapper(const char * name) { + IOServiceMatching(name); // expected-warning{{leak}} +} + +void IOServiceNameMatching_wrapper(const char * name) { + IOServiceNameMatching(name); // expected-warning{{leak}} +} + +CF_RETURNS_RETAINED CFDictionaryRef CreateDict(); + +void IOServiceAddNotification_wrapper(mach_port_t masterPort, const io_name_t notificationType, + mach_port_t wakePort, uintptr_t reference, io_iterator_t * notification ) { + + CFDictionaryRef matching = CreateDict(); + CFRelease(matching); + IOServiceAddNotification(masterPort, notificationType, matching, // expected-warning{{used after it is released}} expected-warning{{deprecated}} + wakePort, reference, notification); +} + +void IORegistryEntryIDMatching_wrapper(uint64_t entryID ) { + IORegistryEntryIDMatching(entryID); // expected-warning{{leak}} +} + +void IOOpenFirmwarePathMatching_wrapper(mach_port_t masterPort, uint32_t options, + const char * path) { + IOOpenFirmwarePathMatching(masterPort, options, path); // expected-warning{{leak}} +} + +void IOServiceGetMatchingService_wrapper(mach_port_t masterPort) { + CFDictionaryRef matching = CreateDict(); + IOServiceGetMatchingService(masterPort, matching); + CFRelease(matching); // expected-warning{{used after it is released}} +} + +void IOServiceGetMatchingServices_wrapper(mach_port_t masterPort, io_iterator_t *existing) { + CFDictionaryRef matching = CreateDict(); + IOServiceGetMatchingServices(masterPort, matching, existing); + CFRelease(matching); // expected-warning{{used after it is released}} +} + +void IOServiceAddMatchingNotification_wrapper(IONotificationPortRef notifyPort, const io_name_t notificationType, + IOServiceMatchingCallback callback, void * refCon, io_iterator_t * notification) { + + CFDictionaryRef matching = CreateDict(); + IOServiceAddMatchingNotification(notifyPort, notificationType, matching, callback, refCon, notification); + CFRelease(matching); // expected-warning{{used after it is released}} +} + +//===----------------------------------------------------------------------===// +// Test of handling objects whose references "escape" to containers. +//===----------------------------------------------------------------------===// + +void CFDictionaryAddValue(CFMutableDictionaryRef, void *, void *); + +// +void rdar_6539791(CFMutableDictionaryRef y, void* key, void* val_key) { + CFMutableDictionaryRef x = CFDictionaryCreateMutable(kCFAllocatorDefault, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); + CFDictionaryAddValue(y, key, x); + CFRelease(x); // the dictionary keeps a reference, so the object isn't deallocated yet + signed z = 1; + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); + if (value) { + CFDictionaryAddValue(x, val_key, (void*)value); // no-warning + CFRelease(value); + CFDictionaryAddValue(y, val_key, (void*)value); // no-warning + } +} + +// +// Same issue, except with "AppendValue" functions. +void rdar_6560661(CFMutableArrayRef x) { + signed z = 1; + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); + // CFArrayAppendValue keeps a reference to value. + CFArrayAppendValue(x, value); + CFRelease(value); + CFRetain(value); + CFRelease(value); // no-warning +} + +// +// Same issue, excwept with "CFAttributeStringSetAttribute". +void rdar_7152619(CFStringRef str) { + CFAttributedStringRef string = CFAttributedStringCreate(kCFAllocatorDefault, str, 0); + CFMutableAttributedStringRef attrString = CFAttributedStringCreateMutableCopy(kCFAllocatorDefault, 100, string); + CFRelease(string); + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning{{leak}} + CFAttributedStringSetAttribute(attrString, CFRangeMake(0, 1), str, number); + [number release]; + [number retain]; + CFRelease(attrString); +} + +//===----------------------------------------------------------------------===// +// Test of handling CGGradientXXX functions. +//===----------------------------------------------------------------------===// + +void rdar_7184450(CGContextRef myContext, CGFloat x, CGPoint myStartPoint, + CGPoint myEndPoint) { + size_t num_locations = 6; + CGFloat locations[6] = { 0.0, 0.265, 0.28, 0.31, 0.36, 1.0 }; + CGFloat components[28] = { 239.0/256.0, 167.0/256.0, 170.0/256.0, + x, // Start color + 207.0/255.0, 39.0/255.0, 39.0/255.0, x, + 147.0/255.0, 21.0/255.0, 22.0/255.0, x, + 175.0/255.0, 175.0/255.0, 175.0/255.0, x, + 255.0/255.0,255.0/255.0, 255.0/255.0, x, + 255.0/255.0,255.0/255.0, 255.0/255.0, x + }; // End color + + CGGradientRef myGradient = + CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), // expected-warning{{leak}} + components, locations, num_locations); + + CGContextDrawLinearGradient(myContext, myGradient, myStartPoint, myEndPoint, + 0); + CGGradientRelease(myGradient); +} + +void rdar_7184450_pos(CGContextRef myContext, CGFloat x, CGPoint myStartPoint, + CGPoint myEndPoint) { + size_t num_locations = 6; + CGFloat locations[6] = { 0.0, 0.265, 0.28, 0.31, 0.36, 1.0 }; + CGFloat components[28] = { 239.0/256.0, 167.0/256.0, 170.0/256.0, + x, // Start color + 207.0/255.0, 39.0/255.0, 39.0/255.0, x, + 147.0/255.0, 21.0/255.0, 22.0/255.0, x, + 175.0/255.0, 175.0/255.0, 175.0/255.0, x, + 255.0/255.0,255.0/255.0, 255.0/255.0, x, + 255.0/255.0,255.0/255.0, 255.0/255.0, x + }; // End color + + CGGradientRef myGradient = + CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), components, locations, num_locations); // expected-warning 2 {{leak}} + + CGContextDrawLinearGradient(myContext, myGradient, myStartPoint, myEndPoint, + 0); +} + +//===----------------------------------------------------------------------===// +// clang false positive: retained instance passed to +// thread in pthread_create marked as leak +// +// Until we have full IPA, the analyzer should stop tracking the reference +// count of objects passed to pthread_create. +// +//===----------------------------------------------------------------------===// + +struct _opaque_pthread_t {}; +struct _opaque_pthread_attr_t {}; +typedef struct _opaque_pthread_t *__darwin_pthread_t; +typedef struct _opaque_pthread_attr_t __darwin_pthread_attr_t; +typedef __darwin_pthread_t pthread_t; +typedef __darwin_pthread_attr_t pthread_attr_t; +typedef unsigned long __darwin_pthread_key_t; +typedef __darwin_pthread_key_t pthread_key_t; + +int pthread_create(pthread_t *, const pthread_attr_t *, + void *(*)(void *), void *); + +int pthread_setspecific(pthread_key_t key, const void *value); + +void *rdar_7299394_start_routine(void *p) { + [((id) p) release]; + return 0; +} +void rdar_7299394(pthread_attr_t *attr, pthread_t *thread, void *args) { + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + pthread_create(thread, attr, rdar_7299394_start_routine, number); +} +void rdar_7299394_positive(pthread_attr_t *attr, pthread_t *thread) { + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning{{leak}} +} + +//===----------------------------------------------------------------------===// +// false positive with not understanding thread +// local storage +//===----------------------------------------------------------------------===// + +void rdar11282706(pthread_key_t key) { + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + pthread_setspecific(key, (void*) number); +} + +//===----------------------------------------------------------------------===// +// False leak associated with call to +// CVPixelBufferCreateWithBytes () +// +// According to the Core Video Reference (ADC), CVPixelBufferCreateWithBytes and +// CVPixelBufferCreateWithPlanarBytes can release (via a callback) the +// pixel buffer object. These test cases show how the analyzer stops tracking +// the reference count for the objects passed for this argument. This +// could be made smarter. +//===----------------------------------------------------------------------===// + +typedef int int32_t; +typedef UInt32 FourCharCode; +typedef FourCharCode OSType; +typedef uint64_t CVOptionFlags; +typedef int32_t CVReturn; +typedef struct __CVBuffer *CVBufferRef; +typedef CVBufferRef CVImageBufferRef; +typedef CVImageBufferRef CVPixelBufferRef; +typedef void (*CVPixelBufferReleaseBytesCallback)( void *releaseRefCon, const void *baseAddress ); + +extern CVReturn CVPixelBufferCreateWithBytes(CFAllocatorRef allocator, + size_t width, + size_t height, + OSType pixelFormatType, + void *baseAddress, + size_t bytesPerRow, + CVPixelBufferReleaseBytesCallback releaseCallback, + void *releaseRefCon, + CFDictionaryRef pixelBufferAttributes, + CVPixelBufferRef *pixelBufferOut) ; + +typedef void (*CVPixelBufferReleasePlanarBytesCallback)( void *releaseRefCon, const void *dataPtr, size_t dataSize, size_t numberOfPlanes, const void *planeAddresses[] ); + +extern CVReturn CVPixelBufferCreateWithPlanarBytes(CFAllocatorRef allocator, + size_t width, + size_t height, + OSType pixelFormatType, + void *dataPtr, + size_t dataSize, + size_t numberOfPlanes, + void *planeBaseAddress[], + size_t planeWidth[], + size_t planeHeight[], + size_t planeBytesPerRow[], + CVPixelBufferReleasePlanarBytesCallback releaseCallback, + void *releaseRefCon, + CFDictionaryRef pixelBufferAttributes, + CVPixelBufferRef *pixelBufferOut) ; + +extern CVReturn CVPixelBufferCreateWithBytes(CFAllocatorRef allocator, + size_t width, + size_t height, + OSType pixelFormatType, + void *baseAddress, + size_t bytesPerRow, + CVPixelBufferReleaseBytesCallback releaseCallback, + void *releaseRefCon, + CFDictionaryRef pixelBufferAttributes, + CVPixelBufferRef *pixelBufferOut) ; + +CVReturn rdar_7283567(CFAllocatorRef allocator, size_t width, size_t height, + OSType pixelFormatType, void *baseAddress, + size_t bytesPerRow, + CVPixelBufferReleaseBytesCallback releaseCallback, + CFDictionaryRef pixelBufferAttributes, + CVPixelBufferRef *pixelBufferOut) { + + // For the allocated object, it doesn't really matter what type it is + // for the purpose of this test. All we want to show is that + // this is freed later by the callback. + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + + return CVPixelBufferCreateWithBytes(allocator, width, height, pixelFormatType, + baseAddress, bytesPerRow, releaseCallback, + number, // potentially released by callback + pixelBufferAttributes, pixelBufferOut) ; +} + +CVReturn rdar_7283567_2(CFAllocatorRef allocator, size_t width, size_t height, + OSType pixelFormatType, void *dataPtr, size_t dataSize, + size_t numberOfPlanes, void *planeBaseAddress[], + size_t planeWidth[], size_t planeHeight[], size_t planeBytesPerRow[], + CVPixelBufferReleasePlanarBytesCallback releaseCallback, + CFDictionaryRef pixelBufferAttributes, + CVPixelBufferRef *pixelBufferOut) { + + // For the allocated object, it doesn't really matter what type it is + // for the purpose of this test. All we want to show is that + // this is freed later by the callback. + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + + return CVPixelBufferCreateWithPlanarBytes(allocator, + width, height, pixelFormatType, dataPtr, dataSize, + numberOfPlanes, planeBaseAddress, planeWidth, + planeHeight, planeBytesPerRow, releaseCallback, + number, // potentially released by callback + pixelBufferAttributes, pixelBufferOut) ; +} + +//===----------------------------------------------------------------------===// +// False leak associated with +// CGBitmapContextCreateWithData +//===----------------------------------------------------------------------===// +typedef uint32_t CGBitmapInfo; +typedef void (*CGBitmapContextReleaseDataCallback)(void *releaseInfo, void *data); + +CGContextRef CGBitmapContextCreateWithData(void *data, + size_t width, size_t height, size_t bitsPerComponent, + size_t bytesPerRow, CGColorSpaceRef space, CGBitmapInfo bitmapInfo, + CGBitmapContextReleaseDataCallback releaseCallback, void *releaseInfo) CF_RETURNS_RETAINED; + +void rdar_7358899(void *data, + size_t width, size_t height, size_t bitsPerComponent, + size_t bytesPerRow, CGColorSpaceRef space, CGBitmapInfo bitmapInfo, + CGBitmapContextReleaseDataCallback releaseCallback) { + + // For the allocated object, it doesn't really matter what type it is + // for the purpose of this test. All we want to show is that + // this is freed later by the callback. + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + + CGBitmapContextCreateWithData(data, width, height, bitsPerComponent, // expected-warning{{leak}} + bytesPerRow, space, bitmapInfo, releaseCallback, number); +} + +//===----------------------------------------------------------------------===// +// allow 'new', 'copy', 'alloc', 'init' prefix to +// start before '_' when determining Cocoa fundamental rule +// +// Previously the retain/release checker just skipped prefixes before the +// first '_' entirely. Now the checker honors the prefix if it results in a +// recognizable naming convention (e.g., 'new', 'init'). +//===----------------------------------------------------------------------===// + +@interface RDar7265711 {} +- (id) new_stuff; +@end + +void rdar7265711_a(RDar7265711 *x) { + id y = [x new_stuff]; // expected-warning{{leak}} +} + +void rdar7265711_b(RDar7265711 *x) { + id y = [x new_stuff]; // no-warning + [y release]; +} + +//===----------------------------------------------------------------------===// +// clang thinks [NSCursor dragCopyCursor] returns a +// retained reference +//===----------------------------------------------------------------------===// + +@interface NSCursor : NSObject ++ (NSCursor *)dragCopyCursor; +@end + +void rdar7306898(void) { + // 'dragCopyCursor' does not follow Cocoa's fundamental rule. It is a noun, not an sentence + // implying a 'copy' of something. + NSCursor *c = [NSCursor dragCopyCursor]; // no-warning + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning{{leak}} +} + +//===----------------------------------------------------------------------===// +// sending 'release', 'retain', etc. to a Class +// directly is not likely what the user intended +//===----------------------------------------------------------------------===// + +@interface RDar7252064 : NSObject @end +void rdar7252064(void) { + [RDar7252064 release]; // expected-warning{{The 'release' message should be sent to instances of class 'RDar7252064' and not the class directly}} + [RDar7252064 retain]; // expected-warning{{The 'retain' message should be sent to instances of class 'RDar7252064' and not the class directly}} + [RDar7252064 autorelease]; // expected-warning{{The 'autorelease' message should be sent to instances of class 'RDar7252064' and not the class directly}} + [NSAutoreleasePool drain]; // expected-warning{{method '+drain' not found}} expected-warning{{The 'drain' message should be sent to instances of class 'NSAutoreleasePool' and not the class directly}} +} + +//===----------------------------------------------------------------------===// +// Tests of ownership attributes. +//===----------------------------------------------------------------------===// + +typedef NSString* MyStringTy; + +@protocol FooP; + +@interface TestOwnershipAttr : NSObject +- (NSString*) returnsAnOwnedString NS_RETURNS_RETAINED; // no-warning +- (NSString*) returnsAnOwnedCFString CF_RETURNS_RETAINED; // no-warning +- (MyStringTy) returnsAnOwnedTypedString NS_RETURNS_RETAINED; // no-warning +- (NSString*) newString NS_RETURNS_NOT_RETAINED; // no-warning +- (NSString*) newString_auto NS_RETURNS_AUTORELEASED; // no-warning +- (NSString*) newStringNoAttr; +- (int) returnsAnOwnedInt NS_RETURNS_RETAINED; // expected-warning{{'ns_returns_retained' attribute only applies to methods that return an Objective-C object}} +- (id) pseudoInit NS_CONSUMES_SELF NS_RETURNS_RETAINED; ++ (void) consume:(id) NS_CONSUMED x; ++ (void) consume2:(id) CF_CONSUMED x; +@end + +static int ownership_attribute_doesnt_go_here NS_RETURNS_RETAINED; // expected-warning{{'ns_returns_retained' attribute only applies to functions and methods}} + +void test_attr_1(TestOwnershipAttr *X) { + NSString *str = [X returnsAnOwnedString]; // expected-warning{{leak}} +} + +void test_attr_1b(TestOwnershipAttr *X) { + NSString *str = [X returnsAnOwnedCFString]; // expected-warning{{leak}} +} + +void test_attr1c(TestOwnershipAttr *X) { + NSString *str = [X newString]; // no-warning + NSString *str2 = [X newStringNoAttr]; // expected-warning{{leak}} + NSString *str3 = [X newString_auto]; // no-warning + NSString *str4 = [[X newString_auto] retain]; // expected-warning {{leak}} +} + +void testattr2_a() { + TestOwnershipAttr *x = [TestOwnershipAttr alloc]; // expected-warning{{leak}} +} + +void testattr2_b() { + TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit]; // expected-warning{{leak}} +} + +void testattr2_b_11358224_self_assign_looses_the_leak() { + TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit];// expected-warning{{leak}} + x = x; +} + +void testattr2_c() { + TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit]; // no-warning + [x release]; +} + +void testattr3() { + TestOwnershipAttr *x = [TestOwnershipAttr alloc]; // no-warning + [TestOwnershipAttr consume:x]; + TestOwnershipAttr *y = [TestOwnershipAttr alloc]; // no-warning + [TestOwnershipAttr consume2:y]; +} + +void consume_ns(id NS_CONSUMED x); +void consume_cf(id CF_CONSUMED x); + +void testattr4() { + TestOwnershipAttr *x = [TestOwnershipAttr alloc]; // no-warning + consume_ns(x); + TestOwnershipAttr *y = [TestOwnershipAttr alloc]; // no-warning + consume_cf(y); +} + +@interface TestOwnershipAttr2 : NSObject +- (NSString*) newString NS_RETURNS_NOT_RETAINED; // no-warning +@end + +@implementation TestOwnershipAttr2 +- (NSString*) newString { + return [NSString alloc]; // expected-warning {{Potential leak of an object}} +} +@end + +@interface MyClassTestCFAttr : NSObject {} +- (NSDate*) returnsCFRetained CF_RETURNS_RETAINED; +- (CFDateRef) returnsCFRetainedAsCF CF_RETURNS_RETAINED; +- (CFDateRef) newCFRetainedAsCF CF_RETURNS_NOT_RETAINED; +- (CFDateRef) newCFRetainedAsCFNoAttr CF_RETURNS_RETAINED; +- (NSDate*) alsoReturnsRetained; +- (CFDateRef) alsoReturnsRetainedAsCF CF_RETURNS_NOT_RETAINED; +- (NSDate*) returnsNSRetained NS_RETURNS_RETAINED; +@end + +CF_RETURNS_RETAINED +CFDateRef returnsRetainedCFDate() { + return CFDateCreate(0, CFAbsoluteTimeGetCurrent()); +} + +@implementation MyClassTestCFAttr +- (NSDate*) returnsCFRetained { + return (NSDate*) returnsRetainedCFDate(); // No leak. +} + +- (CFDateRef) returnsCFRetainedAsCF { + return returnsRetainedCFDate(); // No leak. +} + +- (CFDateRef) newCFRetainedAsCF { + return (CFDateRef)[(id)[self returnsCFRetainedAsCF] autorelease]; +} + +- (CFDateRef) newCFRetainedAsCFNoAttr { + return (CFDateRef)[(id)[self returnsCFRetainedAsCF] autorelease]; // expected-warning{{Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected}} +} + +- (NSDate*) alsoReturnsRetained { + return (NSDate*) returnsRetainedCFDate(); // expected-warning{{leak}} +} + +- (CFDateRef) alsoReturnsRetainedAsCF { + return returnsRetainedCFDate(); // expected-warning{{leak}} +} + + +- (NSDate*) returnsNSRetained { + return (NSDate*) returnsRetainedCFDate(); // no-warning +} +@end + +//===----------------------------------------------------------------------===// +// Test that leaks post-dominated by "panic" functions are not reported. +// +// do not report a leak when post-dominated by a call +// to a noreturn or panic function +//===----------------------------------------------------------------------===// + +void panic() __attribute__((noreturn)); +void panic_not_in_hardcoded_list() __attribute__((noreturn)); + +void test_panic_negative() { + signed z = 1; + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); // expected-warning{{leak}} +} + +void test_panic_positive() { + signed z = 1; + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); // no-warning + panic(); +} + +void test_panic_neg_2(int x) { + signed z = 1; + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); // expected-warning{{leak}} + if (x) + panic(); +} + +void test_panic_pos_2(int x) { + signed z = 1; + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); // no-warning + if (x) + panic(); + if (!x) { + // This showed up in , where we silently missed checking + // the function type for noreturn. "panic()" is a hard-coded known panic function + // that isn't always noreturn. + panic_not_in_hardcoded_list(); + } +} + +//===----------------------------------------------------------------------===// +// Test uses of blocks (closures) +//===----------------------------------------------------------------------===// + +void test_blocks_1_pos(void) { + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning{{leak}} + ^{}(); +} + +void test_blocks_1_indirect_release(void) { + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + ^{ [number release]; }(); +} + +void test_blocks_1_indirect_retain(void) { + // Eventually this should be reported as a leak. + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + ^{ [number retain]; }(); +} + +void test_blocks_1_indirect_release_via_call(void) { + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning + ^(NSObject *o){ [o release]; }(number); +} + +void test_blocks_1_indirect_retain_via_call(void) { + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning {{leak}} + ^(NSObject *o){ [o retain]; }(number); +} + +//===--------------------------------------------------------------------===// +// Test sending message to super that returns an object alias. Previously +// this caused a crash in the analyzer. +//===--------------------------------------------------------------------===// + +@interface Rdar8015556 : NSObject {} @end +@implementation Rdar8015556 +- (id)retain { + return [super retain]; +} +@end + +// - Correcly handle Class<...> in Cocoa Conventions +// detector. + +@protocol Prot_R8272168 @end +Class GetAClassThatImplementsProt_R8272168(); +void r8272168() { + GetAClassThatImplementsProt_R8272168(); +} + +// Test case for , which in the past triggered +// a false positive. +@interface RDar8356342 +- (NSDate*) rdar8356342:(NSDate *)inValue; +@end + +@implementation RDar8356342 +- (NSDate*) rdar8356342:(NSDate*)inValue { + NSDate *outValue = inValue; + if (outValue == 0) + outValue = [[NSDate alloc] init]; // no-warning + + if (outValue != inValue) + [outValue autorelease]; + + return outValue; +} +@end + +// - This test case previously crashed because +// of a bug in BugReporter. +extern const void *CFDictionaryGetValue(CFDictionaryRef theDict, const void *key) CF_RETURNS_NOT_RETAINED; +typedef struct __CFError * CFErrorRef; +extern const CFStringRef kCFErrorUnderlyingErrorKey; +extern CFDictionaryRef CFErrorCopyUserInfo(CFErrorRef err) CF_RETURNS_RETAINED; +static void rdar_8724287(CFErrorRef error) +{ + CFErrorRef error_to_dump; + + error_to_dump = error; + while (error_to_dump != ((void*)0)) { + CFDictionaryRef info; + + info = CFErrorCopyUserInfo(error_to_dump); // expected-warning{{Potential leak of an object}} + + if (info != ((void*)0)) { + } + + error_to_dump = (CFErrorRef) CFDictionaryGetValue(info, kCFErrorUnderlyingErrorKey); + } +} + +// - Make sure the model applies cf_consumed +// correctly in argument positions besides the first. + +CF_IMPLICIT_BRIDGING_ENABLED + +extern void *CFStringCreate(void); + +CF_IMPLICIT_BRIDGING_DISABLED + +extern void rdar_9234108_helper(void *key, void * CF_CONSUMED value); +void rdar_9234108() { + rdar_9234108_helper(0, CFStringCreate()); +} + +// - Make sure that objc_method_family works +// to override naming conventions. +struct TwoDoubles { + double one; + double two; +}; +typedef struct TwoDoubles TwoDoubles; + +@interface NSValue (Mine) +- (id)_prefix_initWithTwoDoubles:(TwoDoubles)twoDoubles __attribute__((objc_method_family(init))); +@end + +@implementation NSValue (Mine) +- (id)_prefix_initWithTwoDoubles:(TwoDoubles)twoDoubles +{ + return [self init]; +} +@end + +void rdar9726279() { + TwoDoubles twoDoubles = { 0.0, 0.0 }; + NSValue *value = [[NSValue alloc] _prefix_initWithTwoDoubles:twoDoubles]; + [value release]; +} + +// +// Test camelcase support for CF conventions. While Core Foundation APIs +// don't use camel casing, other code is allowed to use it. +CFArrayRef camelcase_create_1() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + +CFArrayRef camelcase_createno() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning {{leak}} +} + +CFArrayRef camelcase_copy() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + +CFArrayRef camelcase_copying() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning {{leak}} +} + +CFArrayRef copyCamelCase() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + +CFArrayRef __copyCamelCase() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + +CFArrayRef __createCamelCase() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + +CFArrayRef camel_create() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + + +CFArrayRef camel_creat() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning {{leak}} +} + +CFArrayRef camel_copy() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + +CFArrayRef camel_copyMachine() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning +} + +CFArrayRef camel_copymachine() { + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning {{leak}} +} + +// rdar://problem/8024350 +@protocol F18P +- (id) clone; +@end +@interface F18 : NSObject @end +@interface F18(Cat) +- (id) clone NS_RETURNS_RETAINED; +@end + +@implementation F18 +- (id) clone { + return [F18 alloc]; +} +@end + +// Radar 6582778. +void rdar6582778(void) { + CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); + CFTypeRef vals[] = { CFDateCreate(0, t) }; // expected-warning {{leak}} +} + +CFTypeRef global; + +void rdar6582778_2(void) { + CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); + global = CFDateCreate(0, t); // no-warning +} + +// - Test that objects passed to containers +// are marked "escaped". + +void rdar10232019() { + NSMutableArray *array = [NSMutableArray array]; + + NSString *string = [[NSString alloc] initWithUTF8String:"foo"]; + [array addObject:string]; + [string release]; + + NSString *otherString = [string stringByAppendingString:@"bar"]; // no-warning + NSLog(@"%@", otherString); +} + +void rdar10232019_positive() { + NSMutableArray *array = [NSMutableArray array]; + + NSString *string = [[NSString alloc] initWithUTF8String:"foo"]; + [string release]; + + NSString *otherString = [string stringByAppendingString:@"bar"]; // expected-warning {{Reference-counted object is used after it is release}} + NSLog(@"%@", otherString); +} + +// RetainCountChecker support for XPC. +// +typedef void * xpc_object_t; +xpc_object_t _CFXPCCreateXPCObjectFromCFObject(CFTypeRef cf); +void xpc_release(xpc_object_t object); + +void rdar9658496() { + CFStringRef cf; + xpc_object_t xpc; + cf = CFStringCreateWithCString( ((CFAllocatorRef)0), "test", kCFStringEncodingUTF8 ); // no-warning + xpc = _CFXPCCreateXPCObjectFromCFObject( cf ); + CFRelease(cf); + xpc_release(xpc); +} + +// Support annotations with method families. +@interface RDar10824732 : NSObject +- (instancetype)initWithObj:(id CF_CONSUMED)obj; +@end + +@implementation RDar10824732 +- (instancetype)initWithObj:(id)obj { + [obj release]; + return [super init]; +} +@end + +void rdar_10824732() { + @autoreleasepool { + NSString *obj = @"test"; + RDar10824732 *foo = [[RDar10824732 alloc] initWithObj:obj]; // no-warning + [foo release]; + } +} + +// Stop tracking objects passed to functions, which take callbacks as parameters. +// radar://10973977 +typedef int (*CloseCallback) (void *); +void ReaderForIO(CloseCallback ioclose, void *ioctx); +int IOClose(void *context); + +@protocol SInS +@end + +@interface radar10973977 : NSObject +- (id)inputS; +- (void)reader; +@end + +@implementation radar10973977 +- (void)reader +{ + id inputS = [[self inputS] retain]; + ReaderForIO(IOClose, inputS); +} +- (id)inputS +{ + return 0; +} +@end + +// Object escapes through a selector callback: radar://11398514 +extern id NSApp; +@interface MySheetController +- (id)inputS; +- (void)showDoSomethingSheetAction:(id)action; +- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo; +@end + +@implementation MySheetController +- (id)inputS { + return 0; +} +- (void)showDoSomethingSheetAction:(id)action { + id inputS = [[self inputS] retain]; + [NSApp beginSheet:0 + modalForWindow:0 + modalDelegate:0 + didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) + contextInfo:(void *)inputS]; // no - warning +} +- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo { + + id contextObject = (id)contextInfo; + [contextObject release]; +} + +- (id)copyAutoreleaseRadar13081402 { + id x = [[[NSString alloc] initWithUTF8String:"foo"] autorelease]; + [x retain]; + return x; // no warning +} + +@end +//===----------------------------------------------------------------------===// +// Test returning allocated memory in a struct. +// +// We currently don't have a general way to track pointers that "escape". +// Here we test that RetainCountChecker doesn't get excited about returning +// allocated CF objects in struct fields. +//===----------------------------------------------------------------------===// +void *malloc(size_t); +struct rdar11104566 { CFStringRef myStr; }; +struct rdar11104566 test_rdar11104566() { + CFStringRef cf = CFStringCreateWithCString( ((CFAllocatorRef)0), "test", kCFStringEncodingUTF8 ); // no-warning + struct rdar11104566 V; + V.myStr = cf; + return V; // no-warning +} + +struct rdar11104566 *test_2_rdar11104566() { + CFStringRef cf = CFStringCreateWithCString( ((CFAllocatorRef)0), "test", kCFStringEncodingUTF8 ); // no-warning + struct rdar11104566 *V = (struct rdar11104566 *) malloc(sizeof(*V)); + V->myStr = cf; + return V; // no-warning +} + +//===----------------------------------------------------------------------===// +// ObjC literals support. +//===----------------------------------------------------------------------===// + +void test_objc_arrays() { + { // CASE ONE -- OBJECT IN ARRAY CREATED DIRECTLY + NSObject *o = [[NSObject alloc] init]; + NSArray *a = [[NSArray alloc] initWithObjects:o, (void*)0]; // expected-warning {{leak}} + [o release]; + [a description]; + [o description]; + } + + { // CASE TWO -- OBJECT IN ARRAY CREATED BY DUPING AUTORELEASED ARRAY + NSObject *o = [[NSObject alloc] init]; + NSArray *a1 = [NSArray arrayWithObjects:o, (void*)0]; + NSArray *a2 = [[NSArray alloc] initWithArray:a1]; // expected-warning {{leak}} + [o release]; + [a2 description]; + [o description]; + } + + { // CASE THREE -- OBJECT IN RETAINED @[] + NSObject *o = [[NSObject alloc] init]; + NSArray *a3 = [@[o] retain]; // expected-warning {{leak}} + [o release]; + [a3 description]; + [o description]; + } + + { // CASE FOUR -- OBJECT IN ARRAY CREATED BY DUPING @[] + NSObject *o = [[NSObject alloc] init]; + NSArray *a = [[NSArray alloc] initWithArray:@[o]]; // expected-warning {{leak}} + [o release]; + + [a description]; + [o description]; + } + + { // CASE FIVE -- OBJECT IN RETAINED @{} + NSValue *o = [[NSValue alloc] init]; + NSDictionary *a = [@{o : o} retain]; // expected-warning {{leak}} + [o release]; + + [a description]; + [o description]; + } +} + +void test_objc_integer_literals() { + id value = [@1 retain]; // expected-warning {{leak}} + [value description]; +} + +void test_objc_boxed_expressions(int x, const char *y) { + id value = [@(x) retain]; // expected-warning {{leak}} + [value description]; + + value = [@(y) retain]; // expected-warning {{leak}} + [value description]; +} + +// Test NSLog doesn't escape tracked objects. +void rdar11400885(int y) +{ + @autoreleasepool { + NSString *printString; + if(y > 2) + printString = [[NSString alloc] init]; + else + printString = [[NSString alloc] init]; + NSLog(@"Once %@", printString); + [printString release]; + NSLog(@"Again: %@", printString); // expected-warning {{Reference-counted object is used after it is released}} + } +} + +id makeCollectableNonLeak() { + extern CFTypeRef CFCreateSomething(); + + CFTypeRef object = CFCreateSomething(); // +1 + CFRetain(object); // +2 + id objCObject = NSMakeCollectable(object); // +2 + [objCObject release]; // +1 + return [objCObject autorelease]; // +0 +} + + +void consumeAndStopTracking(id NS_CONSUMED obj, void (^callback)(void)); +void CFConsumeAndStopTracking(CFTypeRef CF_CONSUMED obj, void (^callback)(void)); + +void testConsumeAndStopTracking() { + id retained = [@[] retain]; // +1 + consumeAndStopTracking(retained, ^{}); // no-warning + + id doubleRetained = [[@[] retain] retain]; // +2 + consumeAndStopTracking(doubleRetained, ^{ + [doubleRetained release]; + }); // no-warning + + id unretained = @[]; // +0 + consumeAndStopTracking(unretained, ^{}); // expected-warning {{Incorrect decrement of the reference count of an object that is not owned at this point by the caller}} +} + +void testCFConsumeAndStopTracking() { + id retained = [@[] retain]; // +1 + CFConsumeAndStopTracking((CFTypeRef)retained, ^{}); // no-warning + + id doubleRetained = [[@[] retain] retain]; // +2 + CFConsumeAndStopTracking((CFTypeRef)doubleRetained, ^{ + [doubleRetained release]; + }); // no-warning + + id unretained = @[]; // +0 + CFConsumeAndStopTracking((CFTypeRef)unretained, ^{}); // expected-warning {{Incorrect decrement of the reference count of an object that is not owned at this point by the caller}} +} +//===----------------------------------------------------------------------===// +// Test 'pragma clang arc_cf_code_audited' support. +//===----------------------------------------------------------------------===// + +typedef void *MyCFType; +#pragma clang arc_cf_code_audited begin +MyCFType CreateMyCFType(); +#pragma clang arc_cf_code_audited end + +void test_custom_cf() { + MyCFType x = CreateMyCFType(); // expected-warning {{leak of an object stored into 'x'}} +} + +//===----------------------------------------------------------------------===// +// Test calling CFPlugInInstanceCreate, which appears in CF but doesn't +// return a CF object. +//===----------------------------------------------------------------------===// + +void test_CFPlugInInstanceCreate(CFUUIDRef factoryUUID, CFUUIDRef typeUUID) { + CFPlugInInstanceCreate(kCFAllocatorDefault, factoryUUID, typeUUID); // no-warning +} + +//===----------------------------------------------------------------------===// +// PR14927: -drain only has retain-count semantics on NSAutoreleasePool. +//===----------------------------------------------------------------------===// + +@interface PR14927 : NSObject +- (void)drain; +@end + +void test_drain() { + PR14927 *obj = [[PR14927 alloc] init]; + [obj drain]; + [obj release]; // no-warning +} + +//===----------------------------------------------------------------------===// +// Allow cf_returns_retained and cf_returns_not_retained to mark a return +// value as tracked, even if the object isn't a known CF type. +//===----------------------------------------------------------------------===// + +MyCFType getCustom() __attribute__((cf_returns_not_retained)); +MyCFType makeCustom() __attribute__((cf_returns_retained)); + +void testCustomReturnsRetained() { + MyCFType obj = makeCustom(); // expected-warning {{leak of an object stored into 'obj'}} +} + +void testCustomReturnsNotRetained() { + CFRelease(getCustom()); // expected-warning {{Incorrect decrement of the reference count of an object that is not owned at this point by the caller}} +} + +//===----------------------------------------------------------------------===// +// Don't print variables which are out of the current scope. +//===----------------------------------------------------------------------===// +@interface MyObj12706177 : NSObject +-(instancetype)initX; ++(void)test12706177; +@end +static int Cond; +@implementation MyObj12706177 +-(instancetype)initX { + if (Cond) + return 0; + self = [super init]; + return self; +} ++(void)test12706177 { + id x = [[MyObj12706177 alloc] initX]; //expected-warning {{Potential leak of an object}} + [x release]; +} +@end + +//===----------------------------------------------------------------------===// +// xpc_connection_set_finalizer_f +//===----------------------------------------------------------------------===// + +typedef xpc_object_t xpc_connection_t; +typedef void (*xpc_finalizer_t)(void *value); +void xpc_connection_set_context(xpc_connection_t connection, void *ctx); +void xpc_connection_set_finalizer_f(xpc_connection_t connection, + xpc_finalizer_t finalizer); +void releaseAfterXPC(void *context) { + [(NSArray *)context release]; +} + +void rdar13783514(xpc_connection_t connection) { + xpc_connection_set_context(connection, [[NSMutableArray alloc] init]); + xpc_connection_set_finalizer_f(connection, releaseAfterXPC); +} // no-warning + +CFAttributedStringRef CFAttributedCreate(void *CFObj CF_CONSUMED) CF_RETURNS_RETAINED; + +@interface Action +@property (nonatomic) SEL action; +@property (nonatomic, assign) id target; +@end diff --git a/test/ARCMT/objcmt-atomic-property.m b/test/ARCMT/objcmt-atomic-property.m new file mode 100644 index 000000000000..78ab3ec71596 --- /dev/null +++ b/test/ARCMT/objcmt-atomic-property.m @@ -0,0 +1,229 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fblocks -objcmt-migrate-readwrite-property -objcmt-migrate-readonly-property -objcmt-atomic-property -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +#define WEBKIT_OBJC_METHOD_ANNOTATION(ANNOTATION) ANNOTATION +#define WEAK_IMPORT_ATTRIBUTE __attribute__((objc_arc_weak_reference_unavailable)) +#define AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER +#define DEPRECATED __attribute__((deprecated)) + +typedef char BOOL; +@class NSString; +@protocol NSCopying @end + +@interface NSObject +@end + +@interface NSDictionary : NSObject +@end + +@interface I : NSObject { + int ivarVal; +} +- (void) setWeakProp : (NSString *__weak)Val; +- (NSString *__weak) WeakProp; + +- (NSString *) StrongProp; +- (void) setStrongProp : (NSString *)Val; + +- (NSString *) UnavailProp __attribute__((unavailable)); +- (void) setUnavailProp : (NSString *)Val; + +- (NSString *) UnavailProp1 __attribute__((unavailable)); +- (void) setUnavailProp1 : (NSString *)Val __attribute__((unavailable)); + +- (NSString *) UnavailProp2; +- (void) setUnavailProp2 : (NSString *)Val __attribute__((unavailable)); + +- (NSDictionary*) undoAction; +- (void) setUndoAction: (NSDictionary*)Arg; +@end + +@implementation I +@end + +@class NSArray; + +@interface MyClass2 { +@private + NSArray *_names1; + NSArray *_names2; + NSArray *_names3; + NSArray *_names4; +} +- (void)setNames1:(NSArray *)names; +- (void)setNames4:(__strong NSArray *)names; +- (void)setNames3:(__strong NSArray *)names; +- (void)setNames2:(NSArray *)names; +- (NSArray *) names2; +- (NSArray *)names3; +- (__strong NSArray *)names4; +- (NSArray *) names1; +@end + +// Properties that contain the name "delegate" or "dataSource", +// or have exact name "target" have unsafe_unretained attribute. +@interface NSInvocation +- (id)target; +- (void)setTarget:(id)target; + +- (id) dataSource; + +- (id)xxxdelegateYYY; +- (void)setXxxdelegateYYY:(id)delegate; + +- (void)setDataSource:(id)source; + +- (id)MYtarget; +- (void)setMYtarget: (id)target; + +- (id)targetX; +- (void)setTargetX: (id)t; + +- (int)value; +- (void)setValue: (int)val; + +-(BOOL) isContinuous; +-(void) setContinuous:(BOOL)value; + +- (id) isAnObject; +- (void)setAnObject : (id) object; + +- (BOOL) isinValid; +- (void) setInValid : (BOOL) arg; + +- (void) Nothing; +- (int) Length; +- (id) object; ++ (double) D; +- (void *)JSObject WEBKIT_OBJC_METHOD_ANNOTATION(AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER); +- (BOOL)isIgnoringInteractionEvents; + +- (NSString *)getStringValue; +- (BOOL)getCounterValue; +- (void)setStringValue:(NSString *)stringValue AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER; +- (NSDictionary *)getns_dixtionary; + +- (BOOL)is3bar; // watch out +- (NSString *)get3foo; // watch out + +- (BOOL) getM; +- (BOOL) getMA; +- (BOOL) getALL; +- (BOOL) getMANY; +- (BOOL) getSome; +@end + + +@interface NSInvocation(CAT) +- (id)target; +- (void)setTarget:(id)target; + +- (id) dataSource; + +- (id)xxxdelegateYYY; +- (void)setXxxdelegateYYY:(id)delegate; + +- (void)setDataSource:(id)source; + +- (id)MYtarget; +- (void)setMYtarget: (id)target; + +- (id)targetX; +- (void)setTargetX: (id)t; + +- (int)value; +- (void)setValue: (int)val; + +-(BOOL) isContinuous; +-(void) setContinuous:(BOOL)value; + +- (id) isAnObject; +- (void)setAnObject : (id) object; + +- (BOOL) isinValid; +- (void) setInValid : (BOOL) arg; + +- (void) Nothing; +- (int) Length; +- (id) object; ++ (double) D; + +- (BOOL)is3bar; // watch out +- (NSString *)get3foo; // watch out + +- (BOOL) getM; +- (BOOL) getMA; +- (BOOL) getALL; +- (BOOL) getMANY; +- (BOOL) getSome; +@end + +DEPRECATED +@interface I_DEP +- (BOOL) isinValid; +- (void) setInValid : (BOOL) arg; +@end + +@interface AnotherOne +- (BOOL) isinValid DEPRECATED; +- (void) setInValid : (BOOL) arg; +- (id)MYtarget; +- (void)setMYtarget: (id)target DEPRECATED; +- (BOOL) getM DEPRECATED; + +- (id)xxxdelegateYYY DEPRECATED; +- (void)setXxxdelegateYYY:(id)delegate DEPRECATED; +@end + +// rdar://14987909 +#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0))) +#define NORETURN __attribute__((noreturn)) +#define ALIGNED __attribute__((aligned(16))) + +@interface NSURL +// Do not infer a property. +- (NSURL *)appStoreReceiptURL NS_AVAILABLE; +- (void) setAppStoreReceiptURL : (NSURL *)object; + +- (NSURL *)appStoreReceiptURLX NS_AVAILABLE; +- (void) setAppStoreReceiptURLX : (NSURL *)object NS_AVAILABLE; + +// Do not infer a property. +- (NSURL *)appStoreReceiptURLY ; +- (void) setAppStoreReceiptURLY : (NSURL *)object NS_AVAILABLE; + +- (id)OkToInfer NS_AVAILABLE; + +// Do not infer a property. +- (NSURL *)appStoreReceiptURLZ ; +- (void) setAppStoreReceiptURLZ : (NSURL *)object NS_AVAILABLE; + +// Do not infer a property. +- (id) t1 NORETURN NS_AVAILABLE; +- (void) setT1 : (id) arg NS_AVAILABLE; + +- (id)method1 ALIGNED NS_AVAILABLE; +- (void) setMethod1 : (id) object NS_AVAILABLE ALIGNED; + +- (NSURL *)init; // No Change ++ (id)alloc; // No Change + +- (BOOL)is1stClass; // Not a valid property +- (BOOL)isClass; // This is a valid property 'class' is not a keyword in ObjC +- (BOOL)isDouble; // Not a valid property + +@end + +// rdar://15082818 +@class NSMutableDictionary; + +@interface NSArray +- (id (^)(id, NSArray *, NSMutableDictionary *)) expressionBlock; +- (id (^)(id, NSArray *, NSMutableDictionary *)) MyBlock; +- (void) setMyBlock : (id (^)(id, NSArray *, NSMutableDictionary *)) bl; +- (id (*)(id, NSArray *, NSMutableDictionary *)) expressionFuncptr; +- (id (*)(id, NSArray *, NSMutableDictionary *)) MyFuncptr; +- (void) setMyFuncptr : (id (*)(id, NSArray *, NSMutableDictionary *)) bl; +@end diff --git a/test/ARCMT/objcmt-atomic-property.m.result b/test/ARCMT/objcmt-atomic-property.m.result new file mode 100644 index 000000000000..1650cd23e3bd --- /dev/null +++ b/test/ARCMT/objcmt-atomic-property.m.result @@ -0,0 +1,202 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fblocks -objcmt-migrate-readwrite-property -objcmt-migrate-readonly-property -objcmt-atomic-property -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +#define WEBKIT_OBJC_METHOD_ANNOTATION(ANNOTATION) ANNOTATION +#define WEAK_IMPORT_ATTRIBUTE __attribute__((objc_arc_weak_reference_unavailable)) +#define AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER +#define DEPRECATED __attribute__((deprecated)) + +typedef char BOOL; +@class NSString; +@protocol NSCopying @end + +@interface NSObject +@end + +@interface NSDictionary : NSObject +@end + +@interface I : NSObject { + int ivarVal; +} +@property (weak) NSString *WeakProp; + +@property (retain) NSString *StrongProp; + +@property (retain) NSString *UnavailProp __attribute__((unavailable)); +- (void) setUnavailProp : (NSString *)Val; + +@property (retain) NSString *UnavailProp1 __attribute__((unavailable)); + +@property (retain) NSString *UnavailProp2; +- (void) setUnavailProp2 : (NSString *)Val __attribute__((unavailable)); + +@property (copy) NSDictionary *undoAction; +@end + +@implementation I +@end + +@class NSArray; + +@interface MyClass2 { +@private + NSArray *_names1; + NSArray *_names2; + NSArray *_names3; + NSArray *_names4; +} +@property (retain) NSArray *names2; +@property (retain) NSArray *names3; +@property (retain) NSArray *names4; +@property (retain) NSArray *names1; +@end + +// Properties that contain the name "delegate" or "dataSource", +// or have exact name "target" have unsafe_unretained attribute. +@interface NSInvocation +@property (assign) id target; + +@property (assign) id dataSource; + +@property (assign) id xxxdelegateYYY; + + +@property (retain) id MYtarget; + +@property (retain) id targetX; + +@property int value; + +@property (getter=isContinuous) BOOL continuous; + +- (id) isAnObject; +- (void)setAnObject : (id) object; + +@property (getter=isinValid, readonly) BOOL inValid; +- (void) setInValid : (BOOL) arg; + +- (void) Nothing; +@property (readonly) int Length; +@property (readonly, retain) id object; ++ (double) D; +@property (readonly) void *JSObject WEBKIT_OBJC_METHOD_ANNOTATION(AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER); +@property (getter=isIgnoringInteractionEvents, readonly) BOOL ignoringInteractionEvents; + +@property (getter=getStringValue, retain) NSString *stringValue; +@property (getter=getCounterValue, readonly) BOOL counterValue; +@property (getter=getns_dixtionary, readonly, retain) NSDictionary *ns_dixtionary; + +- (BOOL)is3bar; // watch out +- (NSString *)get3foo; // watch out + +@property (getter=getM, readonly) BOOL m; +@property (getter=getMA, readonly) BOOL MA; +@property (getter=getALL, readonly) BOOL ALL; +@property (getter=getMANY, readonly) BOOL MANY; +@property (getter=getSome, readonly) BOOL some; +@end + + +@interface NSInvocation(CAT) +@property (assign) id target; + +@property (assign) id dataSource; + +@property (assign) id xxxdelegateYYY; + + +@property (retain) id MYtarget; + +@property (retain) id targetX; + +@property int value; + +@property (getter=isContinuous) BOOL continuous; + +- (id) isAnObject; +- (void)setAnObject : (id) object; + +@property (getter=isinValid, readonly) BOOL inValid; +- (void) setInValid : (BOOL) arg; + +- (void) Nothing; +@property (readonly) int Length; +@property (readonly, retain) id object; ++ (double) D; + +- (BOOL)is3bar; // watch out +- (NSString *)get3foo; // watch out + +@property (getter=getM, readonly) BOOL m; +@property (getter=getMA, readonly) BOOL MA; +@property (getter=getALL, readonly) BOOL ALL; +@property (getter=getMANY, readonly) BOOL MANY; +@property (getter=getSome, readonly) BOOL some; +@end + +DEPRECATED +@interface I_DEP +- (BOOL) isinValid; +- (void) setInValid : (BOOL) arg; +@end + +@interface AnotherOne +- (BOOL) isinValid DEPRECATED; +- (void) setInValid : (BOOL) arg; +- (id)MYtarget; +- (void)setMYtarget: (id)target DEPRECATED; +- (BOOL) getM DEPRECATED; + +- (id)xxxdelegateYYY DEPRECATED; +- (void)setXxxdelegateYYY:(id)delegate DEPRECATED; +@end + +// rdar://14987909 +#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0))) +#define NORETURN __attribute__((noreturn)) +#define ALIGNED __attribute__((aligned(16))) + +@interface NSURL +// Do not infer a property. +@property (retain) NSURL *appStoreReceiptURL NS_AVAILABLE; +- (void) setAppStoreReceiptURL : (NSURL *)object; + +@property (retain) NSURL *appStoreReceiptURLX NS_AVAILABLE; + +// Do not infer a property. +@property (retain) NSURL *appStoreReceiptURLY ; +- (void) setAppStoreReceiptURLY : (NSURL *)object NS_AVAILABLE; + +@property (readonly, retain) id OkToInfer NS_AVAILABLE; + +// Do not infer a property. +@property (retain) NSURL *appStoreReceiptURLZ ; +- (void) setAppStoreReceiptURLZ : (NSURL *)object NS_AVAILABLE; + +// Do not infer a property. +- (id) t1 NORETURN NS_AVAILABLE; +- (void) setT1 : (id) arg NS_AVAILABLE; + +@property (retain) id method1 ALIGNED NS_AVAILABLE; + +- (NSURL *)init; // No Change ++ (id)alloc; // No Change + +- (BOOL)is1stClass; // Not a valid property +@property (getter=isClass, readonly) BOOL class; // This is a valid property 'class' is not a keyword in ObjC +- (BOOL)isDouble; // Not a valid property + +@end + +// rdar://15082818 +@class NSMutableDictionary; + +@interface NSArray +@property (readonly, copy) id (^expressionBlock)(id, NSArray *, NSMutableDictionary *); +@property (copy) id (^MyBlock)(id, NSArray *, NSMutableDictionary *); +@property (readonly) id (*expressionFuncptr)(id, NSArray *, NSMutableDictionary *); +@property id (*MyFuncptr)(id, NSArray *, NSMutableDictionary *); +@end diff --git a/test/ARCMT/objcmt-deprecated-category.m b/test/ARCMT/objcmt-deprecated-category.m new file mode 100644 index 000000000000..5939e5a50ada --- /dev/null +++ b/test/ARCMT/objcmt-deprecated-category.m @@ -0,0 +1,48 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-annotation -mt-migrate-directory %t %s -x objective-c -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c %s.result +// rdar://15337661 + +#define DEPRECATED __attribute__((deprecated)) + +@interface NSArray +- (int)one; +@end + +@interface NSArray (NSDraggingSourceDeprecated) + +/* This method is unsafe because it could potentially cause buffer overruns. You should use -getObjects:range: instead. +*/ +- (void)getObjects:(id __unsafe_unretained [])objects; +- (void)dep_getObjects:(id __unsafe_unretained [])dep_objects DEPRECATED; + +@end + +@interface NSArray (NSDeprecated) + +/* This method is unsafe because it could potentially cause buffer overruns. You should use -getObjects:range: instead. +*/ +- (void)dep_getObjects:(id __unsafe_unretained [])dep_objects DEPRECATED; +- (void)getObjects:(id __unsafe_unretained [])objects; +@property int P1; +@property int P2 DEPRECATED; +@end + +@interface NSArray (DraggingSourceDeprecated) + +/* This method is unsafe because it could potentially cause buffer overruns. You should use -getObjects:range: instead. +*/ +- (void)getObjects:(id __unsafe_unretained [])objects; +- (void)dep_getObjects:(id __unsafe_unretained [])dep_objects DEPRECATED; +@property int P1; +@property int P2 DEPRECATED; + +@end + +@interface NSArray (Deprecated) +- (void)getObjects:(id __unsafe_unretained [])objects; +- (void)dep_getObjects:(id __unsafe_unretained [])dep_objects DEPRECATED; +@property int P1; +@property int P2 DEPRECATED; +@end diff --git a/test/ARCMT/objcmt-deprecated-category.m.result b/test/ARCMT/objcmt-deprecated-category.m.result new file mode 100644 index 000000000000..3cb100044e46 --- /dev/null +++ b/test/ARCMT/objcmt-deprecated-category.m.result @@ -0,0 +1,48 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-annotation -mt-migrate-directory %t %s -x objective-c -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c %s.result +// rdar://15337661 + +#define DEPRECATED __attribute__((deprecated)) + +@interface NSArray +- (int)one; +@end + +@interface NSArray (NSDraggingSourceDeprecated) + +/* This method is unsafe because it could potentially cause buffer overruns. You should use -getObjects:range: instead. +*/ +- (void)getObjects:(id __unsafe_unretained [])objects DEPRECATED; +- (void)dep_getObjects:(id __unsafe_unretained [])dep_objects DEPRECATED; + +@end + +@interface NSArray (NSDeprecated) + +/* This method is unsafe because it could potentially cause buffer overruns. You should use -getObjects:range: instead. +*/ +- (void)dep_getObjects:(id __unsafe_unretained [])dep_objects DEPRECATED; +- (void)getObjects:(id __unsafe_unretained [])objects DEPRECATED; +@property int P1 DEPRECATED; +@property int P2 DEPRECATED; +@end + +@interface NSArray (DraggingSourceDeprecated) + +/* This method is unsafe because it could potentially cause buffer overruns. You should use -getObjects:range: instead. +*/ +- (void)getObjects:(id __unsafe_unretained [])objects DEPRECATED; +- (void)dep_getObjects:(id __unsafe_unretained [])dep_objects DEPRECATED; +@property int P1 DEPRECATED; +@property int P2 DEPRECATED; + +@end + +@interface NSArray (Deprecated) +- (void)getObjects:(id __unsafe_unretained [])objects DEPRECATED; +- (void)dep_getObjects:(id __unsafe_unretained [])dep_objects DEPRECATED; +@property int P1 DEPRECATED; +@property int P2 DEPRECATED; +@end diff --git a/test/ARCMT/objcmt-instancetype-2.m b/test/ARCMT/objcmt-instancetype-2.m new file mode 100644 index 000000000000..fb59265c4be3 --- /dev/null +++ b/test/ARCMT/objcmt-instancetype-2.m @@ -0,0 +1,103 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-instancetype -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +typedef unsigned int NSUInteger; +typedef int NSInteger; +typedef char BOOL; +@class NSData, NSError, NSProtocolChecker, NSObject; +@class NSPortNameServer, NSTimeZone; + +@interface NSMutableString +@end + +@interface NSString @end + +@class NSString, NSURL; +@interface NSString (NSStringDeprecated) ++ (id)stringWithContentsOfFile:(NSString *)path __attribute__((availability(macosx,introduced=10.0 ,message="" ))); ++ (id)stringWithContentsOfURL:(NSURL *)url __attribute__((availability(macosx,introduced=10.0 ,message="" ))); ++ (id)stringWithCString:(const char *)bytes length:(NSUInteger)length __attribute__((availability(macosx,introduced=10.0 ,message="" ))); ++ (id)stringWithCString:(const char *)bytes __attribute__((availability(macosx,introduced=10.0 ,message="" ))); +@end + + +typedef enum NSURLBookmarkResolutionOptions { + Bookmark +} NSURLBookmarkResolutionOptions; + +@interface NSURL ++ (id)URLWithString:(NSString *)URLString; ++ (id)URLWithString:(NSString *)URLString relativeToURL:(NSURL *)baseURL; ++ (id)URLByResolvingBookmarkData:(NSData *)bookmarkData options:(NSURLBookmarkResolutionOptions)options relativeToURL:(NSURL *)relativeURL bookmarkDataIsStale:(BOOL *)isStale error:(NSError **)error __attribute__((availability(macosx,introduced=10.6))); +@end + +@class NSDictionary; +@interface NSError ++ (id)errorWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict; +@end + + +@interface NSMutableString (NSMutableStringExtensionMethods) ++ (id)stringWithCapacity:(NSUInteger)capacity; +@end + +@interface NSMutableData ++ (id)dataWithCapacity:(NSUInteger)aNumItems; ++ (id)dataWithLength:(NSUInteger)length; +@end + +@interface NSMutableDictionary @end + +@interface NSMutableDictionary (NSSharedKeySetDictionary) ++ (id )dictionaryWithSharedKeySet:(id)keyset __attribute__((availability(macosx,introduced=10.8))); +@end + +@interface NSProtocolChecker ++ (id)protocolCheckerWithTarget:(NSObject *)anObject protocol:(Protocol *)aProtocol; +@end + +@interface NSConnection ++ (id)connectionWithRegisteredName:(NSString *)name host:(NSString *)hostName; ++ (id)connectionWithRegisteredName:(NSString *)name host:(NSString *)hostName usingNameServer:(NSPortNameServer *)server; +@end + +@interface NSDate ++ (id)dateWithString:(NSString *)aString __attribute__((availability(macosx,introduced=10.4))); +@end + +@interface NSCalendarDate : NSDate ++ (id)calendarDate __attribute__((availability(macosx,introduced=10.4))); ++ (id)dateWithString:(NSString *)description calendarFormat:(NSString *)format locale:(id)locale __attribute__((availability(macosx,introduced=10.4))); ++ (id)dateWithString:(NSString *)description calendarFormat:(NSString *)format __attribute__((availability(macosx,introduced=10.4))); ++ (id)dateWithYear:(NSInteger)year month:(NSUInteger)month day:(NSUInteger)day hour:(NSUInteger)hour minute:(NSUInteger)minute second:(NSUInteger)second timeZone:(NSTimeZone *)aTimeZone __attribute__((availability(macosx,introduced=10.4))); +@end + +@interface NSUserDefaults ++ (id) standardUserDefaults; +@end + +@interface NSNotificationCenter ++ (id) defaultCenter; ++ sharedCenter; +@end + +@interface UIApplication ++ (id)sharedApplication; ++ defaultApplication; +@end + +//===----------------------------------------------------------------------===// +// Method name that has a null IdentifierInfo* for its first selector slot. +// This test just makes sure that we handle it. +//===----------------------------------------------------------------------===// +@interface TestNullIdentifier +@end + +@implementation TestNullIdentifier ++ (id):(int)x, ... { + return 0; +} +@end + diff --git a/test/ARCMT/objcmt-instancetype-2.m.result b/test/ARCMT/objcmt-instancetype-2.m.result new file mode 100644 index 000000000000..8837e971ad27 --- /dev/null +++ b/test/ARCMT/objcmt-instancetype-2.m.result @@ -0,0 +1,103 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-instancetype -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +typedef unsigned int NSUInteger; +typedef int NSInteger; +typedef char BOOL; +@class NSData, NSError, NSProtocolChecker, NSObject; +@class NSPortNameServer, NSTimeZone; + +@interface NSMutableString +@end + +@interface NSString @end + +@class NSString, NSURL; +@interface NSString (NSStringDeprecated) ++ (instancetype)stringWithContentsOfFile:(NSString *)path __attribute__((availability(macosx,introduced=10.0 ,message="" ))); ++ (instancetype)stringWithContentsOfURL:(NSURL *)url __attribute__((availability(macosx,introduced=10.0 ,message="" ))); ++ (instancetype)stringWithCString:(const char *)bytes length:(NSUInteger)length __attribute__((availability(macosx,introduced=10.0 ,message="" ))); ++ (instancetype)stringWithCString:(const char *)bytes __attribute__((availability(macosx,introduced=10.0 ,message="" ))); +@end + + +typedef enum NSURLBookmarkResolutionOptions { + Bookmark +} NSURLBookmarkResolutionOptions; + +@interface NSURL ++ (instancetype)URLWithString:(NSString *)URLString; ++ (instancetype)URLWithString:(NSString *)URLString relativeToURL:(NSURL *)baseURL; ++ (instancetype)URLByResolvingBookmarkData:(NSData *)bookmarkData options:(NSURLBookmarkResolutionOptions)options relativeToURL:(NSURL *)relativeURL bookmarkDataIsStale:(BOOL *)isStale error:(NSError **)error __attribute__((availability(macosx,introduced=10.6))); +@end + +@class NSDictionary; +@interface NSError ++ (instancetype)errorWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict; +@end + + +@interface NSMutableString (NSMutableStringExtensionMethods) ++ (instancetype)stringWithCapacity:(NSUInteger)capacity; +@end + +@interface NSMutableData ++ (instancetype)dataWithCapacity:(NSUInteger)aNumItems; ++ (instancetype)dataWithLength:(NSUInteger)length; +@end + +@interface NSMutableDictionary @end + +@interface NSMutableDictionary (NSSharedKeySetDictionary) ++ (instancetype )dictionaryWithSharedKeySet:(id)keyset __attribute__((availability(macosx,introduced=10.8))); +@end + +@interface NSProtocolChecker ++ (instancetype)protocolCheckerWithTarget:(NSObject *)anObject protocol:(Protocol *)aProtocol; +@end + +@interface NSConnection ++ (instancetype)connectionWithRegisteredName:(NSString *)name host:(NSString *)hostName; ++ (instancetype)connectionWithRegisteredName:(NSString *)name host:(NSString *)hostName usingNameServer:(NSPortNameServer *)server; +@end + +@interface NSDate ++ (instancetype)dateWithString:(NSString *)aString __attribute__((availability(macosx,introduced=10.4))); +@end + +@interface NSCalendarDate : NSDate ++ (instancetype)calendarDate __attribute__((availability(macosx,introduced=10.4))); ++ (instancetype)dateWithString:(NSString *)description calendarFormat:(NSString *)format locale:(id)locale __attribute__((availability(macosx,introduced=10.4))); ++ (instancetype)dateWithString:(NSString *)description calendarFormat:(NSString *)format __attribute__((availability(macosx,introduced=10.4))); ++ (instancetype)dateWithYear:(NSInteger)year month:(NSUInteger)month day:(NSUInteger)day hour:(NSUInteger)hour minute:(NSUInteger)minute second:(NSUInteger)second timeZone:(NSTimeZone *)aTimeZone __attribute__((availability(macosx,introduced=10.4))); +@end + +@interface NSUserDefaults ++ (instancetype) standardUserDefaults; +@end + +@interface NSNotificationCenter ++ (NSNotificationCenter*) defaultCenter; ++ (NSNotificationCenter*) sharedCenter; +@end + +@interface UIApplication ++ (UIApplication*)sharedApplication; ++ (UIApplication*) defaultApplication; +@end + +//===----------------------------------------------------------------------===// +// Method name that has a null IdentifierInfo* for its first selector slot. +// This test just makes sure that we handle it. +//===----------------------------------------------------------------------===// +@interface TestNullIdentifier +@end + +@implementation TestNullIdentifier ++ (id):(int)x, ... { + return 0; +} +@end + diff --git a/test/ARCMT/objcmt-instancetype.m b/test/ARCMT/objcmt-instancetype.m new file mode 100644 index 000000000000..47dbd7aeed5a --- /dev/null +++ b/test/ARCMT/objcmt-instancetype.m @@ -0,0 +1,111 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-instancetype -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +typedef signed char BOOL; +#define nil ((void*) 0) + +@interface NSObject ++ (id)alloc; +@end + +@interface NSString : NSObject ++ (id)stringWithString:(NSString *)string; +- (id)initWithString:(NSString *)aString; +@end + +@implementation NSString : NSObject ++ (id)stringWithString:(NSString *)string { return 0; }; +- (instancetype)initWithString:(NSString *)aString { return 0; }; +@end + +@interface NSArray : NSObject +- (id)objectAtIndex:(unsigned long)index; +- (id)objectAtIndexedSubscript:(int)index; +@end + +@interface NSArray (NSArrayCreation) ++ (id)array; ++ (id)arrayWithObject:(id)anObject; ++ (id)arrayWithObjects:(const id [])objects count:(unsigned long)cnt; ++ (id)arrayWithObjects:(id)firstObj, ...; ++ arrayWithArray:(NSArray *)array; + +- (id)initWithObjects:(const id [])objects count:(unsigned long)cnt; +- (id)initWithObjects:(id)firstObj, ...; +- (id)initWithArray:(NSArray *)array; + +- (id)objectAtIndex:(unsigned long)index; +@end + +@implementation NSArray (NSArrayCreation) ++ (id)array { return 0; } ++ (id)arrayWithObject:(id)anObject { + return anObject; +} ++ (id)arrayWithObjects:(const id [])objects count:(unsigned long)cnt { return 0; } ++ (id)arrayWithObjects:(id)firstObj, ... { + return 0; } ++ arrayWithArray:(NSArray *)array { + return 0; +} + +- (id)initWithObjects:(const id [])objects count:(unsigned long)cnt { return 0; } +- (id)initWithObjects:(id)firstObj, ... { return 0; } +- (id)initWithArray:(NSArray *)array { return 0; } + +- (id)objectAtIndex:(unsigned long)index { return 0; } +@end + +@interface NSMutableArray : NSArray +- (void)replaceObjectAtIndex:(unsigned long)index withObject:(id)anObject; +- (void)setObject:(id)object atIndexedSubscript:(int)index; +@end + +@interface NSDictionary : NSObject +- (id)objectForKeyedSubscript:(id)key; +@end + +@interface NSDictionary (NSDictionaryCreation) ++ (id)dictionary; ++ (id)dictionaryWithObject:(id)object forKey:(id)key; ++ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; ++ dictionaryWithObjectsAndKeys:(id)firstObject, ...; ++ (id)dictionaryWithDictionary:(NSDictionary *)dict; ++ (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; + +- (id)initWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; +- (id)initWithObjectsAndKeys:(id)firstObject, ...; +- (id)initWithDictionary:(NSDictionary *)otherDictionary; +- (id)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; + +- (id)objectForKey:(id)aKey; +@end + +@interface NSMutableDictionary : NSDictionary +- (void)setObject:(id)anObject forKey:(id)aKey; +- (void)setObject:(id)object forKeyedSubscript:(id)key; +@end + +@interface NSNumber : NSObject +@end + +@interface NSNumber (NSNumberCreation) ++ (NSNumber *)numberWithInt:(int)value; +@end + +@implementation NSNumber (NSNumberCreation) ++ (NSNumber *)numberWithInt:(int)value { return 0; } +@end + +#define M(x) (x) +#define PAIR(x) @#x, [NSNumber numberWithInt:(x)] +#define TWO(x) ((x), (x)) + +void foo() { + NSString *str = M([NSString stringWithString:@"foo"]); // expected-warning {{redundant}} + str = [[NSString alloc] initWithString:@"foo"]; // expected-warning {{redundant}} + NSArray *arr = [NSArray arrayWithArray:@[str]]; // expected-warning {{redundant}} + NSDictionary *dict = [NSDictionary dictionaryWithDictionary:@{str: arr}]; // expected-warning {{redundant}} +} diff --git a/test/ARCMT/objcmt-instancetype.m.result b/test/ARCMT/objcmt-instancetype.m.result new file mode 100644 index 000000000000..ce51678708dd --- /dev/null +++ b/test/ARCMT/objcmt-instancetype.m.result @@ -0,0 +1,111 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-instancetype -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +typedef signed char BOOL; +#define nil ((void*) 0) + +@interface NSObject ++ (id)alloc; +@end + +@interface NSString : NSObject ++ (instancetype)stringWithString:(NSString *)string; +- (instancetype)initWithString:(NSString *)aString; +@end + +@implementation NSString : NSObject ++ (instancetype)stringWithString:(NSString *)string { return 0; }; +- (instancetype)initWithString:(NSString *)aString { return 0; }; +@end + +@interface NSArray : NSObject +- (id)objectAtIndex:(unsigned long)index; +- (id)objectAtIndexedSubscript:(int)index; +@end + +@interface NSArray (NSArrayCreation) ++ (instancetype)array; ++ (instancetype)arrayWithObject:(id)anObject; ++ (instancetype)arrayWithObjects:(const id [])objects count:(unsigned long)cnt; ++ (instancetype)arrayWithObjects:(id)firstObj, ...; ++ (instancetype) arrayWithArray:(NSArray *)array; + +- (instancetype)initWithObjects:(const id [])objects count:(unsigned long)cnt; +- (instancetype)initWithObjects:(id)firstObj, ...; +- (instancetype)initWithArray:(NSArray *)array; + +- (id)objectAtIndex:(unsigned long)index; +@end + +@implementation NSArray (NSArrayCreation) ++ (instancetype)array { return 0; } ++ (instancetype)arrayWithObject:(id)anObject { + return anObject; +} ++ (instancetype)arrayWithObjects:(const id [])objects count:(unsigned long)cnt { return 0; } ++ (instancetype)arrayWithObjects:(id)firstObj, ... { + return 0; } ++ (instancetype) arrayWithArray:(NSArray *)array { + return 0; +} + +- (instancetype)initWithObjects:(const id [])objects count:(unsigned long)cnt { return 0; } +- (instancetype)initWithObjects:(id)firstObj, ... { return 0; } +- (instancetype)initWithArray:(NSArray *)array { return 0; } + +- (id)objectAtIndex:(unsigned long)index { return 0; } +@end + +@interface NSMutableArray : NSArray +- (void)replaceObjectAtIndex:(unsigned long)index withObject:(id)anObject; +- (void)setObject:(id)object atIndexedSubscript:(int)index; +@end + +@interface NSDictionary : NSObject +- (id)objectForKeyedSubscript:(id)key; +@end + +@interface NSDictionary (NSDictionaryCreation) ++ (instancetype)dictionary; ++ (instancetype)dictionaryWithObject:(id)object forKey:(id)key; ++ (instancetype)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; ++ (instancetype) dictionaryWithObjectsAndKeys:(id)firstObject, ...; ++ (instancetype)dictionaryWithDictionary:(NSDictionary *)dict; ++ (instancetype)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; + +- (instancetype)initWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; +- (instancetype)initWithObjectsAndKeys:(id)firstObject, ...; +- (instancetype)initWithDictionary:(NSDictionary *)otherDictionary; +- (instancetype)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; + +- (id)objectForKey:(id)aKey; +@end + +@interface NSMutableDictionary : NSDictionary +- (void)setObject:(id)anObject forKey:(id)aKey; +- (void)setObject:(id)object forKeyedSubscript:(id)key; +@end + +@interface NSNumber : NSObject +@end + +@interface NSNumber (NSNumberCreation) ++ (NSNumber *)numberWithInt:(int)value; +@end + +@implementation NSNumber (NSNumberCreation) ++ (NSNumber *)numberWithInt:(int)value { return 0; } +@end + +#define M(x) (x) +#define PAIR(x) @#x, [NSNumber numberWithInt:(x)] +#define TWO(x) ((x), (x)) + +void foo() { + NSString *str = M([NSString stringWithString:@"foo"]); // expected-warning {{redundant}} + str = [[NSString alloc] initWithString:@"foo"]; // expected-warning {{redundant}} + NSArray *arr = [NSArray arrayWithArray:@[str]]; // expected-warning {{redundant}} + NSDictionary *dict = [NSDictionary dictionaryWithDictionary:@{str: arr}]; // expected-warning {{redundant}} +} diff --git a/test/ARCMT/objcmt-migrate-all.m b/test/ARCMT/objcmt-migrate-all.m new file mode 100644 index 000000000000..7ae898cf9cba --- /dev/null +++ b/test/ARCMT/objcmt-migrate-all.m @@ -0,0 +1,135 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-all -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result +// rdar://15396636 + +#ifndef NS_RETURNS_INNER_POINTER // defined in iOS 6 for sure +#define NS_RETURNS_INNER_POINTER __attribute__((objc_returns_inner_pointer)) +#endif + +#define CF_IMPLICIT_BRIDGING_ENABLED _Pragma("clang arc_cf_code_audited begin") + +#define CF_IMPLICIT_BRIDGING_DISABLED _Pragma("clang arc_cf_code_audited end") + +#if __has_feature(attribute_ns_returns_retained) +#define NS_RETURNS_RETAINED __attribute__((ns_returns_retained)) +#endif +#if __has_feature(attribute_cf_returns_retained) +#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) +#endif +#if __has_feature(attribute_ns_returns_not_retained) +#define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) +#endif +#if __has_feature(attribute_cf_returns_not_retained) +#define CF_RETURNS_NOT_RETAINED __attribute__((cf_returns_not_retained)) +#endif +#if __has_feature(attribute_ns_consumes_self) +#define NS_CONSUMES_SELF __attribute__((ns_consumes_self)) +#endif +#if __has_feature(attribute_ns_consumed) +#define NS_CONSUMED __attribute__((ns_consumed)) +#endif +#if __has_feature(attribute_cf_consumed) +#define CF_CONSUMED __attribute__((cf_consumed)) +#endif +#if __has_attribute(ns_returns_autoreleased) +#define NS_RETURNS_AUTORELEASED __attribute__((ns_returns_autoreleased)) +#endif + +#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0))) + +CF_IMPLICIT_BRIDGING_ENABLED + +typedef unsigned long CFTypeID; +typedef unsigned long CFOptionFlags; +typedef unsigned long CFHashCode; + +typedef signed long CFIndex; /*AnyObj*/ +typedef const struct __CFArray * CFArrayRef; +typedef struct { + CFIndex location; + CFIndex length; +} CFRange; + +typedef void (*CFArrayApplierFunction)(const void *value, void *context); + +typedef enum CFComparisonResult : CFIndex CFComparisonResult; enum CFComparisonResult : CFIndex { + kCFCompareLessThan = -1L, + kCFCompareEqualTo = 0, + kCFCompareGreaterThan = 1 +}; + + +typedef CFComparisonResult (*CFComparatorFunction)(const void *val1, const void *val2, void *context); + +typedef struct __CFArray * CFMutableArrayRef; + +typedef const struct __CFAttributedString *CFAttributedStringRef; +typedef struct __CFAttributedString *CFMutableAttributedStringRef; + +typedef const struct __CFAllocator * CFAllocatorRef; + +typedef const struct __CFString * CFStringRef; +typedef struct __CFString * CFMutableStringRef; + +typedef const struct __CFDictionary * CFDictionaryRef; +typedef struct __CFDictionary * CFMutableDictionaryRef; + +typedef struct CGImage *CGImageRef; + +typedef struct OpaqueJSValue* JSObjectRef; + +typedef JSObjectRef TTJSObjectRef; +typedef unsigned int NSUInteger; + +CF_IMPLICIT_BRIDGING_DISABLED + +@interface I +- (void*) ReturnsInnerPointer; +- (int*) AlreadyReturnsInnerPointer NS_RETURNS_INNER_POINTER; +@end + +@interface UIImage +- (CGImageRef)CGImage; +@end + +@interface NSData +- (void *)bytes; +- (void **) ptr_bytes __attribute__((availability(macosx,unavailable))); +@end + +@interface NSMutableData +- (void *)mutableBytes __attribute__((deprecated)) __attribute__((unavailable)); +@end + +@interface JS +- (JSObjectRef)JSObject; +- (TTJSObjectRef)JSObject1; +- (JSObjectRef*)JSObject2; +@end + +// rdar://15044991 +typedef void *SecTrustRef; + +@interface NSURLProtectionSpace +@property (readonly) SecTrustRef serverTrust NS_AVAILABLE; +- (void *) FOO NS_AVAILABLE; +@property (readonly) void * mitTrust NS_AVAILABLE; + +@property (readonly) void * mittiTrust; + +@property (readonly) SecTrustRef XserverTrust; + +- (SecTrustRef) FOO1 NS_AVAILABLE; + ++ (const NSURLProtectionSpace *)ProtectionSpace; + +// pointer personality functions +@property NSUInteger (*hashFunction)(const void *item, NSUInteger (*size)(const void *item)); +@end + +@interface MustNotMigrateToInnerPointer +- (void*) nono; +- (void) setNono : (void*) val; +@end diff --git a/test/ARCMT/objcmt-migrate-all.m.result b/test/ARCMT/objcmt-migrate-all.m.result new file mode 100644 index 000000000000..d2ee4090b28c --- /dev/null +++ b/test/ARCMT/objcmt-migrate-all.m.result @@ -0,0 +1,134 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-all -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result +// rdar://15396636 + +#ifndef NS_RETURNS_INNER_POINTER // defined in iOS 6 for sure +#define NS_RETURNS_INNER_POINTER __attribute__((objc_returns_inner_pointer)) +#endif + +#define CF_IMPLICIT_BRIDGING_ENABLED _Pragma("clang arc_cf_code_audited begin") + +#define CF_IMPLICIT_BRIDGING_DISABLED _Pragma("clang arc_cf_code_audited end") + +#if __has_feature(attribute_ns_returns_retained) +#define NS_RETURNS_RETAINED __attribute__((ns_returns_retained)) +#endif +#if __has_feature(attribute_cf_returns_retained) +#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) +#endif +#if __has_feature(attribute_ns_returns_not_retained) +#define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) +#endif +#if __has_feature(attribute_cf_returns_not_retained) +#define CF_RETURNS_NOT_RETAINED __attribute__((cf_returns_not_retained)) +#endif +#if __has_feature(attribute_ns_consumes_self) +#define NS_CONSUMES_SELF __attribute__((ns_consumes_self)) +#endif +#if __has_feature(attribute_ns_consumed) +#define NS_CONSUMED __attribute__((ns_consumed)) +#endif +#if __has_feature(attribute_cf_consumed) +#define CF_CONSUMED __attribute__((cf_consumed)) +#endif +#if __has_attribute(ns_returns_autoreleased) +#define NS_RETURNS_AUTORELEASED __attribute__((ns_returns_autoreleased)) +#endif + +#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0))) + +CF_IMPLICIT_BRIDGING_ENABLED + +typedef unsigned long CFTypeID; +typedef unsigned long CFOptionFlags; +typedef unsigned long CFHashCode; + +typedef signed long CFIndex; /*AnyObj*/ +typedef const struct __CFArray * CFArrayRef; +typedef struct { + CFIndex location; + CFIndex length; +} CFRange; + +typedef void (*CFArrayApplierFunction)(const void *value, void *context); + +typedef enum CFComparisonResult : CFIndex CFComparisonResult; enum CFComparisonResult : CFIndex { + kCFCompareLessThan = -1L, + kCFCompareEqualTo = 0, + kCFCompareGreaterThan = 1 +}; + + +typedef CFComparisonResult (*CFComparatorFunction)(const void *val1, const void *val2, void *context); + +typedef struct __CFArray * CFMutableArrayRef; + +typedef const struct __CFAttributedString *CFAttributedStringRef; +typedef struct __CFAttributedString *CFMutableAttributedStringRef; + +typedef const struct __CFAllocator * CFAllocatorRef; + +typedef const struct __CFString * CFStringRef; +typedef struct __CFString * CFMutableStringRef; + +typedef const struct __CFDictionary * CFDictionaryRef; +typedef struct __CFDictionary * CFMutableDictionaryRef; + +typedef struct CGImage *CGImageRef; + +typedef struct OpaqueJSValue* JSObjectRef; + +typedef JSObjectRef TTJSObjectRef; +typedef unsigned int NSUInteger; + +CF_IMPLICIT_BRIDGING_DISABLED + +@interface I +@property (nonatomic, readonly) void *ReturnsInnerPointer; +@property (nonatomic, readonly) int *AlreadyReturnsInnerPointer NS_RETURNS_INNER_POINTER; +@end + +@interface UIImage +@property (nonatomic, readonly) CGImageRef CGImage CF_RETURNS_NOT_RETAINED; +@end + +@interface NSData +@property (nonatomic, readonly) void *bytes; +@property (nonatomic, readonly) void **ptr_bytes __attribute__((availability(macosx,unavailable))); +@end + +@interface NSMutableData +@property (nonatomic, readonly) void *mutableBytes __attribute__((deprecated)) __attribute__((unavailable)); +@end + +@interface JS +@property (nonatomic, readonly) JSObjectRef JSObject; +@property (nonatomic, readonly) TTJSObjectRef JSObject1; +@property (nonatomic, readonly) JSObjectRef *JSObject2; +@end + +// rdar://15044991 +typedef void *SecTrustRef; + +@interface NSURLProtectionSpace +@property (readonly) SecTrustRef serverTrust NS_AVAILABLE; +@property (nonatomic, readonly) void *FOO NS_AVAILABLE; +@property (readonly) void * mitTrust NS_AVAILABLE; + +@property (readonly) void * mittiTrust; + +@property (readonly) SecTrustRef XserverTrust; + +@property (nonatomic, readonly) SecTrustRef FOO1 NS_AVAILABLE; + ++ (const NSURLProtectionSpace *)ProtectionSpace; + +// pointer personality functions +@property NSUInteger (*hashFunction)(const void *item, NSUInteger (*size)(const void *item)); +@end + +@interface MustNotMigrateToInnerPointer +@property (nonatomic) void *nono; +@end diff --git a/test/ARCMT/objcmt-ns-macros.m b/test/ARCMT/objcmt-ns-macros.m new file mode 100644 index 000000000000..1bf55d8ed46b --- /dev/null +++ b/test/ARCMT/objcmt-ns-macros.m @@ -0,0 +1,296 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-ns-macros -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +typedef long NSInteger; +typedef unsigned long NSUInteger; + +#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type +#define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type +#define DEPRECATED __attribute__((deprecated)) + +enum { + blah, + blarg +}; +typedef NSInteger wibble; + +enum { + UIViewAutoresizingNone = 0, + UIViewAutoresizingFlexibleLeftMargin, + UIViewAutoresizingFlexibleWidth, + UIViewAutoresizingFlexibleRightMargin, + UIViewAutoresizingFlexibleTopMargin, + UIViewAutoresizingFlexibleHeight, + UIViewAutoresizingFlexibleBottomMargin +}; +typedef NSUInteger UITableViewCellStyle; + +typedef enum { + UIViewAnimationTransitionNone, + UIViewAnimationTransitionFlipFromLeft, + UIViewAnimationTransitionFlipFromRight, + UIViewAnimationTransitionCurlUp, + UIViewAnimationTransitionCurlDown, +} UIViewAnimationTransition; + +typedef enum { + UIViewOne = 0, + UIViewTwo = 1 << 0, + UIViewThree = 1 << 1, + UIViewFour = 1 << 2, + UIViewFive = 1 << 3, + UIViewSix = 1 << 4, + UIViewSeven = 1 << 5 +} UITableView; + +enum { + UIOne = 0, + UITwo = 0x1, + UIthree = 0x8, + UIFour = 0x100 +}; +typedef NSInteger UI; + +typedef enum { + UIP2One = 0, + UIP2Two = 0x1, + UIP2three = 0x8, + UIP2Four = 0x100 +} UIPOWER2; + +enum { + UNOne, + UNTwo +}; + +// Should use NS_ENUM even though it is all power of 2. +enum { + UIKOne = 1, + UIKTwo = 2, +}; +typedef NSInteger UIK; + +typedef enum { + NSTickMarkBelow = 0, + NSTickMarkAbove = 1, + NSTickMarkLeft = NSTickMarkAbove, + NSTickMarkRight = NSTickMarkBelow +} NSTickMarkPosition; + +enum { + UIViewNone = 0x0, + UIViewMargin = 0x1, + UIViewWidth = 0x2, + UIViewRightMargin = 0x3, + UIViewBottomMargin = 0xbadbeef +}; +typedef NSInteger UITableStyle; + +enum { + UIView0 = 0, + UIView1 = 0XBADBEEF +}; +typedef NSInteger UIStyle; + +enum { + NSTIFFFileType, + NSBMPFileType, + NSGIFFileType, + NSJPEGFileType, + NSPNGFileType, + NSJPEG2000FileType +}; +typedef NSUInteger NSBitmapImageFileType; + +enum { + NSWarningAlertStyle = 0, + NSInformationalAlertStyle = 1, + NSCriticalAlertStyle = 2 +}; +typedef NSUInteger NSAlertStyle; + +enum { + D_NSTIFFFileType, + D_NSBMPFileType, + D_NSGIFFileType, + D_NSJPEGFileType, + D_NSPNGFileType, + D_NSJPEG2000FileType +}; +typedef NSUInteger D_NSBitmapImageFileType DEPRECATED; + +typedef enum { + D_NSTickMarkBelow = 0, + D_NSTickMarkAbove = 1 +} D_NSTickMarkPosition DEPRECATED; + + +#define NS_ENUM_AVAILABLE(X,Y) + +enum { + NSFStrongMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (0UL << 0), + NSFOpaqueMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (2UL << 0), + NSFMallocMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (3UL << 0), + NSFMachVirtualMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (4UL << 0), + NSFWeakMemory NS_ENUM_AVAILABLE(10_8, 6_0) = (5UL << 0), + + NSFObjectPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (0UL << 8), + NSFOpaquePersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (1UL << 8), + NSFObjectPointerPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (2UL << 8), + NSFCStringPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (3UL << 8), + NSFStructPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (4UL << 8), + NSFIntegerPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (5UL << 8), + NSFCopyIn NS_ENUM_AVAILABLE(10_5, 6_0) = (1UL << 16), +}; + +typedef NSUInteger NSFOptions; + +typedef enum { + UIP0One = 0, + UIP0Two = 1, + UIP0Three = 2, + UIP0Four = 10, + UIP0Last = 0x100 +} UIP; + +typedef enum { + UIPZero = 0x0, + UIPOne = 0x1, + UIPTwo = 0x2, + UIP10 = 0x10, + UIPHundred = 0x100 +} UIP_3; + +typedef enum { + UIP4Zero = 0x0, + UIP4One = 0x1, + UIP4Two = 0x2, + UIP410 = 0x10, + UIP4Hundred = 100 +} UIP4_3; + +typedef enum { + UIP5Zero = 0x0, + UIP5Two = 0x2, + UIP510 = 0x3, + UIP5Hundred = 0x4 +} UIP5_3; + +typedef enum { + UIP6Zero = 0x0, + UIP6One = 0x1, + UIP6Two = 0x2, + UIP610 = 10, + UIP6Hundred = 0x100 +} UIP6_3; + +typedef enum { + UIP7Zero = 0x0, + UIP7One = 1, + UIP7Two = 0x2, + UIP710 = 10, + UIP7Hundred = 100 +} UIP7_3; + + +typedef enum { + Random = 0, + Random1 = 2, + Random2 = 4, + Random3 = 0x12345, + Random4 = 0x3444444, + Random5 = 0xbadbeef, + Random6 +} UIP8_3; + +// rdar://15200602 +#define NS_AVAILABLE_MAC(X) __attribute__((availability(macosx,introduced=X))) +#define NS_ENUM_AVAILABLE_MAC(X) __attribute__((availability(macosx,introduced=X))) + +enum { + NSModalResponseStop = (-1000), // Also used as the default response for sheets + NSModalResponseAbort = (-1001), + NSModalResponseContinue = (-1002), +} NS_ENUM_AVAILABLE_MAC(10.9); +typedef NSInteger NSModalResponse NS_AVAILABLE_MAC(10.9); + +// rdar://15201056 +typedef NSUInteger FarFarAwayOptions; + +// rdar://15200915 +typedef NSUInteger FarAwayOptions; +enum { + NSWorkspaceLaunchAndPrint = 0x00000002, + NSWorkspaceLaunchWithErrorPresentation = 0x00000040, + NSWorkspaceLaunchInhibitingBackgroundOnly = 0x00000080, + NSWorkspaceLaunchWithoutAddingToRecents = 0x00000100, + NSWorkspaceLaunchWithoutActivation = 0x00000200, + NSWorkspaceLaunchAsync = 0x00010000, + NSWorkspaceLaunchAllowingClassicStartup = 0x00020000, + NSWorkspaceLaunchPreferringClassic = 0x00040000, + NSWorkspaceLaunchNewInstance = 0x00080000, + NSWorkspaceLaunchAndHide = 0x00100000, + NSWorkspaceLaunchAndHideOthers = 0x00200000, + NSWorkspaceLaunchDefault = NSWorkspaceLaunchAsync | + NSWorkspaceLaunchAllowingClassicStartup +}; +typedef NSUInteger NSWorkspaceLaunchOptions; + +enum { + NSExcludeQuickDrawElementsIconCreationOption = 1 << 1, + NSExclude10_4ElementsIconCreationOption = 1 << 2 +}; +typedef NSUInteger NSExcludeOptions; + +enum { + NSExcludeQuickDrawElementsCreationOption = 1 << 1, + NSExclude10_4ElementsCreationOption = 1 << 2 +}; +typedef NSUInteger NSExcludeCreationOption; + +enum { + FarAway1 = 1 << 1, + FarAway2 = 1 << 2 +}; + +enum { + NSExcludeQuickDrawElementsIconOption = 1 << 1, + NSExclude10_4ElementsIconOption = 1 << 2 +}; +typedef NSUInteger NSExcludeIconOptions; + +@interface INTF { + NSExcludeIconOptions I1; + NSExcludeIconOptions I2; +} +@end + +enum { + FarFarAway1 = 1 << 1, + FarFarAway2 = 1 << 2 +}; + +// rdar://15200915 +typedef NS_OPTIONS(NSUInteger, NSWindowOcclusionState) { + NSWindowOcclusionStateVisible = 1UL << 1, +}; + +typedef NSUInteger NSWindowNumberListOptions; + +enum { + NSDirectSelection = 0, + NSSelectingNext, + NSSelectingPrevious +}; +typedef NSUInteger NSSelectionDirection; + +// standard window buttons +enum { + NSWindowCloseButton, + NSWindowMiniaturizeButton, + NSWindowZoomButton, + NSWindowToolbarButton, + NSWindowDocumentIconButton +}; diff --git a/test/ARCMT/objcmt-ns-macros.m.result b/test/ARCMT/objcmt-ns-macros.m.result new file mode 100644 index 000000000000..0b640ac35676 --- /dev/null +++ b/test/ARCMT/objcmt-ns-macros.m.result @@ -0,0 +1,279 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-ns-macros -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +typedef long NSInteger; +typedef unsigned long NSUInteger; + +#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type +#define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type +#define DEPRECATED __attribute__((deprecated)) + +typedef NS_ENUM(NSInteger, wibble) { + blah, + blarg +}; + +typedef NS_ENUM(NSUInteger, UITableViewCellStyle) { + UIViewAutoresizingNone = 0, + UIViewAutoresizingFlexibleLeftMargin, + UIViewAutoresizingFlexibleWidth, + UIViewAutoresizingFlexibleRightMargin, + UIViewAutoresizingFlexibleTopMargin, + UIViewAutoresizingFlexibleHeight, + UIViewAutoresizingFlexibleBottomMargin +}; + +typedef NS_ENUM(NSInteger, UIViewAnimationTransition) { + UIViewAnimationTransitionNone, + UIViewAnimationTransitionFlipFromLeft, + UIViewAnimationTransitionFlipFromRight, + UIViewAnimationTransitionCurlUp, + UIViewAnimationTransitionCurlDown, +} ; + +typedef NS_OPTIONS(NSUInteger, UITableView) { + UIViewOne = 0, + UIViewTwo = 1 << 0, + UIViewThree = 1 << 1, + UIViewFour = 1 << 2, + UIViewFive = 1 << 3, + UIViewSix = 1 << 4, + UIViewSeven = 1 << 5 +} ; + +typedef NS_OPTIONS(NSUInteger, UI) { + UIOne = 0, + UITwo = 0x1, + UIthree = 0x8, + UIFour = 0x100 +}; + +typedef NS_OPTIONS(NSUInteger, UIPOWER2) { + UIP2One = 0, + UIP2Two = 0x1, + UIP2three = 0x8, + UIP2Four = 0x100 +} ; + +enum { + UNOne, + UNTwo +}; + +// Should use NS_ENUM even though it is all power of 2. +typedef NS_ENUM(NSInteger, UIK) { + UIKOne = 1, + UIKTwo = 2, +}; + +typedef NS_ENUM(NSInteger, NSTickMarkPosition) { + NSTickMarkBelow = 0, + NSTickMarkAbove = 1, + NSTickMarkLeft = NSTickMarkAbove, + NSTickMarkRight = NSTickMarkBelow +} ; + +typedef NS_OPTIONS(NSUInteger, UITableStyle) { + UIViewNone = 0x0, + UIViewMargin = 0x1, + UIViewWidth = 0x2, + UIViewRightMargin = 0x3, + UIViewBottomMargin = 0xbadbeef +}; + +typedef NS_OPTIONS(NSUInteger, UIStyle) { + UIView0 = 0, + UIView1 = 0XBADBEEF +}; + +typedef NS_ENUM(NSUInteger, NSBitmapImageFileType) { + NSTIFFFileType, + NSBMPFileType, + NSGIFFileType, + NSJPEGFileType, + NSPNGFileType, + NSJPEG2000FileType +}; + +typedef NS_ENUM(NSUInteger, NSAlertStyle) { + NSWarningAlertStyle = 0, + NSInformationalAlertStyle = 1, + NSCriticalAlertStyle = 2 +}; + +enum { + D_NSTIFFFileType, + D_NSBMPFileType, + D_NSGIFFileType, + D_NSJPEGFileType, + D_NSPNGFileType, + D_NSJPEG2000FileType +}; +typedef NSUInteger D_NSBitmapImageFileType DEPRECATED; + +typedef enum { + D_NSTickMarkBelow = 0, + D_NSTickMarkAbove = 1 +} D_NSTickMarkPosition DEPRECATED; + + +#define NS_ENUM_AVAILABLE(X,Y) + + +typedef NS_OPTIONS(NSUInteger, NSFOptions) { + NSFStrongMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (0UL << 0), + NSFOpaqueMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (2UL << 0), + NSFMallocMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (3UL << 0), + NSFMachVirtualMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (4UL << 0), + NSFWeakMemory NS_ENUM_AVAILABLE(10_8, 6_0) = (5UL << 0), + + NSFObjectPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (0UL << 8), + NSFOpaquePersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (1UL << 8), + NSFObjectPointerPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (2UL << 8), + NSFCStringPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (3UL << 8), + NSFStructPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (4UL << 8), + NSFIntegerPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (5UL << 8), + NSFCopyIn NS_ENUM_AVAILABLE(10_5, 6_0) = (1UL << 16), +}; + +typedef NS_ENUM(NSInteger, UIP) { + UIP0One = 0, + UIP0Two = 1, + UIP0Three = 2, + UIP0Four = 10, + UIP0Last = 0x100 +} ; + +typedef NS_OPTIONS(NSUInteger, UIP_3) { + UIPZero = 0x0, + UIPOne = 0x1, + UIPTwo = 0x2, + UIP10 = 0x10, + UIPHundred = 0x100 +} ; + +typedef NS_ENUM(NSInteger, UIP4_3) { + UIP4Zero = 0x0, + UIP4One = 0x1, + UIP4Two = 0x2, + UIP410 = 0x10, + UIP4Hundred = 100 +} ; + +typedef NS_OPTIONS(NSUInteger, UIP5_3) { + UIP5Zero = 0x0, + UIP5Two = 0x2, + UIP510 = 0x3, + UIP5Hundred = 0x4 +} ; + +typedef NS_ENUM(NSInteger, UIP6_3) { + UIP6Zero = 0x0, + UIP6One = 0x1, + UIP6Two = 0x2, + UIP610 = 10, + UIP6Hundred = 0x100 +} ; + +typedef NS_ENUM(NSInteger, UIP7_3) { + UIP7Zero = 0x0, + UIP7One = 1, + UIP7Two = 0x2, + UIP710 = 10, + UIP7Hundred = 100 +} ; + + +typedef NS_ENUM(NSInteger, UIP8_3) { + Random = 0, + Random1 = 2, + Random2 = 4, + Random3 = 0x12345, + Random4 = 0x3444444, + Random5 = 0xbadbeef, + Random6 +} ; + +// rdar://15200602 +#define NS_AVAILABLE_MAC(X) __attribute__((availability(macosx,introduced=X))) +#define NS_ENUM_AVAILABLE_MAC(X) __attribute__((availability(macosx,introduced=X))) + +typedef NS_ENUM(NSInteger, NSModalResponse) { + NSModalResponseStop = (-1000), // Also used as the default response for sheets + NSModalResponseAbort = (-1001), + NSModalResponseContinue = (-1002), +} NS_ENUM_AVAILABLE_MAC(10.9); + +// rdar://15201056 +typedef NSUInteger FarFarAwayOptions; + +// rdar://15200915 +typedef NS_OPTIONS(NSUInteger, FarAwayOptions) { + FarAway1 = 1 << 1, + FarAway2 = 1 << 2 +}; +typedef NS_OPTIONS(NSUInteger, NSWorkspaceLaunchOptions) { + NSWorkspaceLaunchAndPrint = 0x00000002, + NSWorkspaceLaunchWithErrorPresentation = 0x00000040, + NSWorkspaceLaunchInhibitingBackgroundOnly = 0x00000080, + NSWorkspaceLaunchWithoutAddingToRecents = 0x00000100, + NSWorkspaceLaunchWithoutActivation = 0x00000200, + NSWorkspaceLaunchAsync = 0x00010000, + NSWorkspaceLaunchAllowingClassicStartup = 0x00020000, + NSWorkspaceLaunchPreferringClassic = 0x00040000, + NSWorkspaceLaunchNewInstance = 0x00080000, + NSWorkspaceLaunchAndHide = 0x00100000, + NSWorkspaceLaunchAndHideOthers = 0x00200000, + NSWorkspaceLaunchDefault = NSWorkspaceLaunchAsync | + NSWorkspaceLaunchAllowingClassicStartup +}; + +typedef NS_OPTIONS(NSUInteger, NSExcludeOptions) { + NSExcludeQuickDrawElementsIconCreationOption = 1 << 1, + NSExclude10_4ElementsIconCreationOption = 1 << 2 +}; + +typedef NS_OPTIONS(NSUInteger, NSExcludeCreationOption) { + NSExcludeQuickDrawElementsCreationOption = 1 << 1, + NSExclude10_4ElementsCreationOption = 1 << 2 +}; + + +typedef NS_OPTIONS(NSUInteger, NSExcludeIconOptions) { + NSExcludeQuickDrawElementsIconOption = 1 << 1, + NSExclude10_4ElementsIconOption = 1 << 2 +}; + +@interface INTF { + NSExcludeIconOptions I1; + NSExcludeIconOptions I2; +} +@end + +enum { + FarFarAway1 = 1 << 1, + FarFarAway2 = 1 << 2 +}; + +// rdar://15200915 +typedef NS_OPTIONS(NSUInteger, NSWindowOcclusionState) { + NSWindowOcclusionStateVisible = 1UL << 1, +}; + +typedef NS_ENUM(NSUInteger, NSWindowNumberListOptions) { + NSWindowCloseButton, + NSWindowMiniaturizeButton, + NSWindowZoomButton, + NSWindowToolbarButton, + NSWindowDocumentIconButton +}; + +typedef NS_ENUM(NSUInteger, NSSelectionDirection) { + NSDirectSelection = 0, + NSSelectingNext, + NSSelectingPrevious +}; + +// standard window buttons diff --git a/test/ARCMT/objcmt-ns-nonatomic-iosonly.m b/test/ARCMT/objcmt-ns-nonatomic-iosonly.m new file mode 100644 index 000000000000..57b20415f969 --- /dev/null +++ b/test/ARCMT/objcmt-ns-nonatomic-iosonly.m @@ -0,0 +1,236 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fblocks -objcmt-migrate-readwrite-property -objcmt-ns-nonatomic-iosonly -objcmt-migrate-readonly-property -objcmt-atomic-property -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +#define WEBKIT_OBJC_METHOD_ANNOTATION(ANNOTATION) ANNOTATION +#define WEAK_IMPORT_ATTRIBUTE __attribute__((objc_arc_weak_reference_unavailable)) +#define AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER +#define DEPRECATED __attribute__((deprecated)) + +// rdar://15442742 +#if TARGET_OS_IPHONE + #define NS_NONATOMIC_IOSONLY nonatomic +#else + #define NS_NONATOMIC_IOSONLY atomic +#endif + +typedef char BOOL; +@class NSString; +@protocol NSCopying @end + +@interface NSObject +@end + +@interface NSDictionary : NSObject +@end + +@interface I : NSObject { + int ivarVal; +} +- (void) setWeakProp : (NSString *__weak)Val; +- (NSString *__weak) WeakProp; + +- (NSString *) StrongProp; +- (void) setStrongProp : (NSString *)Val; + +- (NSString *) UnavailProp __attribute__((unavailable)); +- (void) setUnavailProp : (NSString *)Val; + +- (NSString *) UnavailProp1 __attribute__((unavailable)); +- (void) setUnavailProp1 : (NSString *)Val __attribute__((unavailable)); + +- (NSString *) UnavailProp2; +- (void) setUnavailProp2 : (NSString *)Val __attribute__((unavailable)); + +- (NSDictionary*) undoAction; +- (void) setUndoAction: (NSDictionary*)Arg; +@end + +@implementation I +@end + +@class NSArray; + +@interface MyClass2 { +@private + NSArray *_names1; + NSArray *_names2; + NSArray *_names3; + NSArray *_names4; +} +- (void)setNames1:(NSArray *)names; +- (void)setNames4:(__strong NSArray *)names; +- (void)setNames3:(__strong NSArray *)names; +- (void)setNames2:(NSArray *)names; +- (NSArray *) names2; +- (NSArray *)names3; +- (__strong NSArray *)names4; +- (NSArray *) names1; +@end + +// Properties that contain the name "delegate" or "dataSource", +// or have exact name "target" have unsafe_unretained attribute. +@interface NSInvocation +- (id)target; +- (void)setTarget:(id)target; + +- (id) dataSource; + +- (id)xxxdelegateYYY; +- (void)setXxxdelegateYYY:(id)delegate; + +- (void)setDataSource:(id)source; + +- (id)MYtarget; +- (void)setMYtarget: (id)target; + +- (id)targetX; +- (void)setTargetX: (id)t; + +- (int)value; +- (void)setValue: (int)val; + +-(BOOL) isContinuous; +-(void) setContinuous:(BOOL)value; + +- (id) isAnObject; +- (void)setAnObject : (id) object; + +- (BOOL) isinValid; +- (void) setInValid : (BOOL) arg; + +- (void) Nothing; +- (int) Length; +- (id) object; ++ (double) D; +- (void *)JSObject WEBKIT_OBJC_METHOD_ANNOTATION(AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER); +- (BOOL)isIgnoringInteractionEvents; + +- (NSString *)getStringValue; +- (BOOL)getCounterValue; +- (void)setStringValue:(NSString *)stringValue AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER; +- (NSDictionary *)getns_dixtionary; + +- (BOOL)is3bar; // watch out +- (NSString *)get3foo; // watch out + +- (BOOL) getM; +- (BOOL) getMA; +- (BOOL) getALL; +- (BOOL) getMANY; +- (BOOL) getSome; +@end + + +@interface NSInvocation(CAT) +- (id)target; +- (void)setTarget:(id)target; + +- (id) dataSource; + +- (id)xxxdelegateYYY; +- (void)setXxxdelegateYYY:(id)delegate; + +- (void)setDataSource:(id)source; + +- (id)MYtarget; +- (void)setMYtarget: (id)target; + +- (id)targetX; +- (void)setTargetX: (id)t; + +- (int)value; +- (void)setValue: (int)val; + +-(BOOL) isContinuous; +-(void) setContinuous:(BOOL)value; + +- (id) isAnObject; +- (void)setAnObject : (id) object; + +- (BOOL) isinValid; +- (void) setInValid : (BOOL) arg; + +- (void) Nothing; +- (int) Length; +- (id) object; ++ (double) D; + +- (BOOL)is3bar; // watch out +- (NSString *)get3foo; // watch out + +- (BOOL) getM; +- (BOOL) getMA; +- (BOOL) getALL; +- (BOOL) getMANY; +- (BOOL) getSome; +@end + +DEPRECATED +@interface I_DEP +- (BOOL) isinValid; +- (void) setInValid : (BOOL) arg; +@end + +@interface AnotherOne +- (BOOL) isinValid DEPRECATED; +- (void) setInValid : (BOOL) arg; +- (id)MYtarget; +- (void)setMYtarget: (id)target DEPRECATED; +- (BOOL) getM DEPRECATED; + +- (id)xxxdelegateYYY DEPRECATED; +- (void)setXxxdelegateYYY:(id)delegate DEPRECATED; +@end + +// rdar://14987909 +#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0))) +#define NORETURN __attribute__((noreturn)) +#define ALIGNED __attribute__((aligned(16))) + +@interface NSURL +// Do not infer a property. +- (NSURL *)appStoreReceiptURL NS_AVAILABLE; +- (void) setAppStoreReceiptURL : (NSURL *)object; + +- (NSURL *)appStoreReceiptURLX NS_AVAILABLE; +- (void) setAppStoreReceiptURLX : (NSURL *)object NS_AVAILABLE; + +// Do not infer a property. +- (NSURL *)appStoreReceiptURLY ; +- (void) setAppStoreReceiptURLY : (NSURL *)object NS_AVAILABLE; + +- (id)OkToInfer NS_AVAILABLE; + +// Do not infer a property. +- (NSURL *)appStoreReceiptURLZ ; +- (void) setAppStoreReceiptURLZ : (NSURL *)object NS_AVAILABLE; + +// Do not infer a property. +- (id) t1 NORETURN NS_AVAILABLE; +- (void) setT1 : (id) arg NS_AVAILABLE; + +- (id)method1 ALIGNED NS_AVAILABLE; +- (void) setMethod1 : (id) object NS_AVAILABLE ALIGNED; + +- (NSURL *)init; // No Change ++ (id)alloc; // No Change + +- (BOOL)is1stClass; // Not a valid property +- (BOOL)isClass; // This is a valid property 'class' is not a keyword in ObjC +- (BOOL)isDouble; // Not a valid property + +@end + +// rdar://15082818 +@class NSMutableDictionary; + +@interface NSArray +- (id (^)(id, NSArray *, NSMutableDictionary *)) expressionBlock; +- (id (^)(id, NSArray *, NSMutableDictionary *)) MyBlock; +- (void) setMyBlock : (id (^)(id, NSArray *, NSMutableDictionary *)) bl; +- (id (*)(id, NSArray *, NSMutableDictionary *)) expressionFuncptr; +- (id (*)(id, NSArray *, NSMutableDictionary *)) MyFuncptr; +- (void) setMyFuncptr : (id (*)(id, NSArray *, NSMutableDictionary *)) bl; +@end diff --git a/test/ARCMT/objcmt-ns-nonatomic-iosonly.m.result b/test/ARCMT/objcmt-ns-nonatomic-iosonly.m.result new file mode 100644 index 000000000000..804142ee3280 --- /dev/null +++ b/test/ARCMT/objcmt-ns-nonatomic-iosonly.m.result @@ -0,0 +1,209 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fblocks -objcmt-migrate-readwrite-property -objcmt-ns-nonatomic-iosonly -objcmt-migrate-readonly-property -objcmt-atomic-property -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +#define WEBKIT_OBJC_METHOD_ANNOTATION(ANNOTATION) ANNOTATION +#define WEAK_IMPORT_ATTRIBUTE __attribute__((objc_arc_weak_reference_unavailable)) +#define AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER +#define DEPRECATED __attribute__((deprecated)) + +// rdar://15442742 +#if TARGET_OS_IPHONE + #define NS_NONATOMIC_IOSONLY nonatomic +#else + #define NS_NONATOMIC_IOSONLY atomic +#endif + +typedef char BOOL; +@class NSString; +@protocol NSCopying @end + +@interface NSObject +@end + +@interface NSDictionary : NSObject +@end + +@interface I : NSObject { + int ivarVal; +} +@property (NS_NONATOMIC_IOSONLY, weak) NSString *WeakProp; + +@property (NS_NONATOMIC_IOSONLY, retain) NSString *StrongProp; + +@property (NS_NONATOMIC_IOSONLY, retain) NSString *UnavailProp __attribute__((unavailable)); +- (void) setUnavailProp : (NSString *)Val; + +@property (NS_NONATOMIC_IOSONLY, retain) NSString *UnavailProp1 __attribute__((unavailable)); + +@property (NS_NONATOMIC_IOSONLY, retain) NSString *UnavailProp2; +- (void) setUnavailProp2 : (NSString *)Val __attribute__((unavailable)); + +@property (NS_NONATOMIC_IOSONLY, copy) NSDictionary *undoAction; +@end + +@implementation I +@end + +@class NSArray; + +@interface MyClass2 { +@private + NSArray *_names1; + NSArray *_names2; + NSArray *_names3; + NSArray *_names4; +} +@property (NS_NONATOMIC_IOSONLY, retain) NSArray *names2; +@property (NS_NONATOMIC_IOSONLY, retain) NSArray *names3; +@property (NS_NONATOMIC_IOSONLY, retain) NSArray *names4; +@property (NS_NONATOMIC_IOSONLY, retain) NSArray *names1; +@end + +// Properties that contain the name "delegate" or "dataSource", +// or have exact name "target" have unsafe_unretained attribute. +@interface NSInvocation +@property (NS_NONATOMIC_IOSONLY, assign) id target; + +@property (NS_NONATOMIC_IOSONLY, assign) id dataSource; + +@property (NS_NONATOMIC_IOSONLY, assign) id xxxdelegateYYY; + + +@property (NS_NONATOMIC_IOSONLY, retain) id MYtarget; + +@property (NS_NONATOMIC_IOSONLY, retain) id targetX; + +@property (NS_NONATOMIC_IOSONLY) int value; + +@property (NS_NONATOMIC_IOSONLY, getter=isContinuous) BOOL continuous; + +- (id) isAnObject; +- (void)setAnObject : (id) object; + +@property (NS_NONATOMIC_IOSONLY, getter=isinValid, readonly) BOOL inValid; +- (void) setInValid : (BOOL) arg; + +- (void) Nothing; +@property (NS_NONATOMIC_IOSONLY, readonly) int Length; +@property (NS_NONATOMIC_IOSONLY, readonly, retain) id object; ++ (double) D; +@property (NS_NONATOMIC_IOSONLY, readonly) void *JSObject WEBKIT_OBJC_METHOD_ANNOTATION(AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER); +@property (NS_NONATOMIC_IOSONLY, getter=isIgnoringInteractionEvents, readonly) BOOL ignoringInteractionEvents; + +@property (NS_NONATOMIC_IOSONLY, getter=getStringValue, retain) NSString *stringValue; +@property (NS_NONATOMIC_IOSONLY, getter=getCounterValue, readonly) BOOL counterValue; +@property (NS_NONATOMIC_IOSONLY, getter=getns_dixtionary, readonly, retain) NSDictionary *ns_dixtionary; + +- (BOOL)is3bar; // watch out +- (NSString *)get3foo; // watch out + +@property (NS_NONATOMIC_IOSONLY, getter=getM, readonly) BOOL m; +@property (NS_NONATOMIC_IOSONLY, getter=getMA, readonly) BOOL MA; +@property (NS_NONATOMIC_IOSONLY, getter=getALL, readonly) BOOL ALL; +@property (NS_NONATOMIC_IOSONLY, getter=getMANY, readonly) BOOL MANY; +@property (NS_NONATOMIC_IOSONLY, getter=getSome, readonly) BOOL some; +@end + + +@interface NSInvocation(CAT) +@property (NS_NONATOMIC_IOSONLY, assign) id target; + +@property (NS_NONATOMIC_IOSONLY, assign) id dataSource; + +@property (NS_NONATOMIC_IOSONLY, assign) id xxxdelegateYYY; + + +@property (NS_NONATOMIC_IOSONLY, retain) id MYtarget; + +@property (NS_NONATOMIC_IOSONLY, retain) id targetX; + +@property (NS_NONATOMIC_IOSONLY) int value; + +@property (NS_NONATOMIC_IOSONLY, getter=isContinuous) BOOL continuous; + +- (id) isAnObject; +- (void)setAnObject : (id) object; + +@property (NS_NONATOMIC_IOSONLY, getter=isinValid, readonly) BOOL inValid; +- (void) setInValid : (BOOL) arg; + +- (void) Nothing; +@property (NS_NONATOMIC_IOSONLY, readonly) int Length; +@property (NS_NONATOMIC_IOSONLY, readonly, retain) id object; ++ (double) D; + +- (BOOL)is3bar; // watch out +- (NSString *)get3foo; // watch out + +@property (NS_NONATOMIC_IOSONLY, getter=getM, readonly) BOOL m; +@property (NS_NONATOMIC_IOSONLY, getter=getMA, readonly) BOOL MA; +@property (NS_NONATOMIC_IOSONLY, getter=getALL, readonly) BOOL ALL; +@property (NS_NONATOMIC_IOSONLY, getter=getMANY, readonly) BOOL MANY; +@property (NS_NONATOMIC_IOSONLY, getter=getSome, readonly) BOOL some; +@end + +DEPRECATED +@interface I_DEP +- (BOOL) isinValid; +- (void) setInValid : (BOOL) arg; +@end + +@interface AnotherOne +- (BOOL) isinValid DEPRECATED; +- (void) setInValid : (BOOL) arg; +- (id)MYtarget; +- (void)setMYtarget: (id)target DEPRECATED; +- (BOOL) getM DEPRECATED; + +- (id)xxxdelegateYYY DEPRECATED; +- (void)setXxxdelegateYYY:(id)delegate DEPRECATED; +@end + +// rdar://14987909 +#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0))) +#define NORETURN __attribute__((noreturn)) +#define ALIGNED __attribute__((aligned(16))) + +@interface NSURL +// Do not infer a property. +@property (NS_NONATOMIC_IOSONLY, retain) NSURL *appStoreReceiptURL NS_AVAILABLE; +- (void) setAppStoreReceiptURL : (NSURL *)object; + +@property (NS_NONATOMIC_IOSONLY, retain) NSURL *appStoreReceiptURLX NS_AVAILABLE; + +// Do not infer a property. +@property (NS_NONATOMIC_IOSONLY, retain) NSURL *appStoreReceiptURLY ; +- (void) setAppStoreReceiptURLY : (NSURL *)object NS_AVAILABLE; + +@property (NS_NONATOMIC_IOSONLY, readonly, retain) id OkToInfer NS_AVAILABLE; + +// Do not infer a property. +@property (NS_NONATOMIC_IOSONLY, retain) NSURL *appStoreReceiptURLZ ; +- (void) setAppStoreReceiptURLZ : (NSURL *)object NS_AVAILABLE; + +// Do not infer a property. +- (id) t1 NORETURN NS_AVAILABLE; +- (void) setT1 : (id) arg NS_AVAILABLE; + +@property (NS_NONATOMIC_IOSONLY, retain) id method1 ALIGNED NS_AVAILABLE; + +- (NSURL *)init; // No Change ++ (id)alloc; // No Change + +- (BOOL)is1stClass; // Not a valid property +@property (NS_NONATOMIC_IOSONLY, getter=isClass, readonly) BOOL class; // This is a valid property 'class' is not a keyword in ObjC +- (BOOL)isDouble; // Not a valid property + +@end + +// rdar://15082818 +@class NSMutableDictionary; + +@interface NSArray +@property (NS_NONATOMIC_IOSONLY, readonly, copy) id (^expressionBlock)(id, NSArray *, NSMutableDictionary *); +@property (NS_NONATOMIC_IOSONLY, copy) id (^MyBlock)(id, NSArray *, NSMutableDictionary *); +@property (NS_NONATOMIC_IOSONLY, readonly) id (*expressionFuncptr)(id, NSArray *, NSMutableDictionary *); +@property (NS_NONATOMIC_IOSONLY) id (*MyFuncptr)(id, NSArray *, NSMutableDictionary *); +@end diff --git a/test/ARCMT/objcmt-ns-returns-inner-pointer.m b/test/ARCMT/objcmt-ns-returns-inner-pointer.m new file mode 100644 index 000000000000..bff7d80b9414 --- /dev/null +++ b/test/ARCMT/objcmt-ns-returns-inner-pointer.m @@ -0,0 +1,129 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-returns-innerpointer-property -objcmt-migrate-annotation -objcmt-migrate-readwrite-property -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +#ifndef NS_RETURNS_INNER_POINTER // defined in iOS 6 for sure +#define NS_RETURNS_INNER_POINTER __attribute__((objc_returns_inner_pointer)) +#endif + +#define CF_IMPLICIT_BRIDGING_ENABLED _Pragma("clang arc_cf_code_audited begin") + +#define CF_IMPLICIT_BRIDGING_DISABLED _Pragma("clang arc_cf_code_audited end") + +#if __has_feature(attribute_ns_returns_retained) +#define NS_RETURNS_RETAINED __attribute__((ns_returns_retained)) +#endif +#if __has_feature(attribute_cf_returns_retained) +#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) +#endif +#if __has_feature(attribute_ns_returns_not_retained) +#define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) +#endif +#if __has_feature(attribute_cf_returns_not_retained) +#define CF_RETURNS_NOT_RETAINED __attribute__((cf_returns_not_retained)) +#endif +#if __has_feature(attribute_ns_consumes_self) +#define NS_CONSUMES_SELF __attribute__((ns_consumes_self)) +#endif +#if __has_feature(attribute_ns_consumed) +#define NS_CONSUMED __attribute__((ns_consumed)) +#endif +#if __has_feature(attribute_cf_consumed) +#define CF_CONSUMED __attribute__((cf_consumed)) +#endif +#if __has_attribute(ns_returns_autoreleased) +#define NS_RETURNS_AUTORELEASED __attribute__((ns_returns_autoreleased)) +#endif + +#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0))) + +CF_IMPLICIT_BRIDGING_ENABLED + +typedef unsigned long CFTypeID; +typedef unsigned long CFOptionFlags; +typedef unsigned long CFHashCode; + +typedef signed long CFIndex; /*AnyObj*/ +typedef const struct __CFArray * CFArrayRef; +typedef struct { + CFIndex location; + CFIndex length; +} CFRange; + +typedef void (*CFArrayApplierFunction)(const void *value, void *context); + +typedef enum CFComparisonResult : CFIndex CFComparisonResult; enum CFComparisonResult : CFIndex { + kCFCompareLessThan = -1L, + kCFCompareEqualTo = 0, + kCFCompareGreaterThan = 1 +}; + + +typedef CFComparisonResult (*CFComparatorFunction)(const void *val1, const void *val2, void *context); + +typedef struct __CFArray * CFMutableArrayRef; + +typedef const struct __CFAttributedString *CFAttributedStringRef; +typedef struct __CFAttributedString *CFMutableAttributedStringRef; + +typedef const struct __CFAllocator * CFAllocatorRef; + +typedef const struct __CFString * CFStringRef; +typedef struct __CFString * CFMutableStringRef; + +typedef const struct __CFDictionary * CFDictionaryRef; +typedef struct __CFDictionary * CFMutableDictionaryRef; + +typedef struct CGImage *CGImageRef; + +typedef struct OpaqueJSValue* JSObjectRef; + +typedef JSObjectRef TTJSObjectRef; +typedef unsigned int NSUInteger; + +CF_IMPLICIT_BRIDGING_DISABLED + +@interface I +- (void*) ReturnsInnerPointer; +- (int*) AlreadyReturnsInnerPointer NS_RETURNS_INNER_POINTER; +@end + +@interface UIImage +- (CGImageRef)CGImage; +@end + +@interface NSData +- (void *)bytes; +- (void **) ptr_bytes __attribute__((availability(macosx,unavailable))); +@end + +@interface NSMutableData +- (void *)mutableBytes __attribute__((deprecated)) __attribute__((unavailable)); +@end + +@interface JS +- (JSObjectRef)JSObject; +- (TTJSObjectRef)JSObject1; +- (JSObjectRef*)JSObject2; +@end + +// rdar://15044991 +typedef void *SecTrustRef; + +@interface NSURLProtectionSpace +@property (readonly) SecTrustRef serverTrust NS_AVAILABLE; +- (void *) FOO NS_AVAILABLE; +@property (readonly) void * mitTrust NS_AVAILABLE; + +@property (readonly) void * mittiTrust; + +@property (readonly) SecTrustRef XserverTrust; + +- (SecTrustRef) FOO1 NS_AVAILABLE; + ++ (const NSURLProtectionSpace *)ProtectionSpace; + +// pointer personality functions +@property NSUInteger (*hashFunction)(const void *item, NSUInteger (*size)(const void *item)); +@end diff --git a/test/ARCMT/objcmt-ns-returns-inner-pointer.m.result b/test/ARCMT/objcmt-ns-returns-inner-pointer.m.result new file mode 100644 index 000000000000..8048e06748aa --- /dev/null +++ b/test/ARCMT/objcmt-ns-returns-inner-pointer.m.result @@ -0,0 +1,129 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-returns-innerpointer-property -objcmt-migrate-annotation -objcmt-migrate-readwrite-property -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +#ifndef NS_RETURNS_INNER_POINTER // defined in iOS 6 for sure +#define NS_RETURNS_INNER_POINTER __attribute__((objc_returns_inner_pointer)) +#endif + +#define CF_IMPLICIT_BRIDGING_ENABLED _Pragma("clang arc_cf_code_audited begin") + +#define CF_IMPLICIT_BRIDGING_DISABLED _Pragma("clang arc_cf_code_audited end") + +#if __has_feature(attribute_ns_returns_retained) +#define NS_RETURNS_RETAINED __attribute__((ns_returns_retained)) +#endif +#if __has_feature(attribute_cf_returns_retained) +#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) +#endif +#if __has_feature(attribute_ns_returns_not_retained) +#define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) +#endif +#if __has_feature(attribute_cf_returns_not_retained) +#define CF_RETURNS_NOT_RETAINED __attribute__((cf_returns_not_retained)) +#endif +#if __has_feature(attribute_ns_consumes_self) +#define NS_CONSUMES_SELF __attribute__((ns_consumes_self)) +#endif +#if __has_feature(attribute_ns_consumed) +#define NS_CONSUMED __attribute__((ns_consumed)) +#endif +#if __has_feature(attribute_cf_consumed) +#define CF_CONSUMED __attribute__((cf_consumed)) +#endif +#if __has_attribute(ns_returns_autoreleased) +#define NS_RETURNS_AUTORELEASED __attribute__((ns_returns_autoreleased)) +#endif + +#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0))) + +CF_IMPLICIT_BRIDGING_ENABLED + +typedef unsigned long CFTypeID; +typedef unsigned long CFOptionFlags; +typedef unsigned long CFHashCode; + +typedef signed long CFIndex; /*AnyObj*/ +typedef const struct __CFArray * CFArrayRef; +typedef struct { + CFIndex location; + CFIndex length; +} CFRange; + +typedef void (*CFArrayApplierFunction)(const void *value, void *context); + +typedef enum CFComparisonResult : CFIndex CFComparisonResult; enum CFComparisonResult : CFIndex { + kCFCompareLessThan = -1L, + kCFCompareEqualTo = 0, + kCFCompareGreaterThan = 1 +}; + + +typedef CFComparisonResult (*CFComparatorFunction)(const void *val1, const void *val2, void *context); + +typedef struct __CFArray * CFMutableArrayRef; + +typedef const struct __CFAttributedString *CFAttributedStringRef; +typedef struct __CFAttributedString *CFMutableAttributedStringRef; + +typedef const struct __CFAllocator * CFAllocatorRef; + +typedef const struct __CFString * CFStringRef; +typedef struct __CFString * CFMutableStringRef; + +typedef const struct __CFDictionary * CFDictionaryRef; +typedef struct __CFDictionary * CFMutableDictionaryRef; + +typedef struct CGImage *CGImageRef; + +typedef struct OpaqueJSValue* JSObjectRef; + +typedef JSObjectRef TTJSObjectRef; +typedef unsigned int NSUInteger; + +CF_IMPLICIT_BRIDGING_DISABLED + +@interface I +- (void*) ReturnsInnerPointer NS_RETURNS_INNER_POINTER; +- (int*) AlreadyReturnsInnerPointer NS_RETURNS_INNER_POINTER; +@end + +@interface UIImage +- (CGImageRef)CGImage CF_RETURNS_NOT_RETAINED; +@end + +@interface NSData +- (void *)bytes NS_RETURNS_INNER_POINTER; +- (void **) ptr_bytes __attribute__((availability(macosx,unavailable))) NS_RETURNS_INNER_POINTER; +@end + +@interface NSMutableData +- (void *)mutableBytes __attribute__((deprecated)) __attribute__((unavailable)) NS_RETURNS_INNER_POINTER; +@end + +@interface JS +- (JSObjectRef)JSObject; +- (TTJSObjectRef)JSObject1; +- (JSObjectRef*)JSObject2 NS_RETURNS_INNER_POINTER; +@end + +// rdar://15044991 +typedef void *SecTrustRef; + +@interface NSURLProtectionSpace +@property (readonly) SecTrustRef NS_RETURNS_INNER_POINTER serverTrust NS_AVAILABLE; +- (void *) FOO NS_AVAILABLE NS_RETURNS_INNER_POINTER; +@property (readonly) void * NS_RETURNS_INNER_POINTER mitTrust NS_AVAILABLE; + +@property (readonly) void * NS_RETURNS_INNER_POINTER mittiTrust; + +@property (readonly) SecTrustRef NS_RETURNS_INNER_POINTER XserverTrust; + +- (SecTrustRef) FOO1 NS_AVAILABLE NS_RETURNS_INNER_POINTER; + ++ (const NSURLProtectionSpace *)ProtectionSpace; + +// pointer personality functions +@property NSUInteger (*hashFunction)(const void *item, NSUInteger (*size)(const void *item)); +@end diff --git a/test/ARCMT/objcmt-property-availability.m b/test/ARCMT/objcmt-property-availability.m new file mode 100644 index 000000000000..d499221a74cd --- /dev/null +++ b/test/ARCMT/objcmt-property-availability.m @@ -0,0 +1,46 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-readwrite-property -objcmt-migrate-readonly-property -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result +// rdar://15300059 + + +#define __NSi_7_0 introduced=7.0 +#define __NSi_6_0 introduced=6.0 + +#define CF_AVAILABLE(_mac, _ios) __attribute__((availability(ios,__NSi_##_ios))) +#define CF_AVAILABLE_MAC(_mac) __attribute__((availability(macosx,__NSi_##_mac))) +#define CF_AVAILABLE_IOS(_ios) __attribute__((availability(macosx,unavailable))) + +#define NS_AVAILABLE(_mac, _ios) CF_AVAILABLE(_mac, _ios) +#define NS_AVAILABLE_MAC(_mac) CF_AVAILABLE_MAC(_mac) +#define NS_AVAILABLE_IOS(_ios) CF_AVAILABLE_IOS(_ios) + +#define UNAVAILABLE __attribute__((unavailable("not available in automatic reference counting mode"))) + +@interface MKMapItem +- (MKMapItem *)source NS_AVAILABLE(10_9, 6_0); +- (void)setSource:(MKMapItem *)source NS_AVAILABLE(10_9, 7_0); + +- (void)setDest:(MKMapItem *)source NS_AVAILABLE(10_9, 6_0); +- (MKMapItem *)dest NS_AVAILABLE(10_9, 6_0); + +- (MKMapItem *)final; +- (void)setFinal:(MKMapItem *)source; + +- (MKMapItem *)total NS_AVAILABLE(10_9, 6_0); +- (void)setTotal:(MKMapItem *)source; + +- (MKMapItem *)comp NS_AVAILABLE(10_9, 6_0); +- (void)setComp:(MKMapItem *)source UNAVAILABLE; + +- (MKMapItem *)tally UNAVAILABLE NS_AVAILABLE(10_9, 6_0); +- (void)setTally:(MKMapItem *)source UNAVAILABLE NS_AVAILABLE(10_9, 6_0); + +- (MKMapItem *)itally NS_AVAILABLE(10_9, 6_0); +- (void)setItally:(MKMapItem *)source UNAVAILABLE NS_AVAILABLE(10_9, 6_0); + +- (MKMapItem *)normal UNAVAILABLE; +- (void)setNormal:(MKMapItem *)source UNAVAILABLE NS_AVAILABLE(10_9, 6_0); +@end + diff --git a/test/ARCMT/objcmt-property-availability.m.result b/test/ARCMT/objcmt-property-availability.m.result new file mode 100644 index 000000000000..681f9a99bf55 --- /dev/null +++ b/test/ARCMT/objcmt-property-availability.m.result @@ -0,0 +1,43 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-readwrite-property -objcmt-migrate-readonly-property -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result +// rdar://15300059 + + +#define __NSi_7_0 introduced=7.0 +#define __NSi_6_0 introduced=6.0 + +#define CF_AVAILABLE(_mac, _ios) __attribute__((availability(ios,__NSi_##_ios))) +#define CF_AVAILABLE_MAC(_mac) __attribute__((availability(macosx,__NSi_##_mac))) +#define CF_AVAILABLE_IOS(_ios) __attribute__((availability(macosx,unavailable))) + +#define NS_AVAILABLE(_mac, _ios) CF_AVAILABLE(_mac, _ios) +#define NS_AVAILABLE_MAC(_mac) CF_AVAILABLE_MAC(_mac) +#define NS_AVAILABLE_IOS(_ios) CF_AVAILABLE_IOS(_ios) + +#define UNAVAILABLE __attribute__((unavailable("not available in automatic reference counting mode"))) + +@interface MKMapItem +@property (nonatomic, retain) MKMapItem *source NS_AVAILABLE(10_9, 6_0); +- (void)setSource:(MKMapItem *)source NS_AVAILABLE(10_9, 7_0); + +@property (nonatomic, retain) MKMapItem *dest NS_AVAILABLE(10_9, 6_0); + +@property (nonatomic, retain) MKMapItem *final; + +@property (nonatomic, retain) MKMapItem *total NS_AVAILABLE(10_9, 6_0); +- (void)setTotal:(MKMapItem *)source; + +- (MKMapItem *)comp NS_AVAILABLE(10_9, 6_0); +- (void)setComp:(MKMapItem *)source UNAVAILABLE; + +@property (nonatomic, retain) MKMapItem *tally UNAVAILABLE NS_AVAILABLE(10_9, 6_0); + +- (MKMapItem *)itally NS_AVAILABLE(10_9, 6_0); +- (void)setItally:(MKMapItem *)source UNAVAILABLE NS_AVAILABLE(10_9, 6_0); + +- (MKMapItem *)normal UNAVAILABLE; +- (void)setNormal:(MKMapItem *)source UNAVAILABLE NS_AVAILABLE(10_9, 6_0); +@end + diff --git a/test/ARCMT/objcmt-property.m b/test/ARCMT/objcmt-property.m new file mode 100644 index 000000000000..3b77aadb892b --- /dev/null +++ b/test/ARCMT/objcmt-property.m @@ -0,0 +1,237 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fblocks -objcmt-migrate-readwrite-property -objcmt-migrate-readonly-property -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +#define WEBKIT_OBJC_METHOD_ANNOTATION(ANNOTATION) ANNOTATION +#define WEAK_IMPORT_ATTRIBUTE __attribute__((objc_arc_weak_reference_unavailable)) +#define AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER +#define DEPRECATED __attribute__((deprecated)) + +typedef char BOOL; +@class NSString; +@protocol NSCopying @end + +@interface NSObject +@end + +@interface NSDictionary : NSObject +@end + +@interface I : NSObject { + int ivarVal; +} +- (void) setWeakProp : (NSString *__weak)Val; +- (NSString *__weak) WeakProp; + +- (NSString *) StrongProp; +- (void) setStrongProp : (NSString *)Val; + +- (NSString *) UnavailProp __attribute__((unavailable)); +- (void) setUnavailProp : (NSString *)Val; + +- (NSString *) UnavailProp1 __attribute__((unavailable)); +- (void) setUnavailProp1 : (NSString *)Val __attribute__((unavailable)); + +- (NSString *) UnavailProp2; +- (void) setUnavailProp2 : (NSString *)Val __attribute__((unavailable)); + +- (NSDictionary*) undoAction; +- (void) setUndoAction: (NSDictionary*)Arg; +@end + +@implementation I +@end + +@class NSArray; + +@interface MyClass2 { +@private + NSArray *_names1; + NSArray *_names2; + NSArray *_names3; + NSArray *_names4; +} +- (void)setNames1:(NSArray *)names; +- (void)setNames4:(__strong NSArray *)names; +- (void)setNames3:(__strong NSArray *)names; +- (void)setNames2:(NSArray *)names; +- (NSArray *) names2; +- (NSArray *)names3; +- (__strong NSArray *)names4; +- (NSArray *) names1; +@end + +// Properties that contain the name "delegate" or "dataSource", +// or have exact name "target" have unsafe_unretained attribute. +@interface NSInvocation +- (id)target; +- (void)setTarget:(id)target; + +- (id) dataSource; + +- (id)xxxdelegateYYY; +- (void)setXxxdelegateYYY:(id)delegate; + +- (void)setDataSource:(id)source; + +- (id)MYtarget; +- (void)setMYtarget: (id)target; + +- (id)targetX; +- (void)setTargetX: (id)t; + +- (int)value; +- (void)setValue: (int)val; + +-(BOOL) isContinuous; +-(void) setContinuous:(BOOL)value; + +- (id) isAnObject; +- (void)setAnObject : (id) object; + +- (BOOL) isinValid; +- (void) setInValid : (BOOL) arg; + +- (void) Nothing; +- (int) Length; +- (id) object; ++ (double) D; +- (void *)JSObject WEBKIT_OBJC_METHOD_ANNOTATION(AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER); +- (BOOL)isIgnoringInteractionEvents; + +- (NSString *)getStringValue; +- (BOOL)getCounterValue; +- (void)setStringValue:(NSString *)stringValue AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER; +- (NSDictionary *)getns_dixtionary; + +- (BOOL)is3bar; // watch out +- (NSString *)get3foo; // watch out + +- (BOOL) getM; +- (BOOL) getMA; +- (BOOL) getALL; +- (BOOL) getMANY; +- (BOOL) getSome; +@end + + +@interface NSInvocation(CAT) +- (id)target; +- (void)setTarget:(id)target; + +- (id) dataSource; + +- (id)xxxdelegateYYY; +- (void)setXxxdelegateYYY:(id)delegate; + +- (void)setDataSource:(id)source; + +- (id)MYtarget; +- (void)setMYtarget: (id)target; + +- (id)targetX; +- (void)setTargetX: (id)t; + +- (int)value; +- (void)setValue: (int)val; + +-(BOOL) isContinuous; +-(void) setContinuous:(BOOL)value; + +- (id) isAnObject; +- (void)setAnObject : (id) object; + +- (BOOL) isinValid; +- (void) setInValid : (BOOL) arg; + +- (void) Nothing; +- (int) Length; +- (id) object; ++ (double) D; + +- (BOOL)is3bar; // watch out +- (NSString *)get3foo; // watch out + +- (BOOL) getM; +- (BOOL) getMA; +- (BOOL) getALL; +- (BOOL) getMANY; +- (BOOL) getSome; +@end + +DEPRECATED +@interface I_DEP +- (BOOL) isinValid; +- (void) setInValid : (BOOL) arg; +@end + +@interface AnotherOne +- (BOOL) isinValid DEPRECATED; +- (void) setInValid : (BOOL) arg; +- (id)MYtarget; +- (void)setMYtarget: (id)target DEPRECATED; +- (BOOL) getM DEPRECATED; + +- (id)xxxdelegateYYY DEPRECATED; +- (void)setXxxdelegateYYY:(id)delegate DEPRECATED; +@end + +// rdar://14987909 +#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0))) +#define NORETURN __attribute__((noreturn)) +#define ALIGNED __attribute__((aligned(16))) + +@interface NSURL +// Do not infer a property. +- (NSURL *)appStoreReceiptURL NS_AVAILABLE; +- (void) setAppStoreReceiptURL : (NSURL *)object; + +- (NSURL *)appStoreReceiptURLX NS_AVAILABLE; +- (void) setAppStoreReceiptURLX : (NSURL *)object NS_AVAILABLE; + +// Do not infer a property. +- (NSURL *)appStoreReceiptURLY ; +- (void) setAppStoreReceiptURLY : (NSURL *)object NS_AVAILABLE; + +- (id)OkToInfer NS_AVAILABLE; + +// Do not infer a property. +- (NSURL *)appStoreReceiptURLZ ; +- (void) setAppStoreReceiptURLZ : (NSURL *)object NS_AVAILABLE; + +// Do not infer a property. +- (id) t1 NORETURN NS_AVAILABLE; +- (void) setT1 : (id) arg NS_AVAILABLE; + +- (id)method1 ALIGNED NS_AVAILABLE; +- (void) setMethod1 : (id) object NS_AVAILABLE ALIGNED; + +- (NSURL *)init; // No Change ++ (id)alloc; // No Change + +- (BOOL)is1stClass; // Not a valid property +- (BOOL)isClass; // This is a valid property 'class' is not a keyword in ObjC +- (BOOL)isDouble; // Not a valid property + +@end + +// rdar://15082818 +@class NSMutableDictionary; + +@interface NSArray +- (id (^)(id, NSArray *, NSMutableDictionary *)) expressionBlock; +- (id (^)(id, NSArray *, NSMutableDictionary *)) MyBlock; +- (void) setMyBlock : (id (^)(id, NSArray *, NSMutableDictionary *)) bl; +- (id (*)(id, NSArray *, NSMutableDictionary *)) expressionFuncptr; +- (id (*)(id, NSArray *, NSMutableDictionary *)) MyFuncptr; +- (void) setMyFuncptr : (id (*)(id, NSArray *, NSMutableDictionary *)) bl; +@end + +// rdar://15231241 +@interface rdar15231241 +@property (nonatomic, readonly) double Ddelegate; +@property (nonatomic, readonly) float Fdelegate; +@property (nonatomic, readonly) int Idelegate; +@property (nonatomic, readonly) BOOL Bdelegate; +@end diff --git a/test/ARCMT/objcmt-property.m.result b/test/ARCMT/objcmt-property.m.result new file mode 100644 index 000000000000..c6380c80523f --- /dev/null +++ b/test/ARCMT/objcmt-property.m.result @@ -0,0 +1,210 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fblocks -objcmt-migrate-readwrite-property -objcmt-migrate-readonly-property -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +#define WEBKIT_OBJC_METHOD_ANNOTATION(ANNOTATION) ANNOTATION +#define WEAK_IMPORT_ATTRIBUTE __attribute__((objc_arc_weak_reference_unavailable)) +#define AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER +#define DEPRECATED __attribute__((deprecated)) + +typedef char BOOL; +@class NSString; +@protocol NSCopying @end + +@interface NSObject +@end + +@interface NSDictionary : NSObject +@end + +@interface I : NSObject { + int ivarVal; +} +@property (nonatomic, weak) NSString *WeakProp; + +@property (nonatomic, retain) NSString *StrongProp; + +@property (nonatomic, retain) NSString *UnavailProp __attribute__((unavailable)); +- (void) setUnavailProp : (NSString *)Val; + +@property (nonatomic, retain) NSString *UnavailProp1 __attribute__((unavailable)); + +@property (nonatomic, retain) NSString *UnavailProp2; +- (void) setUnavailProp2 : (NSString *)Val __attribute__((unavailable)); + +@property (nonatomic, copy) NSDictionary *undoAction; +@end + +@implementation I +@end + +@class NSArray; + +@interface MyClass2 { +@private + NSArray *_names1; + NSArray *_names2; + NSArray *_names3; + NSArray *_names4; +} +@property (nonatomic, retain) NSArray *names2; +@property (nonatomic, retain) NSArray *names3; +@property (nonatomic, retain) NSArray *names4; +@property (nonatomic, retain) NSArray *names1; +@end + +// Properties that contain the name "delegate" or "dataSource", +// or have exact name "target" have unsafe_unretained attribute. +@interface NSInvocation +@property (nonatomic, assign) id target; + +@property (nonatomic, assign) id dataSource; + +@property (nonatomic, assign) id xxxdelegateYYY; + + +@property (nonatomic, retain) id MYtarget; + +@property (nonatomic, retain) id targetX; + +@property (nonatomic) int value; + +@property (nonatomic, getter=isContinuous) BOOL continuous; + +- (id) isAnObject; +- (void)setAnObject : (id) object; + +@property (nonatomic, getter=isinValid, readonly) BOOL inValid; +- (void) setInValid : (BOOL) arg; + +- (void) Nothing; +@property (nonatomic, readonly) int Length; +@property (nonatomic, readonly, retain) id object; ++ (double) D; +@property (nonatomic, readonly) void *JSObject WEBKIT_OBJC_METHOD_ANNOTATION(AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER); +@property (nonatomic, getter=isIgnoringInteractionEvents, readonly) BOOL ignoringInteractionEvents; + +@property (nonatomic, getter=getStringValue, retain) NSString *stringValue; +@property (nonatomic, getter=getCounterValue, readonly) BOOL counterValue; +@property (nonatomic, getter=getns_dixtionary, readonly, retain) NSDictionary *ns_dixtionary; + +- (BOOL)is3bar; // watch out +- (NSString *)get3foo; // watch out + +@property (nonatomic, getter=getM, readonly) BOOL m; +@property (nonatomic, getter=getMA, readonly) BOOL MA; +@property (nonatomic, getter=getALL, readonly) BOOL ALL; +@property (nonatomic, getter=getMANY, readonly) BOOL MANY; +@property (nonatomic, getter=getSome, readonly) BOOL some; +@end + + +@interface NSInvocation(CAT) +@property (nonatomic, assign) id target; + +@property (nonatomic, assign) id dataSource; + +@property (nonatomic, assign) id xxxdelegateYYY; + + +@property (nonatomic, retain) id MYtarget; + +@property (nonatomic, retain) id targetX; + +@property (nonatomic) int value; + +@property (nonatomic, getter=isContinuous) BOOL continuous; + +- (id) isAnObject; +- (void)setAnObject : (id) object; + +@property (nonatomic, getter=isinValid, readonly) BOOL inValid; +- (void) setInValid : (BOOL) arg; + +- (void) Nothing; +@property (nonatomic, readonly) int Length; +@property (nonatomic, readonly, retain) id object; ++ (double) D; + +- (BOOL)is3bar; // watch out +- (NSString *)get3foo; // watch out + +@property (nonatomic, getter=getM, readonly) BOOL m; +@property (nonatomic, getter=getMA, readonly) BOOL MA; +@property (nonatomic, getter=getALL, readonly) BOOL ALL; +@property (nonatomic, getter=getMANY, readonly) BOOL MANY; +@property (nonatomic, getter=getSome, readonly) BOOL some; +@end + +DEPRECATED +@interface I_DEP +- (BOOL) isinValid; +- (void) setInValid : (BOOL) arg; +@end + +@interface AnotherOne +- (BOOL) isinValid DEPRECATED; +- (void) setInValid : (BOOL) arg; +- (id)MYtarget; +- (void)setMYtarget: (id)target DEPRECATED; +- (BOOL) getM DEPRECATED; + +- (id)xxxdelegateYYY DEPRECATED; +- (void)setXxxdelegateYYY:(id)delegate DEPRECATED; +@end + +// rdar://14987909 +#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0))) +#define NORETURN __attribute__((noreturn)) +#define ALIGNED __attribute__((aligned(16))) + +@interface NSURL +// Do not infer a property. +@property (nonatomic, retain) NSURL *appStoreReceiptURL NS_AVAILABLE; +- (void) setAppStoreReceiptURL : (NSURL *)object; + +@property (nonatomic, retain) NSURL *appStoreReceiptURLX NS_AVAILABLE; + +// Do not infer a property. +@property (nonatomic, retain) NSURL *appStoreReceiptURLY ; +- (void) setAppStoreReceiptURLY : (NSURL *)object NS_AVAILABLE; + +@property (nonatomic, readonly, retain) id OkToInfer NS_AVAILABLE; + +// Do not infer a property. +@property (nonatomic, retain) NSURL *appStoreReceiptURLZ ; +- (void) setAppStoreReceiptURLZ : (NSURL *)object NS_AVAILABLE; + +// Do not infer a property. +- (id) t1 NORETURN NS_AVAILABLE; +- (void) setT1 : (id) arg NS_AVAILABLE; + +@property (nonatomic, retain) id method1 ALIGNED NS_AVAILABLE; + +- (NSURL *)init; // No Change ++ (id)alloc; // No Change + +- (BOOL)is1stClass; // Not a valid property +@property (nonatomic, getter=isClass, readonly) BOOL class; // This is a valid property 'class' is not a keyword in ObjC +- (BOOL)isDouble; // Not a valid property + +@end + +// rdar://15082818 +@class NSMutableDictionary; + +@interface NSArray +@property (nonatomic, readonly, copy) id (^expressionBlock)(id, NSArray *, NSMutableDictionary *); +@property (nonatomic, copy) id (^MyBlock)(id, NSArray *, NSMutableDictionary *); +@property (nonatomic, readonly) id (*expressionFuncptr)(id, NSArray *, NSMutableDictionary *); +@property (nonatomic) id (*MyFuncptr)(id, NSArray *, NSMutableDictionary *); +@end + +// rdar://15231241 +@interface rdar15231241 +@property (nonatomic, readonly) double Ddelegate; +@property (nonatomic, readonly) float Fdelegate; +@property (nonatomic, readonly) int Idelegate; +@property (nonatomic, readonly) BOOL Bdelegate; +@end diff --git a/test/ARCMT/objcmt-protocol-conformance.m b/test/ARCMT/objcmt-protocol-conformance.m new file mode 100644 index 000000000000..7bc7d938177f --- /dev/null +++ b/test/ARCMT/objcmt-protocol-conformance.m @@ -0,0 +1,114 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-protocol-conformance -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +@interface NSObject @end + +@protocol P +- (id) Meth1: (double) arg; +@end + +@interface Test1 // Test for no super class and no protocol list +@end + +@implementation Test1 +- (id) Meth1: (double) arg { return 0; } +@end + +@protocol P1 @end +@protocol P2 @end + +@interface Test2 // Test for no super class and with protocol list +{ + id IVAR1; + id IVAR2; +} +@end + +@implementation Test2 +- (id) Meth1: (double) arg { return 0; } +@end + +@interface Test3 : NSObject { // Test for Super class and no protocol list + id IV1; +} +@end + +@implementation Test3 +- (id) Meth1: (double) arg { return 0; } +@end + +@interface Test4 : NSObject // Test for Super class and protocol list +@end + +@implementation Test4 +- (id) Meth1: (double) arg { return 0; } +@end + +// Test5 - conforms to P3 because it implement's P3's property. +@protocol P3 +@property (copy) id Prop; +@end + +@protocol P4 +@property (copy) id Prop; +@end + +@interface Test5 : NSObject +@end + +@implementation Test5 +@synthesize Prop=_XXX; +@end + +@protocol P5 +@property (copy) id Prop; +@end + +@protocol P6 +@property (copy) id Prop; +@end + +@interface Test6 : NSObject // Test for minimal listing of conforming protocols +@property (copy) id Prop; +@end + +@implementation Test6 +@end + +@class UIDynamicAnimator, UIWindow; +@interface UIResponder : NSObject +@end + +@protocol EmptyProtocol +@end + +@protocol OptionalMethodsOnly +@optional +- (void)dynamicAnimatorWillResume:(UIDynamicAnimator*)animator; +- (void)dynamicAnimatorDidPause:(UIDynamicAnimator*)animator; +@end + +@protocol OptionalPropertiesOnly +@optional +@property (strong, nonatomic) id OptionalProperty; +@end + +@protocol OptionalEvrything +@optional +- (void)dynamicAnimatorWillResume:(UIDynamicAnimator*)animator; +@property (strong, nonatomic) id OptionalProperty; +- (void)dynamicAnimatorDidPause:(UIDynamicAnimator*)animator; +@end + +@protocol UIApplicationDelegate +@end + +@interface Test7 : UIResponder +@property (strong, nonatomic) UIWindow *window; +@end + +@implementation Test7 +@end + diff --git a/test/ARCMT/objcmt-protocol-conformance.m.result b/test/ARCMT/objcmt-protocol-conformance.m.result new file mode 100644 index 000000000000..dc0874c88f22 --- /dev/null +++ b/test/ARCMT/objcmt-protocol-conformance.m.result @@ -0,0 +1,114 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-protocol-conformance -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result + +@interface NSObject @end + +@protocol P +- (id) Meth1: (double) arg; +@end + +@interface Test1

// Test for no super class and no protocol list +@end + +@implementation Test1 +- (id) Meth1: (double) arg { return 0; } +@end + +@protocol P1 @end +@protocol P2 @end + +@interface Test2 // Test for no super class and with protocol list +{ + id IVAR1; + id IVAR2; +} +@end + +@implementation Test2 +- (id) Meth1: (double) arg { return 0; } +@end + +@interface Test3 : NSObject

{ // Test for Super class and no protocol list + id IV1; +} +@end + +@implementation Test3 +- (id) Meth1: (double) arg { return 0; } +@end + +@interface Test4 : NSObject // Test for Super class and protocol list +@end + +@implementation Test4 +- (id) Meth1: (double) arg { return 0; } +@end + +// Test5 - conforms to P3 because it implement's P3's property. +@protocol P3 +@property (copy) id Prop; +@end + +@protocol P4 +@property (copy) id Prop; +@end + +@interface Test5 : NSObject +@end + +@implementation Test5 +@synthesize Prop=_XXX; +@end + +@protocol P5 +@property (copy) id Prop; +@end + +@protocol P6 +@property (copy) id Prop; +@end + +@interface Test6 : NSObject // Test for minimal listing of conforming protocols +@property (copy) id Prop; +@end + +@implementation Test6 +@end + +@class UIDynamicAnimator, UIWindow; +@interface UIResponder : NSObject +@end + +@protocol EmptyProtocol +@end + +@protocol OptionalMethodsOnly +@optional +- (void)dynamicAnimatorWillResume:(UIDynamicAnimator*)animator; +- (void)dynamicAnimatorDidPause:(UIDynamicAnimator*)animator; +@end + +@protocol OptionalPropertiesOnly +@optional +@property (strong, nonatomic) id OptionalProperty; +@end + +@protocol OptionalEvrything +@optional +- (void)dynamicAnimatorWillResume:(UIDynamicAnimator*)animator; +@property (strong, nonatomic) id OptionalProperty; +- (void)dynamicAnimatorDidPause:(UIDynamicAnimator*)animator; +@end + +@protocol UIApplicationDelegate +@end + +@interface Test7 : UIResponder +@property (strong, nonatomic) UIWindow *window; +@end + +@implementation Test7 +@end + diff --git a/test/ARCMT/verify.m b/test/ARCMT/verify.m index bfb3b4b8ab55..02f7fccc6899 100644 --- a/test/ARCMT/verify.m +++ b/test/ARCMT/verify.m @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -arcmt-check -verify %s -// RUN: %clang_cc1 -arcmt-check -verify %t.invalid 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -arcmt-check -verify %t.invalid 2>&1 | FileCheck %s #if 0 // expected-error {{should be ignored}} diff --git a/test/ARCMT/whitelisted/Inputs/header1.h b/test/ARCMT/whitelisted/Inputs/header1.h new file mode 100644 index 000000000000..44430f3b77e3 --- /dev/null +++ b/test/ARCMT/whitelisted/Inputs/header1.h @@ -0,0 +1 @@ +// the contents are not important diff --git a/test/ARCMT/whitelisted/header1.h b/test/ARCMT/whitelisted/header1.h new file mode 100644 index 000000000000..a3014eb5b653 --- /dev/null +++ b/test/ARCMT/whitelisted/header1.h @@ -0,0 +1,5 @@ + +@interface I1 : NSObject +-(int)prop; +-(void)setProp:(int)p; +@end diff --git a/test/ARCMT/whitelisted/header1.h.result b/test/ARCMT/whitelisted/header1.h.result new file mode 100644 index 000000000000..7808fc8a6a3f --- /dev/null +++ b/test/ARCMT/whitelisted/header1.h.result @@ -0,0 +1,4 @@ + +@interface I1 : NSObject +@property (nonatomic) int prop; +@end diff --git a/test/ARCMT/whitelisted/header2.h b/test/ARCMT/whitelisted/header2.h new file mode 100644 index 000000000000..c7577ede4a49 --- /dev/null +++ b/test/ARCMT/whitelisted/header2.h @@ -0,0 +1,5 @@ + +@interface I2 : NSObject +-(int)prop; +-(void)setProp:(int)p; +@end diff --git a/test/ARCMT/whitelisted/header2.h.result b/test/ARCMT/whitelisted/header2.h.result new file mode 100644 index 000000000000..b1b52707118e --- /dev/null +++ b/test/ARCMT/whitelisted/header2.h.result @@ -0,0 +1,4 @@ + +@interface I2 : NSObject +@property (nonatomic) int prop; +@end diff --git a/test/ARCMT/whitelisted/objcmt-with-whitelist.m b/test/ARCMT/whitelisted/objcmt-with-whitelist.m new file mode 100644 index 000000000000..1b44c9a6d9fe --- /dev/null +++ b/test/ARCMT/whitelisted/objcmt-with-whitelist.m @@ -0,0 +1,12 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-readwrite-property %s -triple x86_64-apple-darwin11 -migrate -o %t.remap +// RUN: c-arcmt-test %t.remap | arcmt-test -verify-transformed-files %S/header1.h.result %S/header2.h.result +// RUN: %clang_cc1 -objcmt-migrate-readwrite-property -objcmt-white-list-dir-path=%S/Inputs %s -triple x86_64-apple-darwin11 -migrate -o %t.remap +// RUN: c-arcmt-test %t.remap | arcmt-test -verify-transformed-files %S/header1.h.result + +@interface NSObject ++ (id)alloc; +@end + +#include "header1.h" +#include "header2.h" diff --git a/test/ARCMT/with-arc-mode-check.m b/test/ARCMT/with-arc-mode-check.m deleted file mode 100644 index 33f31f522a58..000000000000 --- a/test/ARCMT/with-arc-mode-check.m +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang_cc1 -arcmt-check -fsyntax-only -fobjc-arc -x objective-c %s - -@protocol NSObject -- (oneway void)release; -@end - -void test1(id p) { - [p release]; -} diff --git a/test/ARCMT/with-arc-mode-migrate.m b/test/ARCMT/with-arc-mode-migrate.m deleted file mode 100644 index 468859478eb0..000000000000 --- a/test/ARCMT/with-arc-mode-migrate.m +++ /dev/null @@ -1,13 +0,0 @@ -// RUN: rm -rf %t -// RUN: %clang_cc1 -fsyntax-only -fobjc-arc -x objective-c %s.result -// RUN: %clang_cc1 -arcmt-migrate -mt-migrate-directory %t -fsyntax-only -fobjc-arc %s -// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result -// RUN: rm -rf %t - -@protocol NSObject -- (oneway void)release; -@end - -void test1(id p) { - [p release]; -} diff --git a/test/ARCMT/with-arc-mode-migrate.m.result b/test/ARCMT/with-arc-mode-migrate.m.result deleted file mode 100644 index dd34b9990878..000000000000 --- a/test/ARCMT/with-arc-mode-migrate.m.result +++ /dev/null @@ -1,12 +0,0 @@ -// RUN: rm -rf %t -// RUN: %clang_cc1 -fsyntax-only -fobjc-arc -x objective-c %s.result -// RUN: %clang_cc1 -arcmt-migrate -mt-migrate-directory %t -fsyntax-only -fobjc-arc %s -// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result -// RUN: rm -rf %t - -@protocol NSObject -- (oneway void)release; -@end - -void test1(id p) { -} diff --git a/test/ASTMerge/Inputs/lit.local.cfg b/test/ASTMerge/Inputs/lit.local.cfg deleted file mode 100644 index e6f55eef7af5..000000000000 --- a/test/ASTMerge/Inputs/lit.local.cfg +++ /dev/null @@ -1 +0,0 @@ -config.suffixes = [] diff --git a/test/ASTMerge/category.m b/test/ASTMerge/category.m index 54a12408c480..c7d524816494 100644 --- a/test/ASTMerge/category.m +++ b/test/ASTMerge/category.m @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -emit-pch -o %t.1.ast %S/Inputs/category1.m // RUN: %clang_cc1 -emit-pch -o %t.2.ast %S/Inputs/category2.m -// RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s // CHECK: category2.m:18:1: error: instance method 'method2' has incompatible result types in different translation units ('float' vs. 'int') // CHECK: category1.m:16:1: note: instance method 'method2' also declared here diff --git a/test/ASTMerge/class-template.cpp b/test/ASTMerge/class-template.cpp index eea31b1c2feb..0ab5443db7f6 100644 --- a/test/ASTMerge/class-template.cpp +++ b/test/ASTMerge/class-template.cpp @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -emit-pch -o %t.1.ast %S/Inputs/class-template1.cpp // RUN: %clang_cc1 -emit-pch -o %t.2.ast %S/Inputs/class-template2.cpp -// RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s // CHECK: class-template1.cpp:7:14: error: non-type template parameter declared with incompatible types in different translation units ('int' vs. 'long') // CHECK: class-template2.cpp:7:15: note: declared here with type 'long' diff --git a/test/ASTMerge/class.cpp b/test/ASTMerge/class.cpp index 885b65e983a0..7b31187c469e 100644 --- a/test/ASTMerge/class.cpp +++ b/test/ASTMerge/class.cpp @@ -1,7 +1,7 @@ // RUN: %clang_cc1 -emit-pch -o %t.1.ast %S/Inputs/class1.cpp // RUN: %clang_cc1 -emit-pch -o %t.2.ast %S/Inputs/class2.cpp // RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s -// RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 -Wno-odr | count 0 +// RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 -Wno-odr -Werror // CHECK: class1.cpp:5:8: warning: type 'B' has incompatible definitions in different translation units // CHECK: class1.cpp:6:9: note: field 'y' has type 'float' here diff --git a/test/ASTMerge/enum.c b/test/ASTMerge/enum.c index 4380d192f1bd..7240bcced99e 100644 --- a/test/ASTMerge/enum.c +++ b/test/ASTMerge/enum.c @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -emit-pch -o %t.1.ast %S/Inputs/enum1.c // RUN: %clang_cc1 -emit-pch -o %t.2.ast %S/Inputs/enum2.c -// RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s // CHECK: enum1.c:9:6: warning: type 'enum E2' has incompatible definitions in different translation units // CHECK: enum1.c:11:3: note: enumerator 'E2Enumerator2' with value 3 here diff --git a/test/ASTMerge/function.c b/test/ASTMerge/function.c index 8a8a03051452..89e1c699c3aa 100644 --- a/test/ASTMerge/function.c +++ b/test/ASTMerge/function.c @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -emit-pch -o %t.1.ast %S/Inputs/function1.c // RUN: %clang_cc1 -emit-pch -o %t.2.ast %S/Inputs/function2.c -// RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s // RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only -verify %s // CHECK: function2.c:3:6: error: external function 'f1' declared with incompatible types in different translation units ('void (Int, double)' vs. 'void (int, float)') diff --git a/test/ASTMerge/interface.m b/test/ASTMerge/interface.m index 747ef38223ec..8ba5d73753a3 100644 --- a/test/ASTMerge/interface.m +++ b/test/ASTMerge/interface.m @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -emit-pch -o %t.1.ast %S/Inputs/interface1.m // RUN: %clang_cc1 -emit-pch -o %t.2.ast %S/Inputs/interface2.m -// RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s // CHECK: interface2.m:16:9: error: instance variable 'ivar2' declared with incompatible types in different translation units ('float' vs. 'int') // CHECK: interface1.m:16:7: note: declared here with type 'int' diff --git a/test/ASTMerge/namespace.cpp b/test/ASTMerge/namespace.cpp index 6c46f0aa1d98..8cc0fa2a6d97 100644 --- a/test/ASTMerge/namespace.cpp +++ b/test/ASTMerge/namespace.cpp @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -emit-pch -o %t.1.ast %S/Inputs/namespace1.cpp // RUN: %clang_cc1 -emit-pch -o %t.2.ast %S/Inputs/namespace2.cpp -// RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s // CHECK: namespace2.cpp:16:17: error: external variable 'z' declared with incompatible types in different translation units ('double' vs. 'float') // CHECK: namespace1.cpp:16:16: note: declared here with type 'float' diff --git a/test/ASTMerge/property.m b/test/ASTMerge/property.m index a8dd7c420c89..494802347696 100644 --- a/test/ASTMerge/property.m +++ b/test/ASTMerge/property.m @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -emit-pch -o %t.1.ast %S/Inputs/property1.m // RUN: %clang_cc1 -emit-pch -o %t.2.ast %S/Inputs/property2.m -// RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s // CHECK: property2.m:12:26: error: property 'Prop1' declared with incompatible types in different translation units ('int' vs. 'float') // CHECK: property1.m:10:28: note: declared here with type 'float' diff --git a/test/ASTMerge/struct.c b/test/ASTMerge/struct.c index 7217222ae5c1..4f41cea26b18 100644 --- a/test/ASTMerge/struct.c +++ b/test/ASTMerge/struct.c @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -emit-pch -o %t.1.ast %S/Inputs/struct1.c // RUN: %clang_cc1 -emit-pch -o %t.2.ast %S/Inputs/struct2.c -// RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s // CHECK: struct1.c:13:8: warning: type 'struct S1' has incompatible definitions in different translation units // CHECK: struct1.c:15:7: note: field 'field2' has type 'int' here diff --git a/test/ASTMerge/typedef.c b/test/ASTMerge/typedef.c index 6f911295b96c..79e472311874 100644 --- a/test/ASTMerge/typedef.c +++ b/test/ASTMerge/typedef.c @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -emit-pch -o %t.1.ast %S/Inputs/typedef1.c // RUN: %clang_cc1 -emit-pch -o %t.2.ast %S/Inputs/typedef2.c -// RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s // CHECK: typedef2.c:4:10: error: external variable 'x2' declared with incompatible types in different translation units ('Typedef2' (aka 'double') vs. 'Typedef2' (aka 'int')) // CHECK: typedef1.c:4:10: note: declared here with type 'Typedef2' (aka 'int') diff --git a/test/ASTMerge/var.c b/test/ASTMerge/var.c index e1dde6abd2ac..e14dc37edac7 100644 --- a/test/ASTMerge/var.c +++ b/test/ASTMerge/var.c @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -emit-pch -o %t.1.ast %S/Inputs/var1.c // RUN: %clang_cc1 -emit-pch -o %t.2.ast %S/Inputs/var2.c -// RUN: %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only -fdiagnostics-show-note-include-stack %s 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only -fdiagnostics-show-note-include-stack %s 2>&1 | FileCheck %s // CHECK: var2.c:2:9: error: external variable 'x1' declared with incompatible types in different translation units ('double *' vs. 'float **') // CHECK: var1.c:2:9: note: declared here with type 'float **' diff --git a/test/Analysis/Inputs/system-header-simulator-cxx.h b/test/Analysis/Inputs/system-header-simulator-cxx.h index 6e434a04b23d..9bb8ec48923d 100644 --- a/test/Analysis/Inputs/system-header-simulator-cxx.h +++ b/test/Analysis/Inputs/system-header-simulator-cxx.h @@ -5,6 +5,8 @@ // suppressed. #pragma clang system_header +typedef unsigned char uint8_t; + namespace std { template struct pair { @@ -74,6 +76,34 @@ namespace std { extern const nothrow_t nothrow; + // libc++'s implementation + template + class initializer_list + { + const _E* __begin_; + size_t __size_; + + initializer_list(const _E* __b, size_t __s) + : __begin_(__b), + __size_(__s) + {} + + public: + typedef _E value_type; + typedef const _E& reference; + typedef const _E& const_reference; + typedef size_t size_type; + + typedef const _E* iterator; + typedef const _E* const_iterator; + + initializer_list() : __begin_(0), __size_(0) {} + + size_t size() const {return __size_;} + const _E* begin() const {return __begin_;} + const _E* end() const {return __begin_ + __size_;} + }; + template OutputIter copy(InputIter II, InputIter IE, OutputIter OI) { while (II != IE) @@ -86,6 +116,65 @@ namespace std { struct forward_iterator_tag : public input_iterator_tag { }; struct bidirectional_iterator_tag : public forward_iterator_tag { }; struct random_access_iterator_tag : public bidirectional_iterator_tag { }; + + template + class allocator { + public: + void deallocate(void *p) { + ::delete p; + } + }; + + template + class allocator_traits { + public: + static void deallocate(void *p) { + _Alloc().deallocate(p); + } + }; + + template + class __list_imp + {}; + + template > + class list + : private __list_imp<_Tp, _Alloc> + { + public: + void pop_front() { + // Fake use-after-free. + // No warning is expected as we are suppressing warning comming + // out of std::list. + int z = 0; + z = 5/z; + } + bool empty() const; + }; + + // basic_string + template > + class __attribute__ ((__type_visibility__("default"))) basic_string { + _CharT localStorage[4]; + + typedef allocator_traits<_Alloc> __alloc_traits; + + public: + void push_back(int c) { + // Fake error trigger. + // No warning is expected as we are suppressing warning comming + // out of std::basic_string. + int z = 0; + z = 5/z; + } + + basic_string &operator +=(int c) { + // Fake deallocate stack-based storage. + // No warning is expected as we are suppressing warnings within + // allocators being used by std::basic_string. + __alloc_traits::deallocate(&localStorage); + } + }; } void* operator new(std::size_t, const std::nothrow_t&) throw(); diff --git a/test/Analysis/Inputs/system-header-simulator-objc.h b/test/Analysis/Inputs/system-header-simulator-objc.h index ecc99e17c495..3e1d9555bbde 100644 --- a/test/Analysis/Inputs/system-header-simulator-objc.h +++ b/test/Analysis/Inputs/system-header-simulator-objc.h @@ -102,6 +102,7 @@ typedef double NSTimeInterval; + (id)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)b; - (id)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length; - (id)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)b; +- (id)initWithBytes:(void *)bytes length:(NSUInteger) length; @end typedef struct { diff --git a/test/Analysis/Inputs/system-header-simulator.h b/test/Analysis/Inputs/system-header-simulator.h index dd1cd4942f85..8b8c9c4fe17b 100644 --- a/test/Analysis/Inputs/system-header-simulator.h +++ b/test/Analysis/Inputs/system-header-simulator.h @@ -32,6 +32,7 @@ typedef __typeof(sizeof(int)) size_t; size_t strlen(const char *); char *strcpy(char *restrict, const char *restrict); +void *memcpy(void *dst, const void *src, size_t n); typedef unsigned long __darwin_pthread_key_t; typedef __darwin_pthread_key_t pthread_key_t; @@ -77,8 +78,9 @@ void xpc_connection_set_context(xpc_connection_t connection, void *context); void xpc_connection_set_finalizer_f(xpc_connection_t connection, xpc_finalizer_t finalizer); void xpc_connection_resume(xpc_connection_t connection); -//The following is a fake system header function +//The following are fake system header functions for generic testing. void fakeSystemHeaderCallInt(int *); +void fakeSystemHeaderCallIntPtr(int **); typedef struct __SomeStruct { char * p; diff --git a/test/Analysis/MismatchedDeallocator-checker-test.mm b/test/Analysis/MismatchedDeallocator-checker-test.mm index 56d46d99b0b9..0df5db5191f5 100644 --- a/test/Analysis/MismatchedDeallocator-checker-test.mm +++ b/test/Analysis/MismatchedDeallocator-checker-test.mm @@ -112,8 +112,7 @@ void testNew10() { void testNew11(NSUInteger dataLength) { int *p = new int; - NSData *d = [NSData dataWithBytesNoCopy:p length:sizeof(int) freeWhenDone:1]; // expected-warning{{Memory allocated by 'new' should be deallocated by 'delete', not +dataWithBytesNoCopy:length:freeWhenDone:}} - // FIXME: should be "+dataWithBytesNoCopy:length:freeWhenDone: cannot take ownership of memory allocated by 'new'." + NSData *d = [NSData dataWithBytesNoCopy:p length:sizeof(int) freeWhenDone:1]; // expected-warning{{+dataWithBytesNoCopy:length:freeWhenDone: cannot take ownership of memory allocated by 'new'}} } //------------------------------------------------------- diff --git a/test/Analysis/MismatchedDeallocator-path-notes.cpp b/test/Analysis/MismatchedDeallocator-path-notes.cpp index 369d8f69756a..61ab4f1eeb5a 100644 --- a/test/Analysis/MismatchedDeallocator-path-notes.cpp +++ b/test/Analysis/MismatchedDeallocator-path-notes.cpp @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.MismatchedDeallocator -analyzer-output=text -verify %s -// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.MismatchedDeallocator -analyzer-output=plist %s -o %t.plist +// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.MismatchedDeallocator -analyzer-output=plist -analyzer-config path-diagnostics-alternate=false %s -o %t.plist // RUN: FileCheck --input-file=%t.plist %s void changePointee(int *p); diff --git a/test/Analysis/NSContainers.m b/test/Analysis/NSContainers.m index 540c7a4eabdd..a9e76fbbcaba 100644 --- a/test/Analysis/NSContainers.m +++ b/test/Analysis/NSContainers.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx.cocoa.NilArg -verify -Wno-objc-root-class %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx.cocoa.NonNilReturnValue,osx.cocoa.NilArg,osx.cocoa.Loops -verify -Wno-objc-root-class %s typedef unsigned long NSUInteger; typedef signed char BOOL; typedef struct _NSZone NSZone; @@ -14,8 +14,6 @@ typedef struct _NSZone NSZone; @protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder; @end -@protocol NSFastEnumeration -@end @protocol NSSecureCoding @required + (BOOL)supportsSecureCoding; @@ -24,11 +22,20 @@ typedef struct _NSZone NSZone; - (id)init; + (id)alloc; @end -@interface NSArray : NSObject +typedef struct { + unsigned long state; + id *itemsPtr; + unsigned long *mutationsPtr; + unsigned long extra[5]; +} NSFastEnumerationState; +@protocol NSFastEnumeration +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id [])buffer count:(NSUInteger)len; +@end + +@interface NSArray : NSObject - (NSUInteger)count; - (id)objectAtIndex:(NSUInteger)index; - @end @interface NSArray (NSExtendedArray) @@ -36,6 +43,10 @@ typedef struct _NSZone NSZone; - (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx __attribute__((availability(macosx,introduced=10.8))); @end +@interface NSArray (NSArrayCreation) ++ (instancetype)arrayWithObjects:(const id [])objects count:(NSUInteger)cnt; +@end + @interface NSMutableArray : NSArray - (void)addObject:(id)anObject; @@ -58,6 +69,8 @@ typedef struct _NSZone NSZone; + (id)dictionary; + (id)dictionaryWithObject:(id)object forKey:(id )key; ++ (instancetype)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(NSUInteger)cnt; + @end @interface NSMutableDictionary : NSDictionary @@ -77,10 +90,20 @@ typedef struct _NSZone NSZone; @end +@interface NSOrderedSet : NSObject +@end +@interface NSOrderedSet (NSOrderedSetCreation) +- (NSUInteger)count; +@end + @interface NSString : NSObject @end +@interface NSNull : NSObject ++ (NSNull *)null; +@end + // NSMutableArray API void testNilArgNSMutableArray1() { NSMutableArray *marray = [[NSMutableArray alloc] init]; @@ -143,6 +166,33 @@ NSDictionary *testNilArgNSDictionary2(NSObject *obj) { return [NSDictionary dictionaryWithObject:obj forKey:0]; // expected-warning {{Key argument to 'dictionaryWithObject:forKey:' cannot be nil}} } +id testCreateDictionaryLiteralKey(id value, id nilKey) { + if (nilKey) + ; + return @{@"abc":value, nilKey:@"abc"}; // expected-warning {{Dictionary key cannot be nil}} +} + +id testCreateDictionaryLiteralValue(id nilValue) { + if (nilValue) + ; + return @{@"abc":nilValue}; // expected-warning {{Dictionary value cannot be nil}} +} + +id testCreateDictionaryLiteral(id nilValue, id nilKey) { + if (nilValue) + ; + if (nilKey) + ; + return @{@"abc":nilValue, nilKey:@"abc"}; // expected-warning {{Dictionary key cannot be nil}} + // expected-warning@-1 {{Dictionary value cannot be nil}} +} + +id testCreateArrayLiteral(id myNil) { + if (myNil) + ; + return @[ @"a", myNil, @"c" ]; // expected-warning {{Array element cannot be nil}} +} + // Test inline defensive checks suppression. void idc(id x) { if (x) @@ -197,4 +247,32 @@ void testNilReceiverRetNil2(NSMutableDictionary *D, Foo *FooPtrIn, id value) { [D setObject: value forKey: key]; // no-warning } +void testAssumeNSNullNullReturnsNonNil(NSMutableDictionary *Table, id Object, + id InValue) { + id Value = Object ? [Table objectForKey:Object] : [NSNull null]; + if (!Value) { + Value = InValue; + [Table setObject:Value forKey:Object]; // no warning + } +} + +void testCollectionIsNotEmptyWhenCountIsGreaterThanZero(NSMutableDictionary *D){ + if ([D count] > 0) { // Count is greater than zero. + NSString *s = 0; + for (NSString *key in D) { + s = key; // Loop is always entered. + } + [D removeObjectForKey:s]; // no warning + } +} + +void testCountAwareNSOrderedSet(NSOrderedSet *containers, int *validptr) { + int *x = 0; + NSUInteger containerCount = [containers count]; + if (containerCount > 0) + x = validptr; + for (id c in containers) { + *x = 1; // no warning + } +} diff --git a/test/Analysis/NewDelete-checker-test.cpp b/test/Analysis/NewDelete-checker-test.cpp index 5d134bc36e23..cc9725128bc8 100644 --- a/test/Analysis/NewDelete-checker-test.cpp +++ b/test/Analysis/NewDelete-checker-test.cpp @@ -4,6 +4,7 @@ typedef __typeof__(sizeof(int)) size_t; extern "C" void *malloc(size_t); +extern "C" void free (void* ptr); int *global; //------------------ @@ -206,3 +207,154 @@ void testConstEscapePlacementNew() { void *y = new (x) int; escapeVoidPtr(y); } // no-warning + +//============== Test Uninitialized delete delete[]======================== +void testUninitDelete() { + int *x; + int * y = new int; + delete y; + delete x; // expected-warning{{Argument to 'delete' is uninitialized}} +} + +void testUninitDeleteArray() { + int *x; + int * y = new int[5]; + delete[] y; + delete[] x; // expected-warning{{Argument to 'delete[]' is uninitialized}} +} + +void testUninitFree() { + int *x; + free(x); // expected-warning{{Function call argument is an uninitialized value}} +} + +void testUninitDeleteSink() { + int *x; + delete x; // expected-warning{{Argument to 'delete' is uninitialized}} + (*(volatile int *)0 = 1); // no warn +} + +void testUninitDeleteArraySink() { + int *x; + delete[] x; // expected-warning{{Argument to 'delete[]' is uninitialized}} + (*(volatile int *)0 = 1); // no warn +} + +namespace reference_count { + class control_block { + unsigned count; + public: + control_block() : count(0) {} + void retain() { ++count; } + int release() { return --count; } + }; + + template + class shared_ptr { + T *p; + control_block *control; + + public: + shared_ptr() : p(0), control(0) {} + explicit shared_ptr(T *p) : p(p), control(new control_block) { + control->retain(); + } + shared_ptr(shared_ptr &other) : p(other.p), control(other.control) { + if (control) + control->retain(); + } + ~shared_ptr() { + if (control && control->release() == 0) { + delete p; + delete control; + } + }; + + T &operator *() { + return *p; + }; + + void swap(shared_ptr &other) { + T *tmp = p; + p = other.p; + other.p = tmp; + + control_block *ctrlTmp = control; + control = other.control; + other.control = ctrlTmp; + } + }; + + void testSingle() { + shared_ptr a(new int); + *a = 1; + } + + void testDouble() { + shared_ptr a(new int); + shared_ptr b = a; + *a = 1; + } + + void testInvalidated() { + shared_ptr a(new int); + shared_ptr b = a; + *a = 1; + + extern void use(shared_ptr &); + use(b); + } + + void testNestedScope() { + shared_ptr a(new int); + { + shared_ptr b = a; + } + *a = 1; + } + + void testSwap() { + shared_ptr a(new int); + shared_ptr b; + shared_ptr c = a; + shared_ptr(c).swap(b); + } + + void testUseAfterFree() { + int *p = new int; + { + shared_ptr a(p); + shared_ptr b = a; + } + + // FIXME: We should get a warning here, but we don't because we've + // conservatively modeled ~shared_ptr. + *p = 1; + } +} + +// Test double delete +class DerefClass{ +public: + int *x; + DerefClass() {} + ~DerefClass() {*x = 1;} //expected-warning {{Use of memory after it is freed}} +}; + +void testDoubleDeleteClassInstance() { + DerefClass *foo = new DerefClass(); + delete foo; + delete foo; // FIXME: We should ideally report warning here instead of inside the destructor. +} + +class EmptyClass{ +public: + EmptyClass() {} + ~EmptyClass() {} +}; + +void testDoubleDeleteEmptyClass() { + EmptyClass *foo = new EmptyClass(); + delete foo; + delete foo; //expected-warning {{Attempt to free released memory}} +} diff --git a/test/Analysis/NewDelete-path-notes.cpp b/test/Analysis/NewDelete-path-notes.cpp index 85b71be68ce2..b420551c3e9a 100644 --- a/test/Analysis/NewDelete-path-notes.cpp +++ b/test/Analysis/NewDelete-path-notes.cpp @@ -1,13 +1,12 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=cplusplus.NewDelete,unix.Malloc -analyzer-output=text -verify %s -// RUN: %clang_cc1 -analyze -analyzer-checker=cplusplus.NewDelete,unix.Malloc -analyzer-output=plist %s -o %t.plist +// RUN: %clang_cc1 -analyze -analyzer-checker=cplusplus.NewDelete,unix.Malloc -analyzer-output=plist -analyzer-config path-diagnostics-alternate=false %s -o %t.plist // RUN: FileCheck --input-file=%t.plist %s void test() { int *p = new int; // expected-note@-1 {{Memory is allocated}} if (p) - // expected-note@-1 {{Assuming 'p' is non-null}} - // expected-note@-2 {{Taking true branch}} + // expected-note@-1 {{Taking true branch}} delete p; // expected-note@-1 {{Memory is released}} @@ -151,75 +150,12 @@ void test(Odd *odd) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line8 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line8 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line8 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line8 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line8 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Assuming 'p' is non-null -// CHECK-NEXT: message -// CHECK-NEXT: Assuming 'p' is non-null -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line8 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line8 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line11 +// CHECK-NEXT: line10 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line11 +// CHECK-NEXT: line10 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -231,7 +167,7 @@ void test(Odd *odd) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line11 +// CHECK-NEXT: line10 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -239,12 +175,12 @@ void test(Odd *odd) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line11 +// CHECK-NEXT: line10 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line11 +// CHECK-NEXT: line10 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -264,12 +200,12 @@ void test(Odd *odd) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line11 +// CHECK-NEXT: line10 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line11 +// CHECK-NEXT: line10 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -277,12 +213,12 @@ void test(Odd *odd) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line14 +// CHECK-NEXT: line13 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line14 +// CHECK-NEXT: line13 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -294,7 +230,7 @@ void test(Odd *odd) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line14 +// CHECK-NEXT: line13 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -302,12 +238,12 @@ void test(Odd *odd) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line14 +// CHECK-NEXT: line13 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line14 +// CHECK-NEXT: line13 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -325,10 +261,10 @@ void test(Odd *odd) { // CHECK-NEXT: typeDouble free // CHECK-NEXT: issue_context_kindfunction // CHECK-NEXT: issue_contexttest -// CHECK-NEXT: issue_hash9 +// CHECK-NEXT: issue_hash8 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line14 +// CHECK-NEXT: line13 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -340,7 +276,7 @@ void test(Odd *odd) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line25 +// CHECK-NEXT: line24 // CHECK-NEXT: col2 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -348,12 +284,12 @@ void test(Odd *odd) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line25 +// CHECK-NEXT: line24 // CHECK-NEXT: col2 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line25 +// CHECK-NEXT: line24 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -369,7 +305,7 @@ void test(Odd *odd) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line19 +// CHECK-NEXT: line18 // CHECK-NEXT: col2 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -387,12 +323,12 @@ void test(Odd *odd) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line19 +// CHECK-NEXT: line18 // CHECK-NEXT: col2 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line19 +// CHECK-NEXT: line18 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -400,12 +336,12 @@ void test(Odd *odd) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line20 +// CHECK-NEXT: line19 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line20 +// CHECK-NEXT: line19 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -417,7 +353,7 @@ void test(Odd *odd) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line20 +// CHECK-NEXT: line19 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -425,12 +361,12 @@ void test(Odd *odd) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line20 +// CHECK-NEXT: line19 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line20 +// CHECK-NEXT: line19 // CHECK-NEXT: col13 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -446,7 +382,7 @@ void test(Odd *odd) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line25 +// CHECK-NEXT: line24 // CHECK-NEXT: col2 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -454,12 +390,12 @@ void test(Odd *odd) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line25 +// CHECK-NEXT: line24 // CHECK-NEXT: col2 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line25 +// CHECK-NEXT: line24 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -479,12 +415,12 @@ void test(Odd *odd) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line25 +// CHECK-NEXT: line24 // CHECK-NEXT: col2 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line25 +// CHECK-NEXT: line24 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -492,12 +428,12 @@ void test(Odd *odd) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line27 +// CHECK-NEXT: line26 // CHECK-NEXT: col2 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line27 +// CHECK-NEXT: line26 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -509,7 +445,7 @@ void test(Odd *odd) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line27 +// CHECK-NEXT: line26 // CHECK-NEXT: col2 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -517,12 +453,12 @@ void test(Odd *odd) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line27 +// CHECK-NEXT: line26 // CHECK-NEXT: col2 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line27 +// CHECK-NEXT: line26 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -543,7 +479,7 @@ void test(Odd *odd) { // CHECK-NEXT: issue_hash3 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line27 +// CHECK-NEXT: line26 // CHECK-NEXT: col2 // CHECK-NEXT: file0 // CHECK-NEXT: diff --git a/test/Analysis/NoReturn.m b/test/Analysis/NoReturn.m index a58efdd02948..c74d54eae528 100644 --- a/test/Analysis/NoReturn.m +++ b/test/Analysis/NoReturn.m @@ -123,3 +123,11 @@ void PR11959(int *p) { *p = 0xDEADBEEF; // no-warning } +// Test that hard-coded Microsoft _wassert name is recognized as a noreturn +#define assert(_Expression) (void)( (!!(_Expression)) || (_wassert(#_Expression, __FILE__, __LINE__), 0) ) +extern void _wassert(const char * _Message, const char *_File, unsigned _Line); +void test_wassert() { + assert(0); + int *p = 0; + *p = 0xDEADBEEF; // no-warning +} diff --git a/test/Analysis/analyzer-config.cpp b/test/Analysis/analyzer-config.cpp index bf18a5eb3e71..521344a5119a 100644 --- a/test/Analysis/analyzer-config.cpp +++ b/test/Analysis/analyzer-config.cpp @@ -13,6 +13,7 @@ public: // CHECK: [config] // CHECK-NEXT: c++-container-inlining = false // CHECK-NEXT: c++-inlining = destructors +// CHECK-NEXT: c++-shared_ptr-inlining = false // CHECK-NEXT: c++-stdlib-inlining = true // CHECK-NEXT: c++-template-inlining = true // CHECK-NEXT: cfg-conditional-static-initializers = true @@ -28,4 +29,4 @@ public: // CHECK-NEXT: mode = deep // CHECK-NEXT: region-store-small-struct-limit = 2 // CHECK-NEXT: [stats] -// CHECK-NEXT: num-entries = 16 +// CHECK-NEXT: num-entries = 17 diff --git a/test/Analysis/array-struct-region.cpp b/test/Analysis/array-struct-region.cpp index 12ae5d3eba6e..47776863d6a2 100644 --- a/test/Analysis/array-struct-region.cpp +++ b/test/Analysis/array-struct-region.cpp @@ -21,7 +21,7 @@ struct S { #if __cplusplus const struct S *operator -(const struct S &s) { return &s; } -bool operator ~(const struct S &s) { return &s != &s; } +bool operator ~(const struct S &s) { return (&s) != &s; } #endif @@ -173,4 +173,27 @@ void testImmediateUseOp() { clang_analyzer_eval(getConstrainedFieldRefOp(getS()) == 42); // expected-warning{{TRUE}} } +namespace EmptyClass { + struct Base { + int& x; + + Base(int& x) : x(x) {} + }; + + struct Derived : public Base { + Derived(int& x) : Base(x) {} + + void operator=(int a) { x = a; } + }; + + Derived ref(int& a) { return Derived(a); } + + // There used to be a warning here, because analyzer treated Derived as empty. + int test() { + int a; + ref(a) = 42; + return a; // no warning + } +} + #endif diff --git a/test/Analysis/auto-obj-dtors-cfg-output.cpp b/test/Analysis/auto-obj-dtors-cfg-output.cpp index 0fc651739119..0dbbfb592f71 100644 --- a/test/Analysis/auto-obj-dtors-cfg-output.cpp +++ b/test/Analysis/auto-obj-dtors-cfg-output.cpp @@ -3,24 +3,93 @@ class A { public: +// CHECK: [B1 (ENTRY)] +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 A() {} + +// CHECK: [B1 (ENTRY)] +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 ~A() {} + +// CHECK: [B2 (ENTRY)] +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B1] +// CHECK-NEXT: 1: 1 +// CHECK-NEXT: 2: return [B1.1]; +// CHECK-NEXT: Preds (1): B2 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 operator int() const { return 1; } }; extern const bool UV; +// CHECK: [B2 (ENTRY)] +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B1] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A a; +// CHECK-NEXT: 3: a +// CHECK-NEXT: 4: [B1.3] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 5: const A &b = a; +// CHECK-NEXT: 6: A() (CXXConstructExpr, class A) +// CHECK-NEXT: 7: [B1.6] (BindTemporary) +// CHECK-NEXT: 8: [B1.7] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 9: [B1.8] +// CHECK: 10: const A &c = A(); +// CHECK: 11: [B1.10].~A() (Implicit destructor) +// CHECK: 12: [B1.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B2 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 void test_const_ref() { A a; const A& b = a; const A& c = A(); } +// CHECK: [B2 (ENTRY)] +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B1] +// CHECK-NEXT: 1: (CXXConstructExpr, class A [2]) +// CHECK-NEXT: 2: A a[2]; +// CHECK-NEXT: 3: (CXXConstructExpr, class A [0]) +// CHECK-NEXT: 4: A b[0]; +// CHECK-NEXT: 5: [B1.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B2 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 void test_array() { A a[2]; A b[0]; } +// CHECK: [B2 (ENTRY)] +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B1] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A a; +// CHECK-NEXT: 3: (CXXConstructExpr, class A) +// CHECK-NEXT: 4: A c; +// CHECK-NEXT: 5: (CXXConstructExpr, class A) +// CHECK-NEXT: 6: A d; +// CHECK-NEXT: 7: [B1.6].~A() (Implicit destructor) +// CHECK-NEXT: 8: [B1.4].~A() (Implicit destructor) +// CHECK-NEXT: 9: (CXXConstructExpr, class A) +// CHECK: 10: A b; +// CHECK: 11: [B1.10].~A() (Implicit destructor) +// CHECK: 12: [B1.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B2 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 void test_scope() { A a; { A c; @@ -29,6 +98,34 @@ void test_scope() { A b; } +// CHECK: [B4 (ENTRY)] +// CHECK-NEXT: Succs (1): B3 +// CHECK: [B1] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A c; +// CHECK-NEXT: 3: [B1.2].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B3.4].~A() (Implicit destructor) +// CHECK-NEXT: 5: [B3.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B3 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B2] +// CHECK-NEXT: 1: return; +// CHECK-NEXT: 2: [B3.4].~A() (Implicit destructor) +// CHECK-NEXT: 3: [B3.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B3 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B3] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A a; +// CHECK-NEXT: 3: (CXXConstructExpr, class A) +// CHECK-NEXT: 4: A b; +// CHECK-NEXT: 5: UV +// CHECK-NEXT: 6: [B3.5] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B3.6] +// CHECK-NEXT: Preds (1): B4 +// CHECK-NEXT: Succs (2): B2 B1 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (2): B1 B2 void test_return() { A a; A b; @@ -36,6 +133,59 @@ void test_return() { A c; } +// CHECK: [B8 (ENTRY)] +// CHECK-NEXT: Succs (1): B7 +// CHECK: [B1] +// CHECK: l1: +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A c; +// CHECK-NEXT: 3: [B1.2].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B6.2].~A() (Implicit destructor) +// CHECK-NEXT: 5: [B7.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (2): B2 B3 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B2] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A b; +// CHECK-NEXT: 3: [B2.2].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B6.4].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B4 +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B3] +// CHECK-NEXT: 1: [B6.4].~A() (Implicit destructor) +// CHECK-NEXT: T: goto l1; +// CHECK: Preds (1): B4 +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B4] +// CHECK-NEXT: 1: UV +// CHECK-NEXT: 2: [B4.1] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B4.2] +// CHECK-NEXT: Preds (1): B6 +// CHECK-NEXT: Succs (2): B3 B2 +// CHECK: [B5] +// CHECK-NEXT: 1: [B6.4].~A() (Implicit destructor) +// CHECK-NEXT: 2: [B6.2].~A() (Implicit destructor) +// CHECK-NEXT: T: goto l0; +// CHECK: Preds (1): B6 +// CHECK-NEXT: Succs (1): B6 +// CHECK: [B6] +// CHECK: l0: +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A b; +// CHECK-NEXT: 3: (CXXConstructExpr, class A) +// CHECK-NEXT: 4: A a; +// CHECK-NEXT: 5: UV +// CHECK-NEXT: 6: [B6.5] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B6.6] +// CHECK-NEXT: Preds (2): B7 B5 +// CHECK-NEXT: Succs (2): B5 B4 +// CHECK: [B7] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A a; +// CHECK-NEXT: Preds (1): B8 +// CHECK-NEXT: Succs (1): B6 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 void test_goto() { A a; l0: @@ -49,6 +199,43 @@ l1: A c; } +// CHECK: [B5 (ENTRY)] +// CHECK-NEXT: Succs (1): B4 +// CHECK: [B1] +// CHECK-NEXT: 1: [B4.6].~A() (Implicit destructor) +// CHECK-NEXT: 2: [B4.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (2): B2 B3 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B2] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A c; +// CHECK-NEXT: 3: [B2.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B4 +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B3] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A c; +// CHECK-NEXT: 3: [B3.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B4 +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B4] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A a; +// CHECK-NEXT: 3: a +// CHECK-NEXT: 4: [B4.3] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 5: [B4.4] (CXXConstructExpr, class A) +// CHECK-NEXT: 6: A b = a; +// CHECK-NEXT: 7: b +// CHECK-NEXT: 8: [B4.7] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 9: [B4.8].operator int +// CHECK: 10: [B4.9]() +// CHECK: 11: [B4.10] (ImplicitCastExpr, UserDefinedConversion, int) +// CHECK: 12: [B4.11] (ImplicitCastExpr, IntegralToBoolean, _Bool) +// CHECK-NEXT: T: if [B4.12] +// CHECK-NEXT: Preds (1): B5 +// CHECK-NEXT: Succs (2): B3 B2 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 void test_if_implicit_scope() { A a; if (A b = a) @@ -56,6 +243,78 @@ void test_if_implicit_scope() { else A c; } +// CHECK: [B9 (ENTRY)] +// CHECK-NEXT: Succs (1): B8 +// CHECK: [B1] +// CHECK-NEXT: 1: [B8.6].~A() (Implicit destructor) +// CHECK-NEXT: 2: (CXXConstructExpr, class A) +// CHECK-NEXT: 3: A e; +// CHECK-NEXT: 4: [B1.3].~A() (Implicit destructor) +// CHECK-NEXT: 5: [B8.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (2): B2 B5 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B2] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A d; +// CHECK-NEXT: 3: [B2.2].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B4.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B4 +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B3] +// CHECK-NEXT: 1: return; +// CHECK-NEXT: 2: [B4.2].~A() (Implicit destructor) +// CHECK-NEXT: 3: [B8.6].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B8.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B4 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B4] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A c; +// CHECK-NEXT: 3: UV +// CHECK-NEXT: 4: [B4.3] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B4.4] +// CHECK-NEXT: Preds (1): B8 +// CHECK-NEXT: Succs (2): B3 B2 +// CHECK: [B5] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A d; +// CHECK-NEXT: 3: [B5.2].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B7.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B7 +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B6] +// CHECK-NEXT: 1: return; +// CHECK-NEXT: 2: [B7.2].~A() (Implicit destructor) +// CHECK-NEXT: 3: [B8.6].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B8.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B7 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B7] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A c; +// CHECK-NEXT: 3: UV +// CHECK-NEXT: 4: [B7.3] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B7.4] +// CHECK-NEXT: Preds (1): B8 +// CHECK-NEXT: Succs (2): B6 B5 +// CHECK: [B8] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A a; +// CHECK-NEXT: 3: a +// CHECK-NEXT: 4: [B8.3] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 5: [B8.4] (CXXConstructExpr, class A) +// CHECK-NEXT: 6: A b = a; +// CHECK-NEXT: 7: b +// CHECK-NEXT: 8: [B8.7] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 9: [B8.8].operator int +// CHECK: 10: [B8.9]() +// CHECK: 11: [B8.10] (ImplicitCastExpr, UserDefinedConversion, int) +// CHECK: 12: [B8.11] (ImplicitCastExpr, IntegralToBoolean, _Bool) +// CHECK-NEXT: T: if [B8.12] +// CHECK-NEXT: Preds (1): B9 +// CHECK-NEXT: Succs (2): B7 B4 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (3): B1 B3 B6 void test_if_jumps() { A a; if (A b = a) { @@ -70,12 +329,130 @@ void test_if_jumps() { A e; } +// CHECK: [B6 (ENTRY)] +// CHECK-NEXT: Succs (1): B5 +// CHECK: [B1] +// CHECK-NEXT: 1: [B4.4].~A() (Implicit destructor) +// CHECK-NEXT: 2: [B5.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B4 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B2] +// CHECK-NEXT: Preds (1): B3 +// CHECK-NEXT: Succs (1): B4 +// CHECK: [B3] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A c; +// CHECK-NEXT: 3: [B3.2].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B4.4].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B4 +// CHECK-NEXT: Succs (1): B2 +// CHECK: [B4] +// CHECK-NEXT: 1: a +// CHECK-NEXT: 2: [B4.1] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 3: [B4.2] (CXXConstructExpr, class A) +// CHECK-NEXT: 4: A b = a; +// CHECK-NEXT: 5: b +// CHECK-NEXT: 6: [B4.5] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 7: [B4.6].operator int +// CHECK-NEXT: 8: [B4.7]() +// CHECK-NEXT: 9: [B4.8] (ImplicitCastExpr, UserDefinedConversion, int) +// CHECK: 10: [B4.9] (ImplicitCastExpr, IntegralToBoolean, _Bool) +// CHECK-NEXT: T: while [B4.10] +// CHECK-NEXT: Preds (2): B2 B5 +// CHECK-NEXT: Succs (2): B3 B1 +// CHECK: [B5] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A a; +// CHECK-NEXT: Preds (1): B6 +// CHECK-NEXT: Succs (1): B4 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 void test_while_implicit_scope() { A a; while (A b = a) A c; } +// CHECK: [B12 (ENTRY)] +// CHECK-NEXT: Succs (1): B11 +// CHECK: [B1] +// CHECK-NEXT: 1: [B10.4].~A() (Implicit destructor) +// CHECK-NEXT: 2: (CXXConstructExpr, class A) +// CHECK-NEXT: 3: A e; +// CHECK-NEXT: 4: [B1.3].~A() (Implicit destructor) +// CHECK-NEXT: 5: [B11.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (2): B8 B10 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B2] +// CHECK-NEXT: Preds (2): B3 B6 +// CHECK-NEXT: Succs (1): B10 +// CHECK: [B3] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A d; +// CHECK-NEXT: 3: [B3.2].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B9.2].~A() (Implicit destructor) +// CHECK-NEXT: 5: [B10.4].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B5 +// CHECK-NEXT: Succs (1): B2 +// CHECK: [B4] +// CHECK-NEXT: 1: return; +// CHECK-NEXT: 2: [B9.2].~A() (Implicit destructor) +// CHECK-NEXT: 3: [B10.4].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B11.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B5 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B5] +// CHECK-NEXT: 1: UV +// CHECK-NEXT: 2: [B5.1] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B5.2] +// CHECK-NEXT: Preds (1): B7 +// CHECK-NEXT: Succs (2): B4 B3 +// CHECK: [B6] +// CHECK-NEXT: 1: [B9.2].~A() (Implicit destructor) +// CHECK-NEXT: 2: [B10.4].~A() (Implicit destructor) +// CHECK-NEXT: T: continue; +// CHECK: Preds (1): B7 +// CHECK-NEXT: Succs (1): B2 +// CHECK: [B7] +// CHECK-NEXT: 1: UV +// CHECK-NEXT: 2: [B7.1] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B7.2] +// CHECK-NEXT: Preds (1): B9 +// CHECK-NEXT: Succs (2): B6 B5 +// CHECK: [B8] +// CHECK-NEXT: 1: [B9.2].~A() (Implicit destructor) +// CHECK-NEXT: T: break; +// CHECK: Preds (1): B9 +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B9] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A c; +// CHECK-NEXT: 3: UV +// CHECK-NEXT: 4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B9.4] +// CHECK-NEXT: Preds (1): B10 +// CHECK-NEXT: Succs (2): B8 B7 +// CHECK: [B10] +// CHECK-NEXT: 1: a +// CHECK-NEXT: 2: [B10.1] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 3: [B10.2] (CXXConstructExpr, class A) +// CHECK-NEXT: 4: A b = a; +// CHECK-NEXT: 5: b +// CHECK-NEXT: 6: [B10.5] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 7: [B10.6].operator int +// CHECK-NEXT: 8: [B10.7]() +// CHECK-NEXT: 9: [B10.8] (ImplicitCastExpr, UserDefinedConversion, int) +// CHECK: 10: [B10.9] (ImplicitCastExpr, IntegralToBoolean, _Bool) +// CHECK-NEXT: T: while [B10.10] +// CHECK-NEXT: Preds (2): B2 B11 +// CHECK-NEXT: Succs (2): B9 B1 +// CHECK: [B11] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A a; +// CHECK-NEXT: Preds (1): B12 +// CHECK-NEXT: Succs (1): B10 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (2): B1 B4 void test_while_jumps() { A a; while (A b = a) { @@ -88,11 +465,98 @@ void test_while_jumps() { A e; } +// CHECK: [B4 (ENTRY)] +// CHECK-NEXT: Succs (1): B2 +// CHECK: [B1] +// CHECK-NEXT: 1: UV +// CHECK-NEXT: 2: [B1.1] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: do ... while [B1.2] +// CHECK-NEXT: Preds (1): B2 +// CHECK-NEXT: Succs (2): B3 B0 +// CHECK: [B2] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A a; +// CHECK-NEXT: 3: [B2.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (2): B3 B4 +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B3] +// CHECK-NEXT: Preds (1): B1 +// CHECK-NEXT: Succs (1): B2 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 void test_do_implicit_scope() { do A a; while (UV); } +// CHECK: [B12 (ENTRY)] +// CHECK-NEXT: Succs (1): B11 +// CHECK: [B1] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A d; +// CHECK-NEXT: 3: [B1.2].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B11.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (2): B8 B2 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B2] +// CHECK-NEXT: 1: UV +// CHECK-NEXT: 2: [B2.1] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: do ... while [B2.2] +// CHECK-NEXT: Preds (2): B3 B6 +// CHECK-NEXT: Succs (2): B10 B1 +// CHECK: [B3] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A c; +// CHECK-NEXT: 3: [B3.2].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B9.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B5 +// CHECK-NEXT: Succs (1): B2 +// CHECK: [B4] +// CHECK-NEXT: 1: return; +// CHECK-NEXT: 2: [B9.2].~A() (Implicit destructor) +// CHECK-NEXT: 3: [B11.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B5 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B5] +// CHECK-NEXT: 1: UV +// CHECK-NEXT: 2: [B5.1] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B5.2] +// CHECK-NEXT: Preds (1): B7 +// CHECK-NEXT: Succs (2): B4 B3 +// CHECK: [B6] +// CHECK-NEXT: 1: [B9.2].~A() (Implicit destructor) +// CHECK-NEXT: T: continue; +// CHECK: Preds (1): B7 +// CHECK-NEXT: Succs (1): B2 +// CHECK: [B7] +// CHECK-NEXT: 1: UV +// CHECK-NEXT: 2: [B7.1] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B7.2] +// CHECK-NEXT: Preds (1): B9 +// CHECK-NEXT: Succs (2): B6 B5 +// CHECK: [B8] +// CHECK-NEXT: 1: [B9.2].~A() (Implicit destructor) +// CHECK-NEXT: T: break; +// CHECK: Preds (1): B9 +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B9] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A b; +// CHECK-NEXT: 3: UV +// CHECK-NEXT: 4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B9.4] +// CHECK-NEXT: Preds (2): B10 B11 +// CHECK-NEXT: Succs (2): B8 B7 +// CHECK: [B10] +// CHECK-NEXT: Preds (1): B2 +// CHECK-NEXT: Succs (1): B9 +// CHECK: [B11] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A a; +// CHECK-NEXT: Preds (1): B12 +// CHECK-NEXT: Succs (1): B9 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (2): B1 B4 void test_do_jumps() { A a; do { @@ -105,12 +569,107 @@ void test_do_jumps() { A d; } +// CHECK: [B4 (ENTRY)] +// CHECK-NEXT: Succs (1): B2 +// CHECK: [B1] +// CHECK-NEXT: 1: [B2.6].~A() (Implicit destructor) +// CHECK-NEXT: 2: [B2.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (2): B3 B2 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B2] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A a; +// CHECK-NEXT: 3: a +// CHECK-NEXT: 4: [B2.3] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 5: [B2.4] (CXXConstructExpr, class A) +// CHECK-NEXT: 6: A b = a; +// CHECK-NEXT: 7: b +// CHECK-NEXT: 8: [B2.7] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 9: [B2.8].operator int +// CHECK: 10: [B2.9]() +// CHECK: 11: [B2.10] (ImplicitCastExpr, UserDefinedConversion, int) +// CHECK-NEXT: T: switch [B2.11] +// CHECK-NEXT: Preds (1): B4 +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B3] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A c; +// CHECK-NEXT: 3: [B3.2].~A() (Implicit destructor) +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 void test_switch_implicit_scope() { A a; switch (A b = a) A c; } +// CHECK: [B9 (ENTRY)] +// CHECK-NEXT: Succs (1): B2 +// CHECK: [B1] +// CHECK-NEXT: 1: [B2.6].~A() (Implicit destructor) +// CHECK-NEXT: 2: (CXXConstructExpr, class A) +// CHECK-NEXT: 3: A g; +// CHECK-NEXT: 4: [B1.3].~A() (Implicit destructor) +// CHECK-NEXT: 5: [B2.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (3): B3 B7 B2 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B2] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A a; +// CHECK-NEXT: 3: a +// CHECK-NEXT: 4: [B2.3] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 5: [B2.4] (CXXConstructExpr, class A) +// CHECK-NEXT: 6: A b = a; +// CHECK-NEXT: 7: b +// CHECK-NEXT: 8: [B2.7] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 9: [B2.8].operator int +// CHECK: 10: [B2.9]() +// CHECK: 11: [B2.10] (ImplicitCastExpr, UserDefinedConversion, int) +// CHECK-NEXT: T: switch [B2.11] +// CHECK-NEXT: Preds (1): B9 +// CHECK-NEXT: Succs (3): B3 B8 B1 +// CHECK: [B3] +// CHECK: case 1: +// CHECK-NEXT: T: break; +// CHECK: Preds (2): B2 B4 +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B4] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A f; +// CHECK-NEXT: 3: [B4.2].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B8.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B6 +// CHECK-NEXT: Succs (1): B3 +// CHECK: [B5] +// CHECK-NEXT: 1: return; +// CHECK-NEXT: 2: [B8.2].~A() (Implicit destructor) +// CHECK-NEXT: 3: [B2.6].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B2.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B6 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B6] +// CHECK-NEXT: 1: UV +// CHECK-NEXT: 2: [B6.1] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B6.2] +// CHECK-NEXT: Preds (1): B8 +// CHECK-NEXT: Succs (2): B5 B4 +// CHECK: [B7] +// CHECK-NEXT: 1: [B8.2].~A() (Implicit destructor) +// CHECK-NEXT: T: break; +// CHECK: Preds (1): B8 +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B8] +// CHECK: case 0: +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A c; +// CHECK-NEXT: 3: UV +// CHECK-NEXT: 4: [B8.3] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B8.4] +// CHECK-NEXT: Preds (1): B2 +// CHECK-NEXT: Succs (2): B7 B6 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (2): B1 B5 void test_switch_jumps() { A a; switch (A b = a) { @@ -126,11 +685,132 @@ void test_switch_jumps() { A g; } +// CHECK: [B6 (ENTRY)] +// CHECK-NEXT: Succs (1): B5 +// CHECK: [B1] +// CHECK-NEXT: 1: [B4.4].~A() (Implicit destructor) +// CHECK-NEXT: 2: [B5.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B4 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B2] +// CHECK-NEXT: Preds (1): B3 +// CHECK-NEXT: Succs (1): B4 +// CHECK: [B3] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A c; +// CHECK-NEXT: 3: [B3.2].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B4.4].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B4 +// CHECK-NEXT: Succs (1): B2 +// CHECK: [B4] +// CHECK-NEXT: 1: a +// CHECK-NEXT: 2: [B4.1] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 3: [B4.2] (CXXConstructExpr, class A) +// CHECK-NEXT: 4: A b = a; +// CHECK-NEXT: 5: b +// CHECK-NEXT: 6: [B4.5] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 7: [B4.6].operator int +// CHECK-NEXT: 8: [B4.7]() +// CHECK-NEXT: 9: [B4.8] (ImplicitCastExpr, UserDefinedConversion, int) +// CHECK: 10: [B4.9] (ImplicitCastExpr, IntegralToBoolean, _Bool) +// CHECK-NEXT: T: for (...; [B4.10]; ) +// CHECK-NEXT: Preds (2): B2 B5 +// CHECK-NEXT: Succs (2): B3 B1 +// CHECK: [B5] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A a; +// CHECK-NEXT: Preds (1): B6 +// CHECK-NEXT: Succs (1): B4 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 void test_for_implicit_scope() { for (A a; A b = a; ) A c; } +// CHECK: [B12 (ENTRY)] +// CHECK-NEXT: Succs (1): B11 +// CHECK: [B1] +// CHECK-NEXT: 1: [B10.4].~A() (Implicit destructor) +// CHECK-NEXT: 2: [B11.4].~A() (Implicit destructor) +// CHECK-NEXT: 3: (CXXConstructExpr, class A) +// CHECK-NEXT: 4: A f; +// CHECK-NEXT: 5: [B1.4].~A() (Implicit destructor) +// CHECK-NEXT: 6: [B11.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (2): B8 B10 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B2] +// CHECK-NEXT: Preds (2): B3 B6 +// CHECK-NEXT: Succs (1): B10 +// CHECK: [B3] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A e; +// CHECK-NEXT: 3: [B3.2].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B9.2].~A() (Implicit destructor) +// CHECK-NEXT: 5: [B10.4].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B5 +// CHECK-NEXT: Succs (1): B2 +// CHECK: [B4] +// CHECK-NEXT: 1: return; +// CHECK-NEXT: 2: [B9.2].~A() (Implicit destructor) +// CHECK-NEXT: 3: [B10.4].~A() (Implicit destructor) +// CHECK-NEXT: 4: [B11.4].~A() (Implicit destructor) +// CHECK-NEXT: 5: [B11.2].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B5 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B5] +// CHECK-NEXT: 1: UV +// CHECK-NEXT: 2: [B5.1] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B5.2] +// CHECK-NEXT: Preds (1): B7 +// CHECK-NEXT: Succs (2): B4 B3 +// CHECK: [B6] +// CHECK-NEXT: 1: [B9.2].~A() (Implicit destructor) +// CHECK-NEXT: T: continue; +// CHECK: Preds (1): B7 +// CHECK-NEXT: Succs (1): B2 +// CHECK: [B7] +// CHECK-NEXT: 1: UV +// CHECK-NEXT: 2: [B7.1] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B7.2] +// CHECK-NEXT: Preds (1): B9 +// CHECK-NEXT: Succs (2): B6 B5 +// CHECK: [B8] +// CHECK-NEXT: 1: [B9.2].~A() (Implicit destructor) +// CHECK-NEXT: T: break; +// CHECK: Preds (1): B9 +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B9] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A d; +// CHECK-NEXT: 3: UV +// CHECK-NEXT: 4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool) +// CHECK-NEXT: T: if [B9.4] +// CHECK-NEXT: Preds (1): B10 +// CHECK-NEXT: Succs (2): B8 B7 +// CHECK: [B10] +// CHECK-NEXT: 1: b +// CHECK-NEXT: 2: [B10.1] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 3: [B10.2] (CXXConstructExpr, class A) +// CHECK-NEXT: 4: A c = b; +// CHECK-NEXT: 5: c +// CHECK-NEXT: 6: [B10.5] (ImplicitCastExpr, NoOp, const class A) +// CHECK-NEXT: 7: [B10.6].operator int +// CHECK-NEXT: 8: [B10.7]() +// CHECK-NEXT: 9: [B10.8] (ImplicitCastExpr, UserDefinedConversion, int) +// CHECK: 10: [B10.9] (ImplicitCastExpr, IntegralToBoolean, _Bool) +// CHECK-NEXT: T: for (...; [B10.10]; ) +// CHECK-NEXT: Preds (2): B2 B11 +// CHECK-NEXT: Succs (2): B9 B1 +// CHECK: [B11] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: A a; +// CHECK-NEXT: 3: (CXXConstructExpr, class A) +// CHECK-NEXT: 4: A b; +// CHECK-NEXT: Preds (1): B12 +// CHECK-NEXT: Succs (1): B10 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (2): B1 B4 void test_for_jumps() { A a; for (A b; A c = b; ) { @@ -143,722 +823,41 @@ void test_for_jumps() { A f; } +// CHECK: [B3 (ENTRY)] +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B1] +// CHECK-NEXT: T: try ... +// CHECK-NEXT: Succs (2): B2 B0 +// CHECK: [B2] +// CHECK-NEXT: catch (const A &e): +// CHECK-NEXT: 1: catch (const A &e) { +// CHECK-NEXT: } +// CHECK-NEXT: Preds (1): B1 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (3): B2 B1 B3 void test_catch_const_ref() { try { } catch (const A& e) { } } +// CHECK: [B3 (ENTRY)] +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B1] +// CHECK-NEXT: T: try ... +// CHECK-NEXT: Succs (2): B2 B0 +// CHECK: [B2] +// CHECK-NEXT: catch (A e): +// CHECK-NEXT: 1: catch (A e) { +// CHECK-NEXT: } +// CHECK-NEXT: 2: [B2.1].~A() (Implicit destructor) +// CHECK-NEXT: Preds (1): B1 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (3): B2 B1 B3 void test_catch_copy() { try { } catch (A e) { } } - -// CHECK: [B1 (ENTRY)] -// CHECK: Succs (1): B0 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (1): B1 -// CHECK: [B1 (ENTRY)] -// CHECK: Succs (1): B0 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (1): B1 -// CHECK: [B2 (ENTRY)] -// CHECK: Succs (1): B1 -// CHECK: [B1] -// CHECK: 1: 1 -// CHECK: 2: return [B1.1]; -// CHECK: Preds (1): B2 -// CHECK: Succs (1): B0 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (1): B1 -// CHECK: [B2 (ENTRY)] -// CHECK: Succs (1): B1 -// CHECK: [B1] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A a; -// CHECK: 3: a -// CHECK: 4: [B1.3] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 5: const A &b = a; -// CHECK: 6: A() (CXXConstructExpr, class A) -// CHECK: 7: [B1.6] (BindTemporary) -// CHECK: 8: [B1.7] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 9: [B1.8] -// CHECK: 10: const A &c = A(); -// CHECK: 11: [B1.10].~A() (Implicit destructor) -// CHECK: 12: [B1.2].~A() (Implicit destructor) -// CHECK: Preds (1): B2 -// CHECK: Succs (1): B0 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (1): B1 -// CHECK: [B2 (ENTRY)] -// CHECK: Succs (1): B1 -// CHECK: [B1] -// CHECK: 1: (CXXConstructExpr, class A [2]) -// CHECK: 2: A a[2]; -// CHECK: 3: (CXXConstructExpr, class A [0]) -// CHECK: 4: A b[0]; -// CHECK: 5: [B1.2].~A() (Implicit destructor) -// CHECK: Preds (1): B2 -// CHECK: Succs (1): B0 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (1): B1 -// CHECK: [B2 (ENTRY)] -// CHECK: Succs (1): B1 -// CHECK: [B1] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A a; -// CHECK: 3: (CXXConstructExpr, class A) -// CHECK: 4: A c; -// CHECK: 5: (CXXConstructExpr, class A) -// CHECK: 6: A d; -// CHECK: 7: [B1.6].~A() (Implicit destructor) -// CHECK: 8: [B1.4].~A() (Implicit destructor) -// CHECK: 9: (CXXConstructExpr, class A) -// CHECK: 10: A b; -// CHECK: 11: [B1.10].~A() (Implicit destructor) -// CHECK: 12: [B1.2].~A() (Implicit destructor) -// CHECK: Preds (1): B2 -// CHECK: Succs (1): B0 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (1): B1 -// CHECK: [B4 (ENTRY)] -// CHECK: Succs (1): B3 -// CHECK: [B1] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A c; -// CHECK: 3: [B1.2].~A() (Implicit destructor) -// CHECK: 4: [B3.4].~A() (Implicit destructor) -// CHECK: 5: [B3.2].~A() (Implicit destructor) -// CHECK: Preds (1): B3 -// CHECK: Succs (1): B0 -// CHECK: [B2] -// CHECK: 1: return; -// CHECK: 2: [B3.4].~A() (Implicit destructor) -// CHECK: 3: [B3.2].~A() (Implicit destructor) -// CHECK: Preds (1): B3 -// CHECK: Succs (1): B0 -// CHECK: [B3] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A a; -// CHECK: 3: (CXXConstructExpr, class A) -// CHECK: 4: A b; -// CHECK: 5: UV -// CHECK: 6: [B3.5] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B3.6] -// CHECK: Preds (1): B4 -// CHECK: Succs (2): B2 B1 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (2): B1 B2 -// CHECK: [B8 (ENTRY)] -// CHECK: Succs (1): B7 -// CHECK: [B1] -// CHECK: l1: -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A c; -// CHECK: 3: [B1.2].~A() (Implicit destructor) -// CHECK: 4: [B6.2].~A() (Implicit destructor) -// CHECK: 5: [B7.2].~A() (Implicit destructor) -// CHECK: Preds (2): B2 B3 -// CHECK: Succs (1): B0 -// CHECK: [B2] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A b; -// CHECK: 3: [B2.2].~A() (Implicit destructor) -// CHECK: 4: [B6.4].~A() (Implicit destructor) -// CHECK: Preds (1): B4 -// CHECK: Succs (1): B1 -// CHECK: [B3] -// CHECK: 1: [B6.4].~A() (Implicit destructor) -// CHECK: T: goto l1; -// CHECK: Preds (1): B4 -// CHECK: Succs (1): B1 -// CHECK: [B4] -// CHECK: 1: UV -// CHECK: 2: [B4.1] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B4.2] -// CHECK: Preds (1): B6 -// CHECK: Succs (2): B3 B2 -// CHECK: [B5] -// CHECK: 1: [B6.4].~A() (Implicit destructor) -// CHECK: 2: [B6.2].~A() (Implicit destructor) -// CHECK: T: goto l0; -// CHECK: Preds (1): B6 -// CHECK: Succs (1): B6 -// CHECK: [B6] -// CHECK: l0: -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A b; -// CHECK: 3: (CXXConstructExpr, class A) -// CHECK: 4: A a; -// CHECK: 5: UV -// CHECK: 6: [B6.5] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B6.6] -// CHECK: Preds (2): B7 B5 -// CHECK: Succs (2): B5 B4 -// CHECK: [B7] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A a; -// CHECK: Preds (1): B8 -// CHECK: Succs (1): B6 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (1): B1 -// CHECK: [B5 (ENTRY)] -// CHECK: Succs (1): B4 -// CHECK: [B1] -// CHECK: 1: [B4.6].~A() (Implicit destructor) -// CHECK: 2: [B4.2].~A() (Implicit destructor) -// CHECK: Preds (2): B2 B3 -// CHECK: Succs (1): B0 -// CHECK: [B2] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A c; -// CHECK: 3: [B2.2].~A() (Implicit destructor) -// CHECK: Preds (1): B4 -// CHECK: Succs (1): B1 -// CHECK: [B3] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A c; -// CHECK: 3: [B3.2].~A() (Implicit destructor) -// CHECK: Preds (1): B4 -// CHECK: Succs (1): B1 -// CHECK: [B4] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A a; -// CHECK: 3: a -// CHECK: 4: [B4.3] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 5: [B4.4] (CXXConstructExpr, class A) -// CHECK: 6: A b = a; -// CHECK: 7: b -// CHECK: 8: [B4.7] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 9: [B4.8].operator int -// CHECK: 10: [B4.9]() -// CHECK: 11: [B4.10] (ImplicitCastExpr, UserDefinedConversion, int) -// CHECK: 12: [B4.11] (ImplicitCastExpr, IntegralToBoolean, _Bool) -// CHECK: T: if [B4.12] -// CHECK: Preds (1): B5 -// CHECK: Succs (2): B3 B2 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (1): B1 -// CHECK: [B9 (ENTRY)] -// CHECK: Succs (1): B8 -// CHECK: [B1] -// CHECK: 1: [B8.6].~A() (Implicit destructor) -// CHECK: 2: (CXXConstructExpr, class A) -// CHECK: 3: A e; -// CHECK: 4: [B1.3].~A() (Implicit destructor) -// CHECK: 5: [B8.2].~A() (Implicit destructor) -// CHECK: Preds (2): B2 B5 -// CHECK: Succs (1): B0 -// CHECK: [B2] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A d; -// CHECK: 3: [B2.2].~A() (Implicit destructor) -// CHECK: 4: [B4.2].~A() (Implicit destructor) -// CHECK: Preds (1): B4 -// CHECK: Succs (1): B1 -// CHECK: [B3] -// CHECK: 1: return; -// CHECK: 2: [B4.2].~A() (Implicit destructor) -// CHECK: 3: [B8.6].~A() (Implicit destructor) -// CHECK: 4: [B8.2].~A() (Implicit destructor) -// CHECK: Preds (1): B4 -// CHECK: Succs (1): B0 -// CHECK: [B4] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A c; -// CHECK: 3: UV -// CHECK: 4: [B4.3] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B4.4] -// CHECK: Preds (1): B8 -// CHECK: Succs (2): B3 B2 -// CHECK: [B5] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A d; -// CHECK: 3: [B5.2].~A() (Implicit destructor) -// CHECK: 4: [B7.2].~A() (Implicit destructor) -// CHECK: Preds (1): B7 -// CHECK: Succs (1): B1 -// CHECK: [B6] -// CHECK: 1: return; -// CHECK: 2: [B7.2].~A() (Implicit destructor) -// CHECK: 3: [B8.6].~A() (Implicit destructor) -// CHECK: 4: [B8.2].~A() (Implicit destructor) -// CHECK: Preds (1): B7 -// CHECK: Succs (1): B0 -// CHECK: [B7] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A c; -// CHECK: 3: UV -// CHECK: 4: [B7.3] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B7.4] -// CHECK: Preds (1): B8 -// CHECK: Succs (2): B6 B5 -// CHECK: [B8] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A a; -// CHECK: 3: a -// CHECK: 4: [B8.3] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 5: [B8.4] (CXXConstructExpr, class A) -// CHECK: 6: A b = a; -// CHECK: 7: b -// CHECK: 8: [B8.7] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 9: [B8.8].operator int -// CHECK: 10: [B8.9]() -// CHECK: 11: [B8.10] (ImplicitCastExpr, UserDefinedConversion, int) -// CHECK: 12: [B8.11] (ImplicitCastExpr, IntegralToBoolean, _Bool) -// CHECK: T: if [B8.12] -// CHECK: Preds (1): B9 -// CHECK: Succs (2): B7 B4 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (3): B1 B3 B6 -// CHECK: [B6 (ENTRY)] -// CHECK: Succs (1): B5 -// CHECK: [B1] -// CHECK: 1: [B4.4].~A() (Implicit destructor) -// CHECK: 2: [B5.2].~A() (Implicit destructor) -// CHECK: Preds (1): B4 -// CHECK: Succs (1): B0 -// CHECK: [B2] -// CHECK: Preds (1): B3 -// CHECK: Succs (1): B4 -// CHECK: [B3] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A c; -// CHECK: 3: [B3.2].~A() (Implicit destructor) -// CHECK: 4: [B4.4].~A() (Implicit destructor) -// CHECK: Preds (1): B4 -// CHECK: Succs (1): B2 -// CHECK: [B4] -// CHECK: 1: a -// CHECK: 2: [B4.1] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 3: [B4.2] (CXXConstructExpr, class A) -// CHECK: 4: A b = a; -// CHECK: 5: b -// CHECK: 6: [B4.5] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 7: [B4.6].operator int -// CHECK: 8: [B4.7]() -// CHECK: 9: [B4.8] (ImplicitCastExpr, UserDefinedConversion, int) -// CHECK: 10: [B4.9] (ImplicitCastExpr, IntegralToBoolean, _Bool) -// CHECK: T: while [B4.10] -// CHECK: Preds (2): B2 B5 -// CHECK: Succs (2): B3 B1 -// CHECK: [B5] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A a; -// CHECK: Preds (1): B6 -// CHECK: Succs (1): B4 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (1): B1 -// CHECK: [B12 (ENTRY)] -// CHECK: Succs (1): B11 -// CHECK: [B1] -// CHECK: 1: [B10.4].~A() (Implicit destructor) -// CHECK: 2: (CXXConstructExpr, class A) -// CHECK: 3: A e; -// CHECK: 4: [B1.3].~A() (Implicit destructor) -// CHECK: 5: [B11.2].~A() (Implicit destructor) -// CHECK: Preds (2): B8 B10 -// CHECK: Succs (1): B0 -// CHECK: [B2] -// CHECK: Preds (2): B3 B6 -// CHECK: Succs (1): B10 -// CHECK: [B3] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A d; -// CHECK: 3: [B3.2].~A() (Implicit destructor) -// CHECK: 4: [B9.2].~A() (Implicit destructor) -// CHECK: 5: [B10.4].~A() (Implicit destructor) -// CHECK: Preds (1): B5 -// CHECK: Succs (1): B2 -// CHECK: [B4] -// CHECK: 1: return; -// CHECK: 2: [B9.2].~A() (Implicit destructor) -// CHECK: 3: [B10.4].~A() (Implicit destructor) -// CHECK: 4: [B11.2].~A() (Implicit destructor) -// CHECK: Preds (1): B5 -// CHECK: Succs (1): B0 -// CHECK: [B5] -// CHECK: 1: UV -// CHECK: 2: [B5.1] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B5.2] -// CHECK: Preds (1): B7 -// CHECK: Succs (2): B4 B3 -// CHECK: [B6] -// CHECK: 1: [B9.2].~A() (Implicit destructor) -// CHECK: 2: [B10.4].~A() (Implicit destructor) -// CHECK: T: continue; -// CHECK: Preds (1): B7 -// CHECK: Succs (1): B2 -// CHECK: [B7] -// CHECK: 1: UV -// CHECK: 2: [B7.1] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B7.2] -// CHECK: Preds (1): B9 -// CHECK: Succs (2): B6 B5 -// CHECK: [B8] -// CHECK: 1: [B9.2].~A() (Implicit destructor) -// CHECK: T: break; -// CHECK: Preds (1): B9 -// CHECK: Succs (1): B1 -// CHECK: [B9] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A c; -// CHECK: 3: UV -// CHECK: 4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B9.4] -// CHECK: Preds (1): B10 -// CHECK: Succs (2): B8 B7 -// CHECK: [B10] -// CHECK: 1: a -// CHECK: 2: [B10.1] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 3: [B10.2] (CXXConstructExpr, class A) -// CHECK: 4: A b = a; -// CHECK: 5: b -// CHECK: 6: [B10.5] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 7: [B10.6].operator int -// CHECK: 8: [B10.7]() -// CHECK: 9: [B10.8] (ImplicitCastExpr, UserDefinedConversion, int) -// CHECK: 10: [B10.9] (ImplicitCastExpr, IntegralToBoolean, _Bool) -// CHECK: T: while [B10.10] -// CHECK: Preds (2): B2 B11 -// CHECK: Succs (2): B9 B1 -// CHECK: [B11] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A a; -// CHECK: Preds (1): B12 -// CHECK: Succs (1): B10 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (2): B1 B4 -// CHECK: [B4 (ENTRY)] -// CHECK: Succs (1): B2 -// CHECK: [B1] -// CHECK: 1: UV -// CHECK: 2: [B1.1] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: do ... while [B1.2] -// CHECK: Preds (1): B2 -// CHECK: Succs (2): B3 B0 -// CHECK: [B2] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A a; -// CHECK: 3: [B2.2].~A() (Implicit destructor) -// CHECK: Preds (2): B3 B4 -// CHECK: Succs (1): B1 -// CHECK: [B3] -// CHECK: Preds (1): B1 -// CHECK: Succs (1): B2 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (1): B1 -// CHECK: [B12 (ENTRY)] -// CHECK: Succs (1): B11 -// CHECK: [B1] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A d; -// CHECK: 3: [B1.2].~A() (Implicit destructor) -// CHECK: 4: [B11.2].~A() (Implicit destructor) -// CHECK: Preds (2): B8 B2 -// CHECK: Succs (1): B0 -// CHECK: [B2] -// CHECK: 1: UV -// CHECK: 2: [B2.1] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: do ... while [B2.2] -// CHECK: Preds (2): B3 B6 -// CHECK: Succs (2): B10 B1 -// CHECK: [B3] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A c; -// CHECK: 3: [B3.2].~A() (Implicit destructor) -// CHECK: 4: [B9.2].~A() (Implicit destructor) -// CHECK: Preds (1): B5 -// CHECK: Succs (1): B2 -// CHECK: [B4] -// CHECK: 1: return; -// CHECK: 2: [B9.2].~A() (Implicit destructor) -// CHECK: 3: [B11.2].~A() (Implicit destructor) -// CHECK: Preds (1): B5 -// CHECK: Succs (1): B0 -// CHECK: [B5] -// CHECK: 1: UV -// CHECK: 2: [B5.1] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B5.2] -// CHECK: Preds (1): B7 -// CHECK: Succs (2): B4 B3 -// CHECK: [B6] -// CHECK: 1: [B9.2].~A() (Implicit destructor) -// CHECK: T: continue; -// CHECK: Preds (1): B7 -// CHECK: Succs (1): B2 -// CHECK: [B7] -// CHECK: 1: UV -// CHECK: 2: [B7.1] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B7.2] -// CHECK: Preds (1): B9 -// CHECK: Succs (2): B6 B5 -// CHECK: [B8] -// CHECK: 1: [B9.2].~A() (Implicit destructor) -// CHECK: T: break; -// CHECK: Preds (1): B9 -// CHECK: Succs (1): B1 -// CHECK: [B9] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A b; -// CHECK: 3: UV -// CHECK: 4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B9.4] -// CHECK: Preds (2): B10 B11 -// CHECK: Succs (2): B8 B7 -// CHECK: [B10] -// CHECK: Preds (1): B2 -// CHECK: Succs (1): B9 -// CHECK: [B11] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A a; -// CHECK: Preds (1): B12 -// CHECK: Succs (1): B9 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (2): B1 B4 -// CHECK: [B4 (ENTRY)] -// CHECK: Succs (1): B2 -// CHECK: [B1] -// CHECK: 1: [B2.6].~A() (Implicit destructor) -// CHECK: 2: [B2.2].~A() (Implicit destructor) -// CHECK: Preds (2): B3 B2 -// CHECK: Succs (1): B0 -// CHECK: [B2] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A a; -// CHECK: 3: a -// CHECK: 4: [B2.3] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 5: [B2.4] (CXXConstructExpr, class A) -// CHECK: 6: A b = a; -// CHECK: 7: b -// CHECK: 8: [B2.7] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 9: [B2.8].operator int -// CHECK: 10: [B2.9]() -// CHECK: 11: [B2.10] (ImplicitCastExpr, UserDefinedConversion, int) -// CHECK: T: switch [B2.11] -// CHECK: Preds (1): B4 -// CHECK: Succs (1): B1 -// CHECK: [B3] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A c; -// CHECK: 3: [B3.2].~A() (Implicit destructor) -// CHECK: Succs (1): B1 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (1): B1 -// CHECK: [B9 (ENTRY)] -// CHECK: Succs (1): B2 -// CHECK: [B1] -// CHECK: 1: [B2.6].~A() (Implicit destructor) -// CHECK: 2: (CXXConstructExpr, class A) -// CHECK: 3: A g; -// CHECK: 4: [B1.3].~A() (Implicit destructor) -// CHECK: 5: [B2.2].~A() (Implicit destructor) -// CHECK: Preds (3): B3 B7 B2 -// CHECK: Succs (1): B0 -// CHECK: [B2] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A a; -// CHECK: 3: a -// CHECK: 4: [B2.3] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 5: [B2.4] (CXXConstructExpr, class A) -// CHECK: 6: A b = a; -// CHECK: 7: b -// CHECK: 8: [B2.7] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 9: [B2.8].operator int -// CHECK: 10: [B2.9]() -// CHECK: 11: [B2.10] (ImplicitCastExpr, UserDefinedConversion, int) -// CHECK: T: switch [B2.11] -// CHECK: Preds (1): B9 -// CHECK: Succs (3): B3 B8 -// CHECK: B1 -// CHECK: [B3] -// CHECK: case 1: -// CHECK: T: break; -// CHECK: Preds (2): B2 B4 -// CHECK: Succs (1): B1 -// CHECK: [B4] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A f; -// CHECK: 3: [B4.2].~A() (Implicit destructor) -// CHECK: 4: [B8.2].~A() (Implicit destructor) -// CHECK: Preds (1): B6 -// CHECK: Succs (1): B3 -// CHECK: [B5] -// CHECK: 1: return; -// CHECK: 2: [B8.2].~A() (Implicit destructor) -// CHECK: 3: [B2.6].~A() (Implicit destructor) -// CHECK: 4: [B2.2].~A() (Implicit destructor) -// CHECK: Preds (1): B6 -// CHECK: Succs (1): B0 -// CHECK: [B6] -// CHECK: 1: UV -// CHECK: 2: [B6.1] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B6.2] -// CHECK: Preds (1): B8 -// CHECK: Succs (2): B5 B4 -// CHECK: [B7] -// CHECK: 1: [B8.2].~A() (Implicit destructor) -// CHECK: T: break; -// CHECK: Preds (1): B8 -// CHECK: Succs (1): B1 -// CHECK: [B8] -// CHECK: case 0: -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A c; -// CHECK: 3: UV -// CHECK: 4: [B8.3] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B8.4] -// CHECK: Preds (1): B2 -// CHECK: Succs (2): B7 B6 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (2): B1 B5 -// CHECK: [B6 (ENTRY)] -// CHECK: Succs (1): B5 -// CHECK: [B1] -// CHECK: 1: [B4.4].~A() (Implicit destructor) -// CHECK: 2: [B5.2].~A() (Implicit destructor) -// CHECK: Preds (1): B4 -// CHECK: Succs (1): B0 -// CHECK: [B2] -// CHECK: Preds (1): B3 -// CHECK: Succs (1): B4 -// CHECK: [B3] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A c; -// CHECK: 3: [B3.2].~A() (Implicit destructor) -// CHECK: 4: [B4.4].~A() (Implicit destructor) -// CHECK: Preds (1): B4 -// CHECK: Succs (1): B2 -// CHECK: [B4] -// CHECK: 1: a -// CHECK: 2: [B4.1] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 3: [B4.2] (CXXConstructExpr, class A) -// CHECK: 4: A b = a; -// CHECK: 5: b -// CHECK: 6: [B4.5] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 7: [B4.6].operator int -// CHECK: 8: [B4.7]() -// CHECK: 9: [B4.8] (ImplicitCastExpr, UserDefinedConversion, int) -// CHECK: 10: [B4.9] (ImplicitCastExpr, IntegralToBoolean, _Bool) -// CHECK: T: for (...; [B4.10]; ) -// CHECK: Preds (2): B2 B5 -// CHECK: Succs (2): B3 B1 -// CHECK: [B5] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A a; -// CHECK: Preds (1): B6 -// CHECK: Succs (1): B4 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (1): B1 -// CHECK: [B12 (ENTRY)] -// CHECK: Succs (1): B11 -// CHECK: [B1] -// CHECK: 1: [B10.4].~A() (Implicit destructor) -// CHECK: 2: [B11.4].~A() (Implicit destructor) -// CHECK: 3: (CXXConstructExpr, class A) -// CHECK: 4: A f; -// CHECK: 5: [B1.4].~A() (Implicit destructor) -// CHECK: 6: [B11.2].~A() (Implicit destructor) -// CHECK: Preds (2): B8 B10 -// CHECK: Succs (1): B0 -// CHECK: [B2] -// CHECK: Preds (2): B3 B6 -// CHECK: Succs (1): B10 -// CHECK: [B3] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A e; -// CHECK: 3: [B3.2].~A() (Implicit destructor) -// CHECK: 4: [B9.2].~A() (Implicit destructor) -// CHECK: 5: [B10.4].~A() (Implicit destructor) -// CHECK: Preds (1): B5 -// CHECK: Succs (1): B2 -// CHECK: [B4] -// CHECK: 1: return; -// CHECK: 2: [B9.2].~A() (Implicit destructor) -// CHECK: 3: [B10.4].~A() (Implicit destructor) -// CHECK: 4: [B11.4].~A() (Implicit destructor) -// CHECK: 5: [B11.2].~A() (Implicit destructor) -// CHECK: Preds (1): B5 -// CHECK: Succs (1): B0 -// CHECK: [B5] -// CHECK: 1: UV -// CHECK: 2: [B5.1] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B5.2] -// CHECK: Preds (1): B7 -// CHECK: Succs (2): B4 B3 -// CHECK: [B6] -// CHECK: 1: [B9.2].~A() (Implicit destructor) -// CHECK: T: continue; -// CHECK: Preds (1): B7 -// CHECK: Succs (1): B2 -// CHECK: [B7] -// CHECK: 1: UV -// CHECK: 2: [B7.1] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B7.2] -// CHECK: Preds (1): B9 -// CHECK: Succs (2): B6 B5 -// CHECK: [B8] -// CHECK: 1: [B9.2].~A() (Implicit destructor) -// CHECK: T: break; -// CHECK: Preds (1): B9 -// CHECK: Succs (1): B1 -// CHECK: [B9] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A d; -// CHECK: 3: UV -// CHECK: 4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool) -// CHECK: T: if [B9.4] -// CHECK: Preds (1): B10 -// CHECK: Succs (2): B8 B7 -// CHECK: [B10] -// CHECK: 1: b -// CHECK: 2: [B10.1] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 3: [B10.2] (CXXConstructExpr, class A) -// CHECK: 4: A c = b; -// CHECK: 5: c -// CHECK: 6: [B10.5] (ImplicitCastExpr, NoOp, const class A) -// CHECK: 7: [B10.6].operator int -// CHECK: 8: [B10.7]() -// CHECK: 9: [B10.8] (ImplicitCastExpr, UserDefinedConversion, int) -// CHECK: 10: [B10.9] (ImplicitCastExpr, IntegralToBoolean, _Bool) -// CHECK: T: for (...; [B10.10]; ) -// CHECK: Preds (2): B2 B11 -// CHECK: Succs (2): B9 B1 -// CHECK: [B11] -// CHECK: 1: (CXXConstructExpr, class A) -// CHECK: 2: A a; -// CHECK: 3: (CXXConstructExpr, class A) -// CHECK: 4: A b; -// CHECK: Preds (1): B12 -// CHECK: Succs (1): B10 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (2): B1 B4 -// CHECK: [B3 (ENTRY)] -// CHECK: Succs (1): B0 -// CHECK: [B1] -// CHECK: T: try ... -// CHECK: Succs (2): B2 B0 -// CHECK: [B2] -// CHECK: catch (const A &e): -// CHECK: 1: catch (const A &e) { -// CHECK: } -// CHECK: Preds (1): B1 -// CHECK: Succs (1): B0 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (3): B2 B1 B3 -// CHECK: [B3 (ENTRY)] -// CHECK: Succs (1): B0 -// CHECK: [B1] -// CHECK: T: try ... -// CHECK: Succs (2): B2 B0 -// CHECK: [B2] -// CHECK: catch (A e): -// CHECK: 1: catch (A e) { -// CHECK: } -// CHECK: 2: [B2.1].~A() (Implicit destructor) -// CHECK: Preds (1): B1 -// CHECK: Succs (1): B0 -// CHECK: [B0 (EXIT)] -// CHECK: Preds (3): B2 B1 B3 - diff --git a/test/Analysis/blocks.m b/test/Analysis/blocks.m index 2fa5a8e1a8a9..62d53607b533 100644 --- a/test/Analysis/blocks.m +++ b/test/Analysis/blocks.m @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core -analyzer-store=region -fblocks -analyzer-opt-analyze-nested-blocks -verify %s +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core -analyzer-store=region -fblocks -analyzer-opt-analyze-nested-blocks -verify -x objective-c++ %s //===----------------------------------------------------------------------===// // The following code is reduced using delta-debugging from Mac OS X headers: @@ -13,6 +14,10 @@ void dispatch_async(dispatch_queue_t queue, dispatch_block_t block); __attribute__((visibility("default"))) __attribute__((__malloc__)) __attribute__((__warn_unused_result__)) __attribute__((__nothrow__)) dispatch_queue_t dispatch_queue_create(const char *label, dispatch_queue_attr_t attr); typedef long dispatch_once_t; void dispatch_once(dispatch_once_t *predicate, dispatch_block_t block); +dispatch_queue_t +dispatch_queue_create(const char *label, dispatch_queue_attr_t attr); + + typedef signed char BOOL; typedef unsigned long NSUInteger; typedef struct _NSZone NSZone; @@ -56,8 +61,8 @@ void test1(NSString *format, ...) { do { if (__builtin_expect(*(&pred), ~0l) != ~0l) dispatch_once(&pred, ^{ - logQueue = dispatch_queue_create("com.mycompany.myproduct.asl", ((void*)0)); - client = asl_open(((void*)0), "com.mycompany.myproduct", 0); + logQueue = dispatch_queue_create("com.mycompany.myproduct.asl", 0); + client = asl_open(((char*)0), "com.mycompany.myproduct", 0); }); } while (0); @@ -65,7 +70,7 @@ void test1(NSString *format, ...) { __builtin_va_start(args, format); NSString *str = [[NSString alloc] initWithFormat:format arguments:args]; - dispatch_async(logQueue, ^{ asl_log(client, ((void*)0), 4, "%s", [str UTF8String]); }); + dispatch_async(logQueue, ^{ asl_log(client, ((aslmsg)0), 4, "%s", [str UTF8String]); }); [str release]; __builtin_va_end(args); @@ -123,3 +128,37 @@ void testMessaging() { }); } @end + +void testReturnVariousSignatures() { + (void)^int(){ + return 42; + }(); + + (void)^int{ + return 42; + }(); + + (void)^(){ + return 42; + }(); + + (void)^{ + return 42; + }(); +} + +// This test used to cause infinite loop in the region invalidation. +void blockCapturesItselfInTheLoop(int x, int m) { + void (^assignData)(int) = ^(int x){ + x++; + }; + while (m < 0) { + void (^loop)(int); + loop = ^(int x) { + assignData(x); + }; + assignData = loop; + m++; + } + assignData(x); +} diff --git a/test/Analysis/builtin-functions.cpp b/test/Analysis/builtin-functions.cpp new file mode 100644 index 000000000000..72d5ad23b16e --- /dev/null +++ b/test/Analysis/builtin-functions.cpp @@ -0,0 +1,24 @@ +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,debug.ExprInspection %s -std=c++11 -verify + +void clang_analyzer_eval(bool); + +void testAddressof(int x) { + clang_analyzer_eval(&x == __builtin_addressof(x)); // expected-warning{{TRUE}} +} + +void testSize() { + struct { + int x; + int y; + char z; + } object; + clang_analyzer_eval(__builtin_object_size(&object.y, 0) == sizeof(object) - sizeof(int)); // expected-warning{{TRUE}} + + // Clang can't actually evaluate these builtin "calls", but importantly they don't actually evaluate the argument expression either. + int i = 0; + char buf[10]; + clang_analyzer_eval(__builtin_object_size(&buf[i++], 0) == sizeof(buf)); // expected-warning{{FALSE}} + clang_analyzer_eval(__builtin_object_size(&buf[++i], 0) == sizeof(buf) - 1); // expected-warning{{FALSE}} + + clang_analyzer_eval(i == 0); // expected-warning{{TRUE}} +} diff --git a/test/Analysis/casts.cpp b/test/Analysis/casts.cpp new file mode 100644 index 000000000000..339539189ed7 --- /dev/null +++ b/test/Analysis/casts.cpp @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-store=region -verify %s +// expected-no-diagnostics + +bool PR14634(int x) { + double y = (double)x; + return !y; +} + +bool PR14634_implicit(int x) { + double y = (double)x; + return y; +} diff --git a/test/Analysis/casts.m b/test/Analysis/casts.m index 1a78940eee25..895c8119c180 100644 --- a/test/Analysis/casts.m +++ b/test/Analysis/casts.m @@ -1,9 +1,7 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core -analyzer-store=region -verify %s // expected-no-diagnostics -// Test function pointer casts. Currently we track function addresses using -// loc::FunctionVal. Because casts can be arbitrary, do we need to model -// functions with regions? +// Test function pointer casts. typedef void* (*MyFuncTest1)(void); MyFuncTest1 test1_aux(void); @@ -14,8 +12,7 @@ void test1(void) { if (p != ((void*) 0)) x = (*p)(); } -// Test casts from void* to function pointers. Same issue as above: -// should we eventually model function pointers using regions? +// Test casts from void* to function pointers. void* test2(void *p) { MyFuncTest1 fp = (MyFuncTest1) p; return (*fp)(); @@ -41,3 +38,9 @@ adium_media_ready_cb(RDR10087620 *InObj) { InObj.elem |= EEOne; } + + +// PR16690 +_Bool testLocAsIntegerToBool() { + return (long long)&testLocAsIntegerToBool; +} diff --git a/test/Analysis/cfg.cpp b/test/Analysis/cfg.cpp index 8c1c7653db13..660d1f264694 100644 --- a/test/Analysis/cfg.cpp +++ b/test/Analysis/cfg.cpp @@ -1,5 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -analyze -analyzer-checker=debug.DumpCFG %s 2>&1 | FileCheck %s -// Check the wrapping behavior when dumping the CFG. +// RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpCFG -triple x86_64-apple-darwin12 -std=c++11 %s 2>&1 | FileCheck %s // CHECK: ENTRY // CHECK-NEXT: Succs (1): B1 @@ -11,7 +10,7 @@ // CHECK-NEXT: Preds (21): B2 B3 B4 B5 B6 B7 B8 B9 // CHECK-NEXT: B10 B11 B12 B13 B14 B15 B16 B17 B18 B19 // CHECK-NEXT: B20 B21 B1 -void test(int i) { +void checkWrap(int i) { switch(i) { case 0: break; case 1: break; @@ -35,3 +34,150 @@ void test(int i) { case 19: break; } } + +// CHECK: ENTRY +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B1] +// CHECK-NEXT: 1: int i; +// CHECK-NEXT: 2: int j; +// CHECK-NEXT: 3: 1 +// CHECK-NEXT: 4: int k = 1; +// CHECK-NEXT: 5: int l; +// CHECK-NEXT: 6: 2 +// CHECK-NEXT: 7: int m = 2; +// CHECK-NEXT: CXXConstructExpr +// CHECK-NEXT: 9: struct standalone myStandalone; +// CHECK-NEXT: CXXConstructExpr +// CHECK-NEXT: 11: struct myAnon; +// CHECK-NEXT: CXXConstructExpr +// CHECK-NEXT: 13: struct named myNamed; +// CHECK-NEXT: Preds (1): B2 +// CHECK-NEXT: Succs (1): B0 +void checkDeclStmts() { + int i, j; + int k = 1, l, m = 2; + + struct standalone { int x, y; }; + struct standalone myStandalone; + + struct { int x, y; } myAnon; + + struct named { int x, y; } myNamed; + + 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) {} +} + +// CHECK: ENTRY +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B1] +// CHECK-NEXT: 1: __builtin_object_size +// CHECK-NEXT: 2: [B1.1] (ImplicitCastExpr, BuiltinFnToFnPtr, unsigned long (*)(const void *, int)) +// CHECK-NEXT: 3: [B1.2](dummy(), 0) +// CHECK-NEXT: 4: (void)[B1.3] (CStyleCastExpr, ToVoid, void) +// CHECK-NEXT: Preds (1): B2 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 +void testBuiltinSize() { + extern int *dummy(); + (void)__builtin_object_size(dummy(), 0); +} + + +class A { +public: + A() {} + ~A() {} +}; + +// CHECK: [B2 (ENTRY)] +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B1] +// CHECK-NEXT: 1: (CXXConstructExpr, class A) +// CHECK-NEXT: 2: new A([B1.1]) +// CHECK-NEXT: 3: A *a = new A(); +// CHECK-NEXT: 4: a +// CHECK-NEXT: 5: [B1.4] (ImplicitCastExpr, LValueToRValue, class A *) +// CHECK-NEXT: 6: [B1.5]->~A() (Implicit destructor) +// CHECK-NEXT: 7: delete [B1.5] +// CHECK-NEXT: Preds (1): B2 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 +void test_deletedtor() { + A *a = new A(); + delete a; +} + +// CHECK: [B2 (ENTRY)] +// CHECK-NEXT: Succs (1): B1 +// CHECK: [B1] +// CHECK-NEXT: 1: 5 +// CHECK-NEXT: 2: (CXXConstructExpr, class A) +// CHECK-NEXT: 3: new A {{\[\[}}B1.1]] +// CHECK-NEXT: 4: A *a = new A [5]; +// CHECK-NEXT: 5: a +// CHECK-NEXT: 6: [B1.5] (ImplicitCastExpr, LValueToRValue, class A *) +// CHECK-NEXT: 7: [B1.6]->~A() (Implicit destructor) +// CHECK-NEXT: 8: delete [] [B1.6] +// CHECK-NEXT: Preds (1): B2 +// CHECK-NEXT: Succs (1): B0 +// CHECK: [B0 (EXIT)] +// CHECK-NEXT: Preds (1): B1 +void test_deleteArraydtor() { + A *a = new A[5]; + delete[] a; +} + + +namespace NoReturnSingleSuccessor { + struct A { + A(); + ~A(); + }; + + struct B : public A { + B(); + ~B() __attribute__((noreturn)); + }; + +// CHECK: ENTRY +// CHECK: 1: 1 +// CHECK-NEXT: 2: return +// CHECK-NEXT: ~B() (Implicit destructor) +// CHECK-NEXT: Preds (1) +// CHECK-NEXT: Succs (1): B0 + int test1(int *x) { + B b; + if (x) + return 1; + } + +// CHECK: ENTRY +// CHECK: 1: 1 +// CHECK-NEXT: 2: return +// CHECK-NEXT: destructor +// CHECK-NEXT: Preds (1) +// CHECK-NEXT: Succs (1): B0 + int test2(int *x) { + const A& a = B(); + if (x) + return 1; + } +} diff --git a/test/Analysis/conditional-operator-path-notes.c b/test/Analysis/conditional-operator-path-notes.c deleted file mode 100644 index a8af394a26d4..000000000000 --- a/test/Analysis/conditional-operator-path-notes.c +++ /dev/null @@ -1,1083 +0,0 @@ -// RUN: %clang --analyze %s -Xanalyzer -analyzer-output=text -Xclang -verify -// RUN: %clang --analyze %s -o %t -// RUN: FileCheck --input-file=%t %s - -void testCondOp(int *p) { - int *x = p ? p : p; - // expected-note@-1 {{Assuming 'p' is null}} - // expected-note@-2 {{'?' condition is false}} - // expected-note@-3 {{'x' initialized to a null pointer value}} - *x = 1; // expected-warning{{Dereference of null pointer (loaded from variable 'x')}} - // expected-note@-1 {{Dereference of null pointer (loaded from variable 'x')}} -} - -void testCondProblem(int *p) { - if (p) return; - // expected-note@-1 {{Assuming 'p' is null}} - // expected-note@-2 {{Taking false branch}} - - int x = *p ? 0 : 1; // expected-warning{{Dereference of null pointer (loaded from variable 'p')}} - // expected-note@-1 {{Dereference of null pointer (loaded from variable 'p')}} - (void)x; -} - -void testLHSProblem(int *p) { - int x = !p ? *p : 1; // expected-warning{{Dereference of null pointer (loaded from variable 'p')}} - // expected-note@-1 {{Assuming 'p' is null}} - // expected-note@-2 {{'?' condition is true}} - // expected-note@-3 {{Dereference of null pointer (loaded from variable 'p')}} - (void)x; -} - -void testRHSProblem(int *p) { - int x = p ? 1 : *p; // expected-warning{{Dereference of null pointer (loaded from variable 'p')}} - // expected-note@-1 {{Assuming 'p' is null}} - // expected-note@-2 {{'?' condition is false}} - // expected-note@-3 {{Dereference of null pointer (loaded from variable 'p')}} - (void)x; -} - -void testBinaryCondOp(int *p) { - int *x = p ?: p; - // expected-note@-1 {{'?' condition is false}} - // expected-note@-2 {{'x' initialized to a null pointer value}} - *x = 1; // expected-warning{{Dereference of null pointer (loaded from variable 'x')}} - // expected-note@-1 {{Dereference of null pointer (loaded from variable 'x')}} -} - -void testBinaryLHSProblem(int *p) { - if (p) return; - // expected-note@-1 {{Assuming 'p' is null}} - // expected-note@-2 {{Taking false branch}} - - int x = *p ?: 1; // expected-warning{{Dereference of null pointer (loaded from variable 'p')}} - // expected-note@-1 {{Dereference of null pointer (loaded from variable 'p')}} - (void)x; -} - -// CHECK: diagnostics -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: path -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col3 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col5 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Assuming 'p' is null -// CHECK-NEXT: message -// CHECK-NEXT: Assuming 'p' is null -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col20 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col20 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col20 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col20 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col3 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col5 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col3 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col3 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col8 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: 'x' initialized to a null pointer value -// CHECK-NEXT: message -// CHECK-NEXT: 'x' initialized to a null pointer value -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col3 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line6 -// CHECK-NEXT: col5 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line10 -// CHECK-NEXT: col6 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line10 -// CHECK-NEXT: col6 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line10 -// CHECK-NEXT: col6 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line10 -// CHECK-NEXT: col4 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line10 -// CHECK-NEXT: col4 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'x') -// CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'x') -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'x') -// CHECK-NEXT: categoryLogic error -// CHECK-NEXT: typeDereference of null pointer -// CHECK-NEXT: issue_context_kindfunction -// CHECK-NEXT: issue_contexttestCondOp -// CHECK-NEXT: issue_hash5 -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line10 -// CHECK-NEXT: col6 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: path -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line15 -// CHECK-NEXT: col3 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line15 -// CHECK-NEXT: col4 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line15 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line15 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line15 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line15 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line15 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Assuming 'p' is null -// CHECK-NEXT: message -// CHECK-NEXT: Assuming 'p' is null -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line15 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line15 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line19 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line19 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line19 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line19 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line19 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') -// CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') -// CHECK-NEXT: categoryLogic error -// CHECK-NEXT: typeDereference of null pointer -// CHECK-NEXT: issue_context_kindfunction -// CHECK-NEXT: issue_contexttestCondProblem -// CHECK-NEXT: issue_hash5 -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line19 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: path -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line25 -// CHECK-NEXT: col3 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line25 -// CHECK-NEXT: col5 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line25 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line25 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line25 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line25 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line25 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Assuming 'p' is null -// CHECK-NEXT: message -// CHECK-NEXT: Assuming 'p' is null -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line25 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line25 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line25 -// CHECK-NEXT: col16 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line25 -// CHECK-NEXT: col16 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line25 -// CHECK-NEXT: col16 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line25 -// CHECK-NEXT: col17 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line25 -// CHECK-NEXT: col17 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') -// CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') -// CHECK-NEXT: categoryLogic error -// CHECK-NEXT: typeDereference of null pointer -// CHECK-NEXT: issue_context_kindfunction -// CHECK-NEXT: issue_contexttestLHSProblem -// CHECK-NEXT: issue_hash1 -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line25 -// CHECK-NEXT: col16 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: path -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line33 -// CHECK-NEXT: col3 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line33 -// CHECK-NEXT: col5 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line33 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line33 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line33 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line33 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line33 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Assuming 'p' is null -// CHECK-NEXT: message -// CHECK-NEXT: Assuming 'p' is null -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line33 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line33 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line33 -// CHECK-NEXT: col19 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line33 -// CHECK-NEXT: col19 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line33 -// CHECK-NEXT: col19 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line33 -// CHECK-NEXT: col20 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line33 -// CHECK-NEXT: col20 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') -// CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') -// CHECK-NEXT: categoryLogic error -// CHECK-NEXT: typeDereference of null pointer -// CHECK-NEXT: issue_context_kindfunction -// CHECK-NEXT: issue_contexttestRHSProblem -// CHECK-NEXT: issue_hash1 -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line33 -// CHECK-NEXT: col19 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: path -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col3 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col5 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col17 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col17 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col17 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col17 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col3 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col5 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col3 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col3 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col8 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: 'x' initialized to a null pointer value -// CHECK-NEXT: message -// CHECK-NEXT: 'x' initialized to a null pointer value -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col3 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line41 -// CHECK-NEXT: col5 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line44 -// CHECK-NEXT: col6 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line44 -// CHECK-NEXT: col6 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line44 -// CHECK-NEXT: col6 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line44 -// CHECK-NEXT: col4 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line44 -// CHECK-NEXT: col4 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'x') -// CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'x') -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'x') -// CHECK-NEXT: categoryLogic error -// CHECK-NEXT: typeDereference of null pointer -// CHECK-NEXT: issue_context_kindfunction -// CHECK-NEXT: issue_contexttestBinaryCondOp -// CHECK-NEXT: issue_hash4 -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line44 -// CHECK-NEXT: col6 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: path -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line49 -// CHECK-NEXT: col3 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line49 -// CHECK-NEXT: col4 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line49 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line49 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line49 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line49 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line49 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Assuming 'p' is null -// CHECK-NEXT: message -// CHECK-NEXT: Assuming 'p' is null -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindcontrol -// CHECK-NEXT: edges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: start -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line49 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line49 -// CHECK-NEXT: col7 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: end -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line53 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line53 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line53 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: ranges -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line53 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: line53 -// CHECK-NEXT: col12 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: depth0 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') -// CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') -// CHECK-NEXT: categoryLogic error -// CHECK-NEXT: typeDereference of null pointer -// CHECK-NEXT: issue_context_kindfunction -// CHECK-NEXT: issue_contexttestBinaryLHSProblem -// CHECK-NEXT: issue_hash5 -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line53 -// CHECK-NEXT: col11 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: diff --git a/test/Analysis/conditional-operator.cpp b/test/Analysis/conditional-operator.cpp index 5a3c325b91d4..137dc3987755 100644 --- a/test/Analysis/conditional-operator.cpp +++ b/test/Analysis/conditional-operator.cpp @@ -1,4 +1,4 @@ -// RUN: %clang -cc1 -analyze -analyzer-checker=core,debug.ExprInspection %s -analyzer-output=text -verify +// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection %s -analyzer-output=text -verify void clang_analyzer_eval(bool); diff --git a/test/Analysis/conditional-path-notes.c b/test/Analysis/conditional-path-notes.c new file mode 100644 index 000000000000..23784970e1f4 --- /dev/null +++ b/test/Analysis/conditional-path-notes.c @@ -0,0 +1,1582 @@ +// RUN: %clang --analyze %s -Xanalyzer -analyzer-output=text -Xclang -verify +// RUN: %clang --analyze %s -Xanalyzer -analyzer-config -Xanalyzer path-diagnostics-alternate=false -o %t +// RUN: FileCheck --input-file=%t %s + +void testCondOp(int *p) { + int *x = p ? p : p; + // expected-note@-1 {{Assuming 'p' is null}} + // expected-note@-2 {{'?' condition is false}} + // expected-note@-3 {{'x' initialized to a null pointer value}} + *x = 1; // expected-warning{{Dereference of null pointer (loaded from variable 'x')}} + // expected-note@-1 {{Dereference of null pointer (loaded from variable 'x')}} +} + +void testCondProblem(int *p) { + if (p) return; + // expected-note@-1 {{Assuming 'p' is null}} + // expected-note@-2 {{Taking false branch}} + + int x = *p ? 0 : 1; // expected-warning{{Dereference of null pointer (loaded from variable 'p')}} + // expected-note@-1 {{Dereference of null pointer (loaded from variable 'p')}} + (void)x; +} + +void testLHSProblem(int *p) { + int x = !p ? *p : 1; // expected-warning{{Dereference of null pointer (loaded from variable 'p')}} + // expected-note@-1 {{Assuming 'p' is null}} + // expected-note@-2 {{'?' condition is true}} + // expected-note@-3 {{Dereference of null pointer (loaded from variable 'p')}} + (void)x; +} + +void testRHSProblem(int *p) { + int x = p ? 1 : *p; // expected-warning{{Dereference of null pointer (loaded from variable 'p')}} + // expected-note@-1 {{Assuming 'p' is null}} + // expected-note@-2 {{'?' condition is false}} + // expected-note@-3 {{Dereference of null pointer (loaded from variable 'p')}} + (void)x; +} + +void testBinaryCondOp(int *p) { + int *x = p ?: p; + // expected-note@-1 {{'?' condition is false}} + // expected-note@-2 {{'x' initialized to a null pointer value}} + *x = 1; // expected-warning{{Dereference of null pointer (loaded from variable 'x')}} + // expected-note@-1 {{Dereference of null pointer (loaded from variable 'x')}} +} + +void testBinaryLHSProblem(int *p) { + if (p) return; + // expected-note@-1 {{Assuming 'p' is null}} + // expected-note@-2 {{Taking false branch}} + + int x = *p ?: 1; // expected-warning{{Dereference of null pointer (loaded from variable 'p')}} + // expected-note@-1 {{Dereference of null pointer (loaded from variable 'p')}} + (void)x; +} + +void testDiagnosableBranch(int a) { + if (a) { + // expected-note@-1 {{Assuming 'a' is not equal to 0}} + // expected-note@-2 {{Taking true branch}} + *(volatile int *)0 = 1; // expected-warning{{Dereference of null pointer}} + // expected-note@-1 {{Dereference of null pointer}} + } +} + +void testNonDiagnosableBranchLogical(int a, int b) { + if (a && b) { + // expected-note@-1 {{Left side of '&&' is true}} + // expected-note@-2 {{Taking true branch}} + *(volatile int *)0 = 1; // expected-warning{{Dereference of null pointer}} + // expected-note@-1 {{Dereference of null pointer}} + } +} + +void testNonDiagnosableBranchArithmetic(int a, int b) { + if (a - b) { + // expected-note@-1 {{Taking true branch}} + *(volatile int *)0 = 1; // expected-warning{{Dereference of null pointer}} + // expected-note@-1 {{Dereference of null pointer}} + } +} + +// CHECK: diagnostics +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'x' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'x' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line10 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line10 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line10 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line10 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line10 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'x') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'x') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'x') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestCondOp +// CHECK-NEXT: issue_hash5 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line10 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line15 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line15 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line15 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line15 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line15 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line15 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line15 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line15 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line15 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line19 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line19 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line19 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line19 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line19 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestCondProblem +// CHECK-NEXT: issue_hash5 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line19 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line25 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line25 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line25 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line25 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line25 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line25 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line25 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line25 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line25 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line25 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line25 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line25 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line25 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line25 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestLHSProblem +// CHECK-NEXT: issue_hash1 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line25 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestRHSProblem +// CHECK-NEXT: issue_hash1 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'x' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'x' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line44 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line44 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line44 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line44 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line44 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'x') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'x') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'x') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestBinaryCondOp +// CHECK-NEXT: issue_hash4 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line44 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line49 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line49 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line49 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line49 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line49 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line49 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line49 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line49 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line49 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestBinaryLHSProblem +// CHECK-NEXT: issue_hash5 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'a' is not equal to 0 +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'a' is not equal to 0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestDiagnosableBranch +// CHECK-NEXT: issue_hash4 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestNonDiagnosableBranchLogical +// CHECK-NEXT: issue_hash4 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line79 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line79 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line79 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line79 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line79 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line79 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line79 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line79 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line79 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestNonDiagnosableBranchArithmetic +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line79 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: diff --git a/test/Analysis/crash-trace.c b/test/Analysis/crash-trace.c new file mode 100644 index 000000000000..a2f318d86579 --- /dev/null +++ b/test/Analysis/crash-trace.c @@ -0,0 +1,19 @@ +// RUN: not --crash %clang_cc1 -analyze -analyzer-checker=debug.ExprInspection %s 2>&1 | FileCheck %s +// REQUIRES: crash-recovery + +void clang_analyzer_crash(void); + +void inlined() { + clang_analyzer_crash(); +} + +void test() { + inlined(); +} + +// CHECK: 0. Program arguments: {{.*}}clang +// CHECK-NEXT: 1. parser at end of file +// CHECK-NEXT: 2. While analyzing stack: +// CHECK-NEXT: #0 void inlined() +// CHECK-NEXT: #1 void test() +// CHECK-NEXT: 3. {{.*}}crash-trace.c:{{[0-9]+}}:3: Error evaluating statement diff --git a/test/Analysis/ctor-inlining.mm b/test/Analysis/ctor-inlining.mm deleted file mode 100644 index 8cdb005968c3..000000000000 --- a/test/Analysis/ctor-inlining.mm +++ /dev/null @@ -1,502 +0,0 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -fobjc-arc -analyzer-config c++-inlining=constructors -Wno-null-dereference -std=c++11 -verify %s - -void clang_analyzer_eval(bool); -void clang_analyzer_checkInlined(bool); - -// A simplified version of std::move. -template -T &&move(T &obj) { - return static_cast(obj); -} - - -struct Wrapper { - __strong id obj; -}; - -void test() { - Wrapper w; - // force a diagnostic - *(char *)0 = 1; // expected-warning{{Dereference of null pointer}} -} - - -struct IntWrapper { - int x; -}; - -void testCopyConstructor() { - IntWrapper a; - a.x = 42; - - IntWrapper b(a); - clang_analyzer_eval(b.x == 42); // expected-warning{{TRUE}} -} - -struct NonPODIntWrapper { - int x; - - virtual int get(); -}; - -void testNonPODCopyConstructor() { - NonPODIntWrapper a; - a.x = 42; - - NonPODIntWrapper b(a); - clang_analyzer_eval(b.x == 42); // expected-warning{{TRUE}} -} - - -namespace ConstructorVirtualCalls { - class A { - public: - int *out1, *out2, *out3; - - virtual int get() { return 1; } - - A(int *out1) { - *out1 = get(); - } - }; - - class B : public A { - public: - virtual int get() { return 2; } - - B(int *out1, int *out2) : A(out1) { - *out2 = get(); - } - }; - - class C : public B { - public: - virtual int get() { return 3; } - - C(int *out1, int *out2, int *out3) : B(out1, out2) { - *out3 = get(); - } - }; - - void test() { - int a, b, c; - - C obj(&a, &b, &c); - clang_analyzer_eval(a == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(b == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(c == 3); // expected-warning{{TRUE}} - - clang_analyzer_eval(obj.get() == 3); // expected-warning{{TRUE}} - - // Sanity check for devirtualization. - A *base = &obj; - clang_analyzer_eval(base->get() == 3); // expected-warning{{TRUE}} - } -} - -namespace TemporaryConstructor { - class BoolWrapper { - public: - BoolWrapper() { - clang_analyzer_checkInlined(true); // expected-warning{{TRUE}} - value = true; - } - bool value; - }; - - void test() { - // PR13717 - Don't crash when a CXXTemporaryObjectExpr is inlined. - if (BoolWrapper().value) - return; - } -} - - -namespace ConstructorUsedAsRValue { - using TemporaryConstructor::BoolWrapper; - - bool extractValue(BoolWrapper b) { - return b.value; - } - - void test() { - bool result = extractValue(BoolWrapper()); - clang_analyzer_eval(result); // expected-warning{{TRUE}} - } -} - -namespace PODUninitialized { - class POD { - public: - int x, y; - }; - - class PODWrapper { - public: - POD p; - }; - - class NonPOD { - public: - int x, y; - - NonPOD() {} - NonPOD(const NonPOD &Other) - : x(Other.x), y(Other.y) // expected-warning {{undefined}} - { - } - NonPOD(NonPOD &&Other) - : x(Other.x), y(Other.y) // expected-warning {{undefined}} - { - } - - NonPOD &operator=(const NonPOD &Other) - { - x = Other.x; - y = Other.y; // expected-warning {{undefined}} - return *this; - } - NonPOD &operator=(NonPOD &&Other) - { - x = Other.x; - y = Other.y; // expected-warning {{undefined}} - return *this; - } - }; - - class NonPODWrapper { - public: - class Inner { - public: - int x, y; - - Inner() {} - Inner(const Inner &Other) - : x(Other.x), y(Other.y) // expected-warning {{undefined}} - { - } - Inner(Inner &&Other) - : x(Other.x), y(Other.y) // expected-warning {{undefined}} - { - } - - Inner &operator=(const Inner &Other) - { - x = Other.x; // expected-warning {{undefined}} - y = Other.y; - return *this; - } - Inner &operator=(Inner &&Other) - { - x = Other.x; // expected-warning {{undefined}} - y = Other.y; - return *this; - } - }; - - Inner p; - }; - - void testPOD() { - POD p; - p.x = 1; - POD p2 = p; // no-warning - clang_analyzer_eval(p2.x == 1); // expected-warning{{TRUE}} - POD p3 = move(p); // no-warning - clang_analyzer_eval(p3.x == 1); // expected-warning{{TRUE}} - - // Use rvalues as well. - clang_analyzer_eval(POD(p3).x == 1); // expected-warning{{TRUE}} - - PODWrapper w; - w.p.y = 1; - PODWrapper w2 = w; // no-warning - clang_analyzer_eval(w2.p.y == 1); // expected-warning{{TRUE}} - PODWrapper w3 = move(w); // no-warning - clang_analyzer_eval(w3.p.y == 1); // expected-warning{{TRUE}} - - // Use rvalues as well. - clang_analyzer_eval(PODWrapper(w3).p.y == 1); // expected-warning{{TRUE}} - } - - void testNonPOD() { - NonPOD p; - p.x = 1; - NonPOD p2 = p; - } - - void testNonPODMove() { - NonPOD p; - p.x = 1; - NonPOD p2 = move(p); - } - - void testNonPODWrapper() { - NonPODWrapper w; - w.p.y = 1; - NonPODWrapper w2 = w; - } - - void testNonPODWrapperMove() { - NonPODWrapper w; - w.p.y = 1; - NonPODWrapper w2 = move(w); - } - - // Not strictly about constructors, but trivial assignment operators should - // essentially work the same way. - namespace AssignmentOperator { - void testPOD() { - POD p; - p.x = 1; - POD p2; - p2 = p; // no-warning - clang_analyzer_eval(p2.x == 1); // expected-warning{{TRUE}} - POD p3; - p3 = move(p); // no-warning - clang_analyzer_eval(p3.x == 1); // expected-warning{{TRUE}} - - PODWrapper w; - w.p.y = 1; - PODWrapper w2; - w2 = w; // no-warning - clang_analyzer_eval(w2.p.y == 1); // expected-warning{{TRUE}} - PODWrapper w3; - w3 = move(w); // no-warning - clang_analyzer_eval(w3.p.y == 1); // expected-warning{{TRUE}} - } - - void testReturnValue() { - POD p; - p.x = 1; - POD p2; - clang_analyzer_eval(&(p2 = p) == &p2); // expected-warning{{TRUE}} - - PODWrapper w; - w.p.y = 1; - PODWrapper w2; - clang_analyzer_eval(&(w2 = w) == &w2); // expected-warning{{TRUE}} - } - - void testNonPOD() { - NonPOD p; - p.x = 1; - NonPOD p2; - p2 = p; - } - - void testNonPODMove() { - NonPOD p; - p.x = 1; - NonPOD p2; - p2 = move(p); - } - - void testNonPODWrapper() { - NonPODWrapper w; - w.p.y = 1; - NonPODWrapper w2; - w2 = w; - } - - void testNonPODWrapperMove() { - NonPODWrapper w; - w.p.y = 1; - NonPODWrapper w2; - w2 = move(w); - } - } -} - -namespace ArrayMembers { - struct Primitive { - int values[3]; - }; - - void testPrimitive() { - Primitive a = { { 1, 2, 3 } }; - - clang_analyzer_eval(a.values[0] == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(a.values[1] == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(a.values[2] == 3); // expected-warning{{TRUE}} - - Primitive b = a; - - clang_analyzer_eval(b.values[0] == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(b.values[1] == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(b.values[2] == 3); // expected-warning{{TRUE}} - - Primitive c; - c = b; - - clang_analyzer_eval(c.values[0] == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(c.values[1] == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(c.values[2] == 3); // expected-warning{{TRUE}} - } - - struct NestedPrimitive { - int values[2][3]; - }; - - void testNestedPrimitive() { - NestedPrimitive a = { { { 0, 0, 0 }, { 1, 2, 3 } } }; - - clang_analyzer_eval(a.values[1][0] == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(a.values[1][1] == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(a.values[1][2] == 3); // expected-warning{{TRUE}} - - NestedPrimitive b = a; - - clang_analyzer_eval(b.values[1][0] == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(b.values[1][1] == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(b.values[1][2] == 3); // expected-warning{{TRUE}} - - NestedPrimitive c; - c = b; - - clang_analyzer_eval(c.values[1][0] == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(c.values[1][1] == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(c.values[1][2] == 3); // expected-warning{{TRUE}} - } - - struct POD { - IntWrapper values[3]; - }; - - void testPOD() { - POD a = { { { 1 }, { 2 }, { 3 } } }; - - clang_analyzer_eval(a.values[0].x == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(a.values[1].x == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(a.values[2].x == 3); // expected-warning{{TRUE}} - - POD b = a; - - clang_analyzer_eval(b.values[0].x == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(b.values[1].x == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(b.values[2].x == 3); // expected-warning{{TRUE}} - - POD c; - c = b; - - clang_analyzer_eval(c.values[0].x == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(c.values[1].x == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(c.values[2].x == 3); // expected-warning{{TRUE}} - } - - struct NestedPOD { - IntWrapper values[2][3]; - }; - - void testNestedPOD() { - NestedPOD a = { { { { 0 }, { 0 }, { 0 } }, { { 1 }, { 2 }, { 3 } } } }; - - clang_analyzer_eval(a.values[1][0].x == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(a.values[1][1].x == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(a.values[1][2].x == 3); // expected-warning{{TRUE}} - - NestedPOD b = a; - - clang_analyzer_eval(b.values[1][0].x == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(b.values[1][1].x == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(b.values[1][2].x == 3); // expected-warning{{TRUE}} - - NestedPOD c; - c = b; - - clang_analyzer_eval(c.values[1][0].x == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(c.values[1][1].x == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(c.values[1][2].x == 3); // expected-warning{{TRUE}} - } - - struct NonPOD { - NonPODIntWrapper values[3]; - }; - - void testNonPOD() { - NonPOD a; - a.values[0].x = 1; - a.values[1].x = 2; - a.values[2].x = 3; - - clang_analyzer_eval(a.values[0].x == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(a.values[1].x == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(a.values[2].x == 3); // expected-warning{{TRUE}} - - NonPOD b = a; - - clang_analyzer_eval(b.values[0].x == 1); // expected-warning{{UNKNOWN}} - clang_analyzer_eval(b.values[1].x == 2); // expected-warning{{UNKNOWN}} - clang_analyzer_eval(b.values[2].x == 3); // expected-warning{{UNKNOWN}} - - NonPOD c; - c = b; - - clang_analyzer_eval(c.values[0].x == 1); // expected-warning{{UNKNOWN}} - clang_analyzer_eval(c.values[1].x == 2); // expected-warning{{UNKNOWN}} - clang_analyzer_eval(c.values[2].x == 3); // expected-warning{{UNKNOWN}} - } - - struct NestedNonPOD { - NonPODIntWrapper values[2][3]; - }; - - void testNestedNonPOD() { - NestedNonPOD a; - a.values[0][0].x = 0; - a.values[0][1].x = 0; - a.values[0][2].x = 0; - a.values[1][0].x = 1; - a.values[1][1].x = 2; - a.values[1][2].x = 3; - - clang_analyzer_eval(a.values[1][0].x == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(a.values[1][1].x == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(a.values[1][2].x == 3); // expected-warning{{TRUE}} - - NestedNonPOD b = a; - - clang_analyzer_eval(b.values[1][0].x == 1); // expected-warning{{UNKNOWN}} - clang_analyzer_eval(b.values[1][1].x == 2); // expected-warning{{UNKNOWN}} - clang_analyzer_eval(b.values[1][2].x == 3); // expected-warning{{UNKNOWN}} - - NestedNonPOD c; - c = b; - - clang_analyzer_eval(c.values[1][0].x == 1); // expected-warning{{UNKNOWN}} - clang_analyzer_eval(c.values[1][1].x == 2); // expected-warning{{UNKNOWN}} - clang_analyzer_eval(c.values[1][2].x == 3); // expected-warning{{UNKNOWN}} - } - - struct NonPODDefaulted { - NonPODIntWrapper values[3]; - - NonPODDefaulted() = default; - NonPODDefaulted(const NonPODDefaulted &) = default; - NonPODDefaulted &operator=(const NonPODDefaulted &) = default; - }; - - void testNonPODDefaulted() { - NonPODDefaulted a; - a.values[0].x = 1; - a.values[1].x = 2; - a.values[2].x = 3; - - clang_analyzer_eval(a.values[0].x == 1); // expected-warning{{TRUE}} - clang_analyzer_eval(a.values[1].x == 2); // expected-warning{{TRUE}} - clang_analyzer_eval(a.values[2].x == 3); // expected-warning{{TRUE}} - - NonPODDefaulted b = a; - - clang_analyzer_eval(b.values[0].x == 1); // expected-warning{{UNKNOWN}} - clang_analyzer_eval(b.values[1].x == 2); // expected-warning{{UNKNOWN}} - clang_analyzer_eval(b.values[2].x == 3); // expected-warning{{UNKNOWN}} - - NonPODDefaulted c; - c = b; - - clang_analyzer_eval(c.values[0].x == 1); // expected-warning{{UNKNOWN}} - clang_analyzer_eval(c.values[1].x == 2); // expected-warning{{UNKNOWN}} - clang_analyzer_eval(c.values[2].x == 3); // expected-warning{{UNKNOWN}} - } -}; diff --git a/test/Analysis/ctor.mm b/test/Analysis/ctor.mm new file mode 100644 index 000000000000..77c87905e1f7 --- /dev/null +++ b/test/Analysis/ctor.mm @@ -0,0 +1,676 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -fobjc-arc -analyzer-config c++-inlining=constructors -Wno-null-dereference -std=c++11 -verify %s + +#include "Inputs/system-header-simulator-cxx.h" + +void clang_analyzer_eval(bool); +void clang_analyzer_checkInlined(bool); + +// A simplified version of std::move. +template +T &&move(T &obj) { + return static_cast(obj); +} + + +struct Wrapper { + __strong id obj; +}; + +void test() { + Wrapper w; + // force a diagnostic + *(char *)0 = 1; // expected-warning{{Dereference of null pointer}} +} + + +struct IntWrapper { + int x; +}; + +void testCopyConstructor() { + IntWrapper a; + a.x = 42; + + IntWrapper b(a); + clang_analyzer_eval(b.x == 42); // expected-warning{{TRUE}} +} + +struct NonPODIntWrapper { + int x; + + virtual int get(); +}; + +void testNonPODCopyConstructor() { + NonPODIntWrapper a; + a.x = 42; + + NonPODIntWrapper b(a); + clang_analyzer_eval(b.x == 42); // expected-warning{{TRUE}} +} + + +namespace ConstructorVirtualCalls { + class A { + public: + int *out1, *out2, *out3; + + virtual int get() { return 1; } + + A(int *out1) { + *out1 = get(); + } + }; + + class B : public A { + public: + virtual int get() { return 2; } + + B(int *out1, int *out2) : A(out1) { + *out2 = get(); + } + }; + + class C : public B { + public: + virtual int get() { return 3; } + + C(int *out1, int *out2, int *out3) : B(out1, out2) { + *out3 = get(); + } + }; + + void test() { + int a, b, c; + + C obj(&a, &b, &c); + clang_analyzer_eval(a == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(b == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(c == 3); // expected-warning{{TRUE}} + + clang_analyzer_eval(obj.get() == 3); // expected-warning{{TRUE}} + + // Sanity check for devirtualization. + A *base = &obj; + clang_analyzer_eval(base->get() == 3); // expected-warning{{TRUE}} + } +} + +namespace TemporaryConstructor { + class BoolWrapper { + public: + BoolWrapper() { + clang_analyzer_checkInlined(true); // expected-warning{{TRUE}} + value = true; + } + bool value; + }; + + void test() { + // PR13717 - Don't crash when a CXXTemporaryObjectExpr is inlined. + if (BoolWrapper().value) + return; + } +} + + +namespace ConstructorUsedAsRValue { + using TemporaryConstructor::BoolWrapper; + + bool extractValue(BoolWrapper b) { + return b.value; + } + + void test() { + bool result = extractValue(BoolWrapper()); + clang_analyzer_eval(result); // expected-warning{{TRUE}} + } +} + +namespace PODUninitialized { + class POD { + public: + int x, y; + }; + + class PODWrapper { + public: + POD p; + }; + + class NonPOD { + public: + int x, y; + + NonPOD() {} + NonPOD(const NonPOD &Other) + : x(Other.x), y(Other.y) // expected-warning {{undefined}} + { + } + NonPOD(NonPOD &&Other) + : x(Other.x), y(Other.y) // expected-warning {{undefined}} + { + } + + NonPOD &operator=(const NonPOD &Other) + { + x = Other.x; + y = Other.y; // expected-warning {{undefined}} + return *this; + } + NonPOD &operator=(NonPOD &&Other) + { + x = Other.x; + y = Other.y; // expected-warning {{undefined}} + return *this; + } + }; + + class NonPODWrapper { + public: + class Inner { + public: + int x, y; + + Inner() {} + Inner(const Inner &Other) + : x(Other.x), y(Other.y) // expected-warning {{undefined}} + { + } + Inner(Inner &&Other) + : x(Other.x), y(Other.y) // expected-warning {{undefined}} + { + } + + Inner &operator=(const Inner &Other) + { + x = Other.x; // expected-warning {{undefined}} + y = Other.y; + return *this; + } + Inner &operator=(Inner &&Other) + { + x = Other.x; // expected-warning {{undefined}} + y = Other.y; + return *this; + } + }; + + Inner p; + }; + + void testPOD() { + POD p; + p.x = 1; + POD p2 = p; // no-warning + clang_analyzer_eval(p2.x == 1); // expected-warning{{TRUE}} + POD p3 = move(p); // no-warning + clang_analyzer_eval(p3.x == 1); // expected-warning{{TRUE}} + + // Use rvalues as well. + clang_analyzer_eval(POD(p3).x == 1); // expected-warning{{TRUE}} + + PODWrapper w; + w.p.y = 1; + PODWrapper w2 = w; // no-warning + clang_analyzer_eval(w2.p.y == 1); // expected-warning{{TRUE}} + PODWrapper w3 = move(w); // no-warning + clang_analyzer_eval(w3.p.y == 1); // expected-warning{{TRUE}} + + // Use rvalues as well. + clang_analyzer_eval(PODWrapper(w3).p.y == 1); // expected-warning{{TRUE}} + } + + void testNonPOD() { + NonPOD p; + p.x = 1; + NonPOD p2 = p; + } + + void testNonPODMove() { + NonPOD p; + p.x = 1; + NonPOD p2 = move(p); + } + + void testNonPODWrapper() { + NonPODWrapper w; + w.p.y = 1; + NonPODWrapper w2 = w; + } + + void testNonPODWrapperMove() { + NonPODWrapper w; + w.p.y = 1; + NonPODWrapper w2 = move(w); + } + + // Not strictly about constructors, but trivial assignment operators should + // essentially work the same way. + namespace AssignmentOperator { + void testPOD() { + POD p; + p.x = 1; + POD p2; + p2 = p; // no-warning + clang_analyzer_eval(p2.x == 1); // expected-warning{{TRUE}} + POD p3; + p3 = move(p); // no-warning + clang_analyzer_eval(p3.x == 1); // expected-warning{{TRUE}} + + PODWrapper w; + w.p.y = 1; + PODWrapper w2; + w2 = w; // no-warning + clang_analyzer_eval(w2.p.y == 1); // expected-warning{{TRUE}} + PODWrapper w3; + w3 = move(w); // no-warning + clang_analyzer_eval(w3.p.y == 1); // expected-warning{{TRUE}} + } + + void testReturnValue() { + POD p; + p.x = 1; + POD p2; + clang_analyzer_eval(&(p2 = p) == &p2); // expected-warning{{TRUE}} + + PODWrapper w; + w.p.y = 1; + PODWrapper w2; + clang_analyzer_eval(&(w2 = w) == &w2); // expected-warning{{TRUE}} + } + + void testNonPOD() { + NonPOD p; + p.x = 1; + NonPOD p2; + p2 = p; + } + + void testNonPODMove() { + NonPOD p; + p.x = 1; + NonPOD p2; + p2 = move(p); + } + + void testNonPODWrapper() { + NonPODWrapper w; + w.p.y = 1; + NonPODWrapper w2; + w2 = w; + } + + void testNonPODWrapperMove() { + NonPODWrapper w; + w.p.y = 1; + NonPODWrapper w2; + w2 = move(w); + } + } +} + +namespace ArrayMembers { + struct Primitive { + int values[3]; + }; + + void testPrimitive() { + Primitive a = { { 1, 2, 3 } }; + + clang_analyzer_eval(a.values[0] == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(a.values[1] == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(a.values[2] == 3); // expected-warning{{TRUE}} + + Primitive b = a; + + clang_analyzer_eval(b.values[0] == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(b.values[1] == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(b.values[2] == 3); // expected-warning{{TRUE}} + + Primitive c; + c = b; + + clang_analyzer_eval(c.values[0] == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(c.values[1] == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(c.values[2] == 3); // expected-warning{{TRUE}} + } + + struct NestedPrimitive { + int values[2][3]; + }; + + void testNestedPrimitive() { + NestedPrimitive a = { { { 0, 0, 0 }, { 1, 2, 3 } } }; + + clang_analyzer_eval(a.values[1][0] == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(a.values[1][1] == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(a.values[1][2] == 3); // expected-warning{{TRUE}} + + NestedPrimitive b = a; + + clang_analyzer_eval(b.values[1][0] == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(b.values[1][1] == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(b.values[1][2] == 3); // expected-warning{{TRUE}} + + NestedPrimitive c; + c = b; + + clang_analyzer_eval(c.values[1][0] == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(c.values[1][1] == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(c.values[1][2] == 3); // expected-warning{{TRUE}} + } + + struct POD { + IntWrapper values[3]; + }; + + void testPOD() { + POD a = { { { 1 }, { 2 }, { 3 } } }; + + clang_analyzer_eval(a.values[0].x == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(a.values[1].x == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(a.values[2].x == 3); // expected-warning{{TRUE}} + + POD b = a; + + clang_analyzer_eval(b.values[0].x == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(b.values[1].x == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(b.values[2].x == 3); // expected-warning{{TRUE}} + + POD c; + c = b; + + clang_analyzer_eval(c.values[0].x == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(c.values[1].x == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(c.values[2].x == 3); // expected-warning{{TRUE}} + } + + struct NestedPOD { + IntWrapper values[2][3]; + }; + + void testNestedPOD() { + NestedPOD a = { { { { 0 }, { 0 }, { 0 } }, { { 1 }, { 2 }, { 3 } } } }; + + clang_analyzer_eval(a.values[1][0].x == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(a.values[1][1].x == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(a.values[1][2].x == 3); // expected-warning{{TRUE}} + + NestedPOD b = a; + + clang_analyzer_eval(b.values[1][0].x == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(b.values[1][1].x == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(b.values[1][2].x == 3); // expected-warning{{TRUE}} + + NestedPOD c; + c = b; + + clang_analyzer_eval(c.values[1][0].x == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(c.values[1][1].x == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(c.values[1][2].x == 3); // expected-warning{{TRUE}} + } + + struct NonPOD { + NonPODIntWrapper values[3]; + }; + + void testNonPOD() { + NonPOD a; + a.values[0].x = 1; + a.values[1].x = 2; + a.values[2].x = 3; + + clang_analyzer_eval(a.values[0].x == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(a.values[1].x == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(a.values[2].x == 3); // expected-warning{{TRUE}} + + NonPOD b = a; + + clang_analyzer_eval(b.values[0].x == 1); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(b.values[1].x == 2); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(b.values[2].x == 3); // expected-warning{{UNKNOWN}} + + NonPOD c; + c = b; + + clang_analyzer_eval(c.values[0].x == 1); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(c.values[1].x == 2); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(c.values[2].x == 3); // expected-warning{{UNKNOWN}} + } + + struct NestedNonPOD { + NonPODIntWrapper values[2][3]; + }; + + void testNestedNonPOD() { + NestedNonPOD a; + a.values[0][0].x = 0; + a.values[0][1].x = 0; + a.values[0][2].x = 0; + a.values[1][0].x = 1; + a.values[1][1].x = 2; + a.values[1][2].x = 3; + + clang_analyzer_eval(a.values[1][0].x == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(a.values[1][1].x == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(a.values[1][2].x == 3); // expected-warning{{TRUE}} + + NestedNonPOD b = a; + + clang_analyzer_eval(b.values[1][0].x == 1); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(b.values[1][1].x == 2); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(b.values[1][2].x == 3); // expected-warning{{UNKNOWN}} + + NestedNonPOD c; + c = b; + + clang_analyzer_eval(c.values[1][0].x == 1); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(c.values[1][1].x == 2); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(c.values[1][2].x == 3); // expected-warning{{UNKNOWN}} + } + + struct NonPODDefaulted { + NonPODIntWrapper values[3]; + + NonPODDefaulted() = default; + NonPODDefaulted(const NonPODDefaulted &) = default; + NonPODDefaulted &operator=(const NonPODDefaulted &) = default; + }; + + void testNonPODDefaulted() { + NonPODDefaulted a; + a.values[0].x = 1; + a.values[1].x = 2; + a.values[2].x = 3; + + clang_analyzer_eval(a.values[0].x == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(a.values[1].x == 2); // expected-warning{{TRUE}} + clang_analyzer_eval(a.values[2].x == 3); // expected-warning{{TRUE}} + + NonPODDefaulted b = a; + + clang_analyzer_eval(b.values[0].x == 1); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(b.values[1].x == 2); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(b.values[2].x == 3); // expected-warning{{UNKNOWN}} + + NonPODDefaulted c; + c = b; + + clang_analyzer_eval(c.values[0].x == 1); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(c.values[1].x == 2); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(c.values[2].x == 3); // expected-warning{{UNKNOWN}} + } +}; + +namespace VirtualInheritance { + int counter; + + struct base { + base() { + ++counter; + } + }; + + struct virtual_subclass : public virtual base { + virtual_subclass() {} + }; + + struct double_subclass : public virtual_subclass { + double_subclass() {} + }; + + void test() { + counter = 0; + double_subclass obj; + clang_analyzer_eval(counter == 1); // expected-warning{{TRUE}} + } + + struct double_virtual_subclass : public virtual virtual_subclass { + double_virtual_subclass() {} + }; + + void testVirtual() { + counter = 0; + double_virtual_subclass obj; + clang_analyzer_eval(counter == 1); // expected-warning{{TRUE}} + } +} + +namespace ZeroInitialization { + struct raw_pair { + int p1; + int p2; + }; + + void testVarDecl() { + raw_pair p{}; + clang_analyzer_eval(p.p1 == 0); // expected-warning{{TRUE}} + clang_analyzer_eval(p.p2 == 0); // expected-warning{{TRUE}} + } + + void testTemporary() { + clang_analyzer_eval(raw_pair().p1 == 0); // expected-warning{{TRUE}} + clang_analyzer_eval(raw_pair().p2 == 0); // expected-warning{{TRUE}} + } + + void testArray() { + raw_pair p[2] = {}; + clang_analyzer_eval(p[0].p1 == 0); // expected-warning{{TRUE}} + clang_analyzer_eval(p[0].p2 == 0); // expected-warning{{TRUE}} + clang_analyzer_eval(p[1].p1 == 0); // expected-warning{{TRUE}} + clang_analyzer_eval(p[1].p2 == 0); // expected-warning{{TRUE}} + } + + void testNew() { + // FIXME: Pending proper implementation of constructors for 'new'. + raw_pair *pp = new raw_pair(); + clang_analyzer_eval(pp->p1 == 0); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(pp->p2 == 0); // expected-warning{{UNKNOWN}} + } + + void testArrayNew() { + // FIXME: Pending proper implementation of constructors for 'new[]'. + raw_pair *p = new raw_pair[2](); + clang_analyzer_eval(p[0].p1 == 0); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(p[0].p2 == 0); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(p[1].p1 == 0); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(p[1].p2 == 0); // expected-warning{{UNKNOWN}} + } + + struct initializing_pair { + public: + int x; + raw_pair y; + initializing_pair() : x(), y() {} + }; + + void testFieldInitializers() { + initializing_pair p; + clang_analyzer_eval(p.x == 0); // expected-warning{{TRUE}} + clang_analyzer_eval(p.y.p1 == 0); // expected-warning{{TRUE}} + clang_analyzer_eval(p.y.p2 == 0); // expected-warning{{TRUE}} + } + + struct subclass : public raw_pair { + subclass() = default; + }; + + void testSubclass() { + subclass p; + clang_analyzer_eval(p.p1 == 0); // expected-warning{{garbage}} + } + + struct initializing_subclass : public raw_pair { + initializing_subclass() : raw_pair() {} + }; + + void testInitializingSubclass() { + initializing_subclass p; + clang_analyzer_eval(p.p1 == 0); // expected-warning{{TRUE}} + clang_analyzer_eval(p.p2 == 0); // expected-warning{{TRUE}} + } + + struct pair_wrapper { + pair_wrapper() : p() {} + raw_pair p; + }; + + struct virtual_subclass : public virtual pair_wrapper { + virtual_subclass() {} + }; + + struct double_virtual_subclass : public virtual_subclass { + double_virtual_subclass() { + // This previously caused a crash because the pair_wrapper subobject was + // initialized twice. + } + }; + + class Empty { + public: + Empty(); + }; + + class PairContainer : public Empty { + raw_pair p; + public: + PairContainer() : Empty(), p() { + // This previously caused a crash because the empty base class looked + // like an initialization of 'p'. + } + PairContainer(int) : Empty(), p() { + // Test inlining something else here. + } + }; + + class PairContainerContainer { + int padding; + PairContainer pc; + public: + PairContainerContainer() : pc(1) {} + }; +} + +namespace InitializerList { + struct List { + bool usedInitializerList; + + List() : usedInitializerList(false) {} + List(std::initializer_list) : usedInitializerList(true) {} + }; + + void testStatic() { + List defaultCtor; + clang_analyzer_eval(!defaultCtor.usedInitializerList); // expected-warning{{TRUE}} + + List list{1, 2}; + clang_analyzer_eval(list.usedInitializerList); // expected-warning{{TRUE}} + } + + void testDynamic() { + List *list = new List{1, 2}; + // FIXME: When we handle constructors with 'new', this will be TRUE. + clang_analyzer_eval(list->usedInitializerList); // expected-warning{{UNKNOWN}} + } +} diff --git a/test/Analysis/cxx-for-range.cpp b/test/Analysis/cxx-for-range.cpp new file mode 100644 index 000000000000..fe73e51410a8 --- /dev/null +++ b/test/Analysis/cxx-for-range.cpp @@ -0,0 +1,1668 @@ +// RUN: %clang_cc1 -analyze -std=c++11 -analyzer-checker=core -analyzer-config path-diagnostics-alternate=true -analyzer-output=plist-multi-file -o %t.plist -verify %s +// RUN: FileCheck --input-file=%t.plist %s + +extern void work(); + +void testLoop() { + int z[] = {1,2}; + for (int y : z) { + work(); + work(); + if (y == 2) + *(volatile int *)0 = 1; // expected-warning {{Dereference of null pointer}} + work(); + work(); + (void)y; + } + + *(volatile int *)0 = 1; // no-warning +} + +class MagicVector { +public: + MagicVector(); + + using iterator = int *; + + iterator begin() const; + iterator end() const; +}; + +MagicVector get(bool fail = false) { + if (fail) + *(volatile int *)0 = 1; // expected-warning {{Dereference of null pointer}} + return MagicVector{}; +} + +void testLoopOpaqueCollection() { + for (int y : get()) { + work(); + work(); + if (y == 2) + *(volatile int *)0 = 1; // expected-warning {{Dereference of null pointer}} + work(); + work(); + (void)y; + } + + *(volatile int *)0 = 1; // expected-warning {{Dereference of null pointer}} +} + + +class MagicVector2 { +public: + MagicVector2(); + + class iterator { + public: + int operator*() const; + iterator &operator++(); + bool operator==(const iterator &); + bool operator!=(const iterator &); + }; + + iterator begin() const; + iterator end() const; +}; + +MagicVector2 get2() { + return MagicVector2{}; +} + +void testLoopOpaqueIterator() { + for (int y : get2()) { + work(); + work(); + if (y == 2) + *(volatile int *)0 = 1; // expected-warning {{Dereference of null pointer}} + work(); + work(); + (void)y; + } + + *(volatile int *)0 = 1; // expected-warning {{Dereference of null pointer}} +} + + +void testLoopErrorInRange() { + for (int y : get(true)) { // error inside get() + work(); + work(); + if (y == 2) + *(volatile int *)0 = 1; // no-warning + work(); + work(); + (void)y; + } + + *(volatile int *)0 = 1; // no-warning +} +// CHECK: diagnostics +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line7 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line7 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line9 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line9 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line9 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line9 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line13 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line13 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line13 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line13 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line15 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line15 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line15 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line15 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line16 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line16 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line16 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line16 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line16 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line8 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line9 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line9 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line9 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line9 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestLoop +// CHECK-NEXT: issue_hash6 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line88 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line88 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line88 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line88 +// CHECK-NEXT: col18 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line88 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line88 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line88 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling 'get' +// CHECK-NEXT: message +// CHECK-NEXT: Calling 'get' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line31 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'testLoopErrorInRange' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'testLoopErrorInRange' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line31 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line31 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line32 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line32 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line32 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line32 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextget +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line33 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'y' is equal to 2 +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'y' is equal to 2 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line42 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line42 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line42 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line42 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line42 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line42 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line42 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line42 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line42 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestLoopOpaqueCollection +// CHECK-NEXT: issue_hash5 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line42 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body skipped when range is empty +// CHECK-NEXT: message +// CHECK-NEXT: Loop body skipped when range is empty +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line48 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line48 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line48 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line48 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line48 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line48 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line48 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line48 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line48 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestLoopOpaqueCollection +// CHECK-NEXT: issue_hash11 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line48 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line73 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line73 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line73 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line73 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line73 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line74 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line74 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line74 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line74 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'y' is equal to 2 +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'y' is equal to 2 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestLoopOpaqueIterator +// CHECK-NEXT: issue_hash5 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line73 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line73 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line73 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body skipped when range is empty +// CHECK-NEXT: message +// CHECK-NEXT: Loop body skipped when range is empty +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line73 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line73 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line83 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line83 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line83 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line83 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line83 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line83 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line83 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line83 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line83 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestLoopOpaqueIterator +// CHECK-NEXT: issue_hash11 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line83 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: diff --git a/test/Analysis/cxx11-crashes.cpp b/test/Analysis/cxx11-crashes.cpp index d0b9222b6a66..3c33de33558f 100644 --- a/test/Analysis/cxx11-crashes.cpp +++ b/test/Analysis/cxx11-crashes.cpp @@ -65,3 +65,32 @@ bool begin(double *it) { bool *a = reinterpret_cast(*( reinterpret_cast( it ))); return *a; } + +// radar://14164698 Don't crash on "assuming" a ComoundVal. +class JSONWireProtocolInputStream { +public: + virtual ~JSONWireProtocolInputStream(); +}; +class JSONWireProtocolReader { +public: + JSONWireProtocolReader(JSONWireProtocolInputStream& istream) + : _istream{istream} {} // On evaluating a bind here, + // the dereference checker issues an assume on a CompoundVal. +~JSONWireProtocolReader(); +private: +JSONWireProtocolInputStream& _istream; +}; +class SocketWireProtocolStream : public JSONWireProtocolInputStream { +}; +void test() { + SocketWireProtocolStream stream{}; + JSONWireProtocolReader reader{stream}; +} + +// This crashed because the analyzer did not understand AttributedStmts. +void fallthrough() { + switch (1) { + case 1: + [[clang::fallthrough]]; + } +} diff --git a/test/Analysis/derived-to-base.cpp b/test/Analysis/derived-to-base.cpp index 0664189a9564..e9c7ca8f731f 100644 --- a/test/Analysis/derived-to-base.cpp +++ b/test/Analysis/derived-to-base.cpp @@ -450,3 +450,28 @@ namespace PR15394 { } }; +namespace Bug16309 { + struct Incomplete; + + struct Base { virtual ~Base(); }; + + struct Derived : public Base { int x; }; + + void* f(Incomplete *i) { + Base *b = reinterpret_cast(i); + // This used to crash because of the reinterpret_cast above. + Derived *d = dynamic_cast(b); + return d; + } + + // And check that reinterpret+dynamic casts work correctly after the fix. + void g() { + Derived d; + d.x = 47; + Base *b = &d; + Incomplete *i = reinterpret_cast(b); + Base *b2 = reinterpret_cast(i); + Derived *d2 = dynamic_cast(b2); + clang_analyzer_eval(d2->x == 47); // expected-warning{{TRUE}} + } +} diff --git a/test/Analysis/diagnostics/Inputs/include/report-issues-within-main-file.h b/test/Analysis/diagnostics/Inputs/include/report-issues-within-main-file.h new file mode 100644 index 000000000000..9ecef343f5ee --- /dev/null +++ b/test/Analysis/diagnostics/Inputs/include/report-issues-within-main-file.h @@ -0,0 +1,43 @@ +template +class auto_ptr { +private: + _Tp* _M_ptr; +public: + auto_ptr(_Tp* __p = 0) throw() : _M_ptr(__p) { } + ~auto_ptr() { delete _M_ptr; } +}; + +void cause_div_by_zero_in_header(int in) { + int h = 0; + h = in/h; + h++; +} + +void do_something (int in) { + in++; + in++; +} + +void cause_div_by_zero_in_header2(int in) { + int h2 = 0; + h2 = in/h2; + h2++; +} + +# define CALLS_BUGGY_FUNCTION2 cause_div_by_zero_in_header2(5); + +void cause_div_by_zero_in_header3(int in) { + int h3 = 0; + h3 = in/h3; + h3++; +} + +# define CALLS_BUGGY_FUNCTION3 cause_div_by_zero_in_header3(5); + +void cause_div_by_zero_in_header4(int in) { + int h4 = 0; + h4 = in/h4; + h4++; +} + +# define TAKE_CALL_AS_ARG(c) c; diff --git a/test/Analysis/diagnostics/Inputs/include/sys/queue.h b/test/Analysis/diagnostics/Inputs/include/sys/queue.h index e5698ed443b7..2740e174f257 100644 --- a/test/Analysis/diagnostics/Inputs/include/sys/queue.h +++ b/test/Analysis/diagnostics/Inputs/include/sys/queue.h @@ -1,4 +1,3 @@ -#pragma clang system_header void free(void *); #define FREE_POINTER(x) free(x) diff --git a/test/Analysis/diagnostics/deref-track-symbolic-region.c b/test/Analysis/diagnostics/deref-track-symbolic-region.c index 03716de9ffec..36d56f1f144f 100644 --- a/test/Analysis/diagnostics/deref-track-symbolic-region.c +++ b/test/Analysis/diagnostics/deref-track-symbolic-region.c @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -verify %s -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file %s -o %t.plist +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file -analyzer-config path-diagnostics-alternate=false %s -o %t.plist // RUN: FileCheck --input-file=%t.plist %s struct S { diff --git a/test/Analysis/diagnostics/explicit-suppression.cpp b/test/Analysis/diagnostics/explicit-suppression.cpp index 57d2d16f89cc..78067573e322 100644 --- a/test/Analysis/diagnostics/explicit-suppression.cpp +++ b/test/Analysis/diagnostics/explicit-suppression.cpp @@ -12,6 +12,6 @@ void clang_analyzer_eval(bool); void testCopyNull(int *I, int *E) { std::copy(I, E, (int *)0); #ifndef SUPPRESSED - // expected-warning@../Inputs/system-header-simulator-cxx.h:80 {{Dereference of null pointer}} + // expected-warning@../Inputs/system-header-simulator-cxx.h:110 {{Dereference of null pointer}} #endif } diff --git a/test/Analysis/diagnostics/report-issues-within-main-file.cpp b/test/Analysis/diagnostics/report-issues-within-main-file.cpp new file mode 100644 index 000000000000..ec8106f6000a --- /dev/null +++ b/test/Analysis/diagnostics/report-issues-within-main-file.cpp @@ -0,0 +1,1756 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix -analyzer-output=plist-multi-file -analyzer-config report-in-main-source-file=true -analyzer-config path-diagnostics-alternate=false %s -o %t.plist +// RUN: FileCheck --input-file=%t.plist %s +#include "Inputs/include/report-issues-within-main-file.h" + +void mainPlusHeader() { + auto_ptr B (new int[5]); +} + +void auxInMain() { + int j = 0; + j++; + cause_div_by_zero_in_header(j); + j--; +} +void mainPlusMainPlusHeader() { + int i = 0; + i++; + auxInMain(); + i++; +} + +void causeDivByZeroInMain(int in) { + int m = 0; + m = in/m; + m++; +} +void mainPlusMain() { + int i = 0; + i++; + causeDivByZeroInMain(i); + i++; +} + +void causeDivByZeroInMain2(int in) { + int m2 = 0; + m2 = in/m2; + m2++; +} + +void mainPlustHeaderCallAndReturnPlusMain() { + int i = 0; + i++; + do_something(i); + causeDivByZeroInMain2(i); + i++; +} + +void callInMacro() { + int j = 0; + j++; + CALLS_BUGGY_FUNCTION2; + j--; +} + +void callInMacro3() { + int j = 0; + j++; + CALLS_BUGGY_FUNCTION3; + j--; +} + +void callCallInMacro3() { + callInMacro3(); +} + +void callInMacroArg() { + int j = 0; + j++; + TAKE_CALL_AS_ARG(cause_div_by_zero_in_header4(5)); + j--; +} + +// CHECK: diagnostics +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line51 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line51 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line51 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling 'cause_div_by_zero_in_header2' +// CHECK-NEXT: message +// CHECK-NEXT: Calling 'cause_div_by_zero_in_header2' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line21 +// CHECK-NEXT: col1 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'callInMacro' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'callInMacro' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line21 +// CHECK-NEXT: col1 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line21 +// CHECK-NEXT: col4 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line22 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line22 +// CHECK-NEXT: col5 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line22 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line22 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line22 +// CHECK-NEXT: col8 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'h2' initialized to 0 +// CHECK-NEXT: message +// CHECK-NEXT: 'h2' initialized to 0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line22 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line22 +// CHECK-NEXT: col5 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line23 +// CHECK-NEXT: col10 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line23 +// CHECK-NEXT: col10 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line23 +// CHECK-NEXT: col10 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line23 +// CHECK-NEXT: col8 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line23 +// CHECK-NEXT: col12 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDivision by zero +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDivision by zero +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextcause_div_by_zero_in_header2 +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line23 +// CHECK-NEXT: col10 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line63 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line63 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line63 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling 'callInMacro3' +// CHECK-NEXT: message +// CHECK-NEXT: Calling 'callInMacro3' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line55 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'callCallInMacro3' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'callCallInMacro3' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line55 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line55 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line56 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line56 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line58 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line58 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line58 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling 'cause_div_by_zero_in_header3' +// CHECK-NEXT: message +// CHECK-NEXT: Calling 'cause_div_by_zero_in_header3' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line29 +// CHECK-NEXT: col1 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: depth2 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'callInMacro3' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'callInMacro3' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line29 +// CHECK-NEXT: col1 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line29 +// CHECK-NEXT: col4 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col5 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col8 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth2 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'h3' initialized to 0 +// CHECK-NEXT: message +// CHECK-NEXT: 'h3' initialized to 0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col5 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line31 +// CHECK-NEXT: col10 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line31 +// CHECK-NEXT: col10 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line31 +// CHECK-NEXT: col10 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line31 +// CHECK-NEXT: col8 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line31 +// CHECK-NEXT: col12 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth2 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDivision by zero +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDivision by zero +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextcause_div_by_zero_in_header3 +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line31 +// CHECK-NEXT: col10 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line69 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line69 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line69 +// CHECK-NEXT: col18 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling 'cause_div_by_zero_in_header4' +// CHECK-NEXT: message +// CHECK-NEXT: Calling 'cause_div_by_zero_in_header4' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line37 +// CHECK-NEXT: col1 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'callInMacroArg' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'callInMacroArg' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line37 +// CHECK-NEXT: col1 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line37 +// CHECK-NEXT: col4 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col5 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col8 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'h4' initialized to 0 +// CHECK-NEXT: message +// CHECK-NEXT: 'h4' initialized to 0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line38 +// CHECK-NEXT: col5 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col10 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col10 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col10 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col8 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col12 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDivision by zero +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDivision by zero +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextcause_div_by_zero_in_header4 +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col10 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col29 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Memory is allocated +// CHECK-NEXT: message +// CHECK-NEXT: Memory is allocated +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line6 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line7 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line7 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: key_event +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line7 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling '~auto_ptr' +// CHECK-NEXT: message +// CHECK-NEXT: Calling '~auto_ptr' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line7 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'mainPlusHeader' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'mainPlusHeader' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line7 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line7 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line7 +// CHECK-NEXT: col17 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line7 +// CHECK-NEXT: col22 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line7 +// CHECK-NEXT: col17 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line7 +// CHECK-NEXT: col24 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line7 +// CHECK-NEXT: col29 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Memory allocated by 'new[]' should be deallocated by 'delete[]', not 'delete' +// CHECK-NEXT: message +// CHECK-NEXT: Memory allocated by 'new[]' should be deallocated by 'delete[]', not 'delete' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionMemory allocated by 'new[]' should be deallocated by 'delete[]', not 'delete' (within a call to '~auto_ptr') +// CHECK-NEXT: categoryMemory Error +// CHECK-NEXT: typeBad deallocator +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextmainPlusHeader +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line7 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line16 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line16 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line18 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line18 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line18 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line18 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line18 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling 'auxInMain' +// CHECK-NEXT: message +// CHECK-NEXT: Calling 'auxInMain' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line9 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'mainPlusMainPlusHeader' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'mainPlusMainPlusHeader' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line9 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line9 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line10 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line10 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line10 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line10 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col29 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: key_event +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col32 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling 'cause_div_by_zero_in_header' +// CHECK-NEXT: message +// CHECK-NEXT: Calling 'cause_div_by_zero_in_header' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line10 +// CHECK-NEXT: col1 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: depth2 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'auxInMain' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'auxInMain' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line10 +// CHECK-NEXT: col1 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line10 +// CHECK-NEXT: col4 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col5 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col7 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth2 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'h' initialized to 0 +// CHECK-NEXT: message +// CHECK-NEXT: 'h' initialized to 0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col3 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col5 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col9 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col9 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col9 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col7 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col10 +// CHECK-NEXT: file1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth2 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDivision by zero (within a call to 'cause_div_by_zero_in_header') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDivision by zero +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextauxInMain +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line12 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col25 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling 'causeDivByZeroInMain' +// CHECK-NEXT: message +// CHECK-NEXT: Calling 'causeDivByZeroInMain' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line22 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'mainPlusMain' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'mainPlusMain' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line22 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line22 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line23 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line23 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line23 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line23 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line23 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'm' initialized to 0 +// CHECK-NEXT: message +// CHECK-NEXT: 'm' initialized to 0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line23 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line23 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line24 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line24 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line24 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line24 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line24 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDivision by zero +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDivision by zero +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextcauseDivByZeroInMain +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line24 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line41 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line43 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line43 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line43 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line43 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line44 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line44 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line44 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line44 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line44 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling 'causeDivByZeroInMain2' +// CHECK-NEXT: message +// CHECK-NEXT: Calling 'causeDivByZeroInMain2' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line34 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'mainPlustHeaderCallAndReturnPlusMain' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'mainPlustHeaderCallAndReturnPlusMain' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line34 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line34 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line35 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line35 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line35 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line35 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line35 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'm2' initialized to 0 +// CHECK-NEXT: message +// CHECK-NEXT: 'm2' initialized to 0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line35 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line35 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line36 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line36 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line36 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line36 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line36 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDivision by zero +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDivision by zero +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextcauseDivByZeroInMain2 +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line36 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: diff --git a/test/Analysis/diagnostics/text-diagnostics.c b/test/Analysis/diagnostics/text-diagnostics.c new file mode 100644 index 000000000000..592521672ff4 --- /dev/null +++ b/test/Analysis/diagnostics/text-diagnostics.c @@ -0,0 +1,21 @@ +// RUN: %clang --analyze -Xanalyzer -analyzer-output=text -fno-caret-diagnostics %s 2>&1 | FileCheck %s + +void testA() { + int *p = 0; + *p = 1; + + // CHECK-LABEL: text-diagnostics.c:{{.*}}:6: warning: Dereference of null pointer (loaded from variable 'p') + // CHECK-NEXT: text-diagnostics.c:[[@LINE-4]]:3: note: 'p' initialized to a null pointer value + // CHECK-NEXT: text-diagnostics.c:[[@LINE-4]]:6: note: Dereference of null pointer (loaded from variable 'p') +} + +void testB(int *q) { + if (q) + return; + *q = 1; + + // CHECK-LABEL: text-diagnostics.c:{{.*}}:6: warning: Dereference of null pointer (loaded from variable 'q') + // CHECK-NEXT: text-diagnostics.c:[[@LINE-5]]:7: note: Assuming 'q' is null + // CHECK-NEXT: text-diagnostics.c:[[@LINE-6]]:3: note: Taking false branch + // CHECK-NEXT: text-diagnostics.c:[[@LINE-5]]:6: note: Dereference of null pointer (loaded from variable 'q') +} diff --git a/test/Analysis/diagnostics/undef-value-caller.c b/test/Analysis/diagnostics/undef-value-caller.c index adfdd4362568..da3a13c2b121 100644 --- a/test/Analysis/diagnostics/undef-value-caller.c +++ b/test/Analysis/diagnostics/undef-value-caller.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist -o %t %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist -analyzer-config path-diagnostics-alternate=false -o %t %s // RUN: FileCheck --input-file %t %s #include "undef-value-callee.h" diff --git a/test/Analysis/diagnostics/undef-value-param.c b/test/Analysis/diagnostics/undef-value-param.c index 5855f507f9f6..dec0a5ada776 100644 --- a/test/Analysis/diagnostics/undef-value-param.c +++ b/test/Analysis/diagnostics/undef-value-param.c @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -verify %s -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file %s -o %t.plist +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file -analyzer-config path-diagnostics-alternate=false %s -o %t.plist // RUN: FileCheck --input-file=%t.plist %s void foo_irrelevant(int c) { diff --git a/test/Analysis/diagnostics/undef-value-param.m b/test/Analysis/diagnostics/undef-value-param.m index 4de83bfb9c82..e977acb70fd9 100644 --- a/test/Analysis/diagnostics/undef-value-param.m +++ b/test/Analysis/diagnostics/undef-value-param.m @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=core,osx -analyzer-output=text -verify %s -// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx -analyzer-output=plist-multi-file %s -o %t.plist +// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx -analyzer-output=plist-multi-file -analyzer-config path-diagnostics-alternate=false %s -o %t.plist // RUN: FileCheck --input-file=%t.plist %s typedef signed char BOOL; diff --git a/test/Analysis/dtor.cpp b/test/Analysis/dtor.cpp index 18cd9853f661..11ce0d57ef4f 100644 --- a/test/Analysis/dtor.cpp +++ b/test/Analysis/dtor.cpp @@ -401,3 +401,38 @@ namespace LifetimeExtension { clang_analyzer_eval(SaveOnVirtualDestruct::lastOutput == 42); // expected-warning{{TRUE}} } } + +namespace NoReturn { + struct NR { + ~NR() __attribute__((noreturn)); + }; + + void f(int **x) { + NR nr; + } + + void g() { + int *x; + f(&x); + *x = 47; // no warning + } +} + +namespace PseudoDtor { + template + void destroy(T &obj) { + clang_analyzer_checkInlined(true); // expected-warning{{TRUE}} + obj.~T(); + } + + void test() { + int i; + destroy(i); + clang_analyzer_eval(true); // expected-warning{{TRUE}} + } +} + +namespace Incomplete { + class Foo; // expected-note{{forward declaration}} + void f(Foo *foo) { delete foo; } // expected-warning{{deleting pointer to incomplete type}} +} diff --git a/test/Analysis/edges-new.mm b/test/Analysis/edges-new.mm new file mode 100644 index 000000000000..8019c15c1b26 --- /dev/null +++ b/test/Analysis/edges-new.mm @@ -0,0 +1,19628 @@ +// RUN: %clang -target x86_64-apple-darwin10 --analyze -Xclang -analyzer-config -Xclang path-diagnostics-alternate=true -Xclang -analyzer-output=plist -o %t %s +// RUN: FileCheck --input-file %t %s + +//===----------------------------------------------------------------------===// +// Forward declarations (from headers). +//===----------------------------------------------------------------------===// + +typedef const struct __CFNumber * CFNumberRef; +typedef const struct __CFAllocator * CFAllocatorRef; +extern const CFAllocatorRef kCFAllocatorDefault; +typedef signed long CFIndex; +enum { + kCFNumberSInt8Type = 1, + kCFNumberSInt16Type = 2, + kCFNumberSInt32Type = 3, + kCFNumberSInt64Type = 4, + kCFNumberFloat32Type = 5, + kCFNumberFloat64Type = 6, + kCFNumberCharType = 7, + kCFNumberShortType = 8, + kCFNumberIntType = 9, + kCFNumberLongType = 10, + kCFNumberLongLongType = 11, + kCFNumberFloatType = 12, + kCFNumberDoubleType = 13, + kCFNumberCFIndexType = 14, + kCFNumberNSIntegerType = 15, + kCFNumberCGFloatType = 16, + kCFNumberMaxType = 16 +}; +typedef CFIndex CFNumberType; +CFNumberRef CFNumberCreate(CFAllocatorRef allocator, CFNumberType theType, const void *valuePtr); + +#define nil ((id)0) + +__attribute__((objc_root_class)) +@interface NSObject ++ (instancetype) alloc; +- (instancetype) init; +- (instancetype)retain; +- (void)release; +@end + +@interface NSArray : NSObject +@end + +//===----------------------------------------------------------------------===// +// Basic tracking of null and tests for null. +//===----------------------------------------------------------------------===// + +void test_null_init(void) { + int *p = 0; + *p = 0xDEADBEEF; +} + +void test_null_assign(void) { + int *p; + p = 0; + *p = 0xDEADBEEF; +} + +void test_null_assign_transitive(void) { + int *p; + p = 0; + int *q = p; + *q = 0xDEADBEEF; +} + +void test_null_cond(int *p) { + if (!p) { + *p = 0xDEADBEEF; + } +} + +void test_null_cond_transitive(int *q) { + if (!q) { + int *p = q; + *p = 0xDEADBEEF; + } +} + +void test_null_field(void) { + struct s { int *p; } x; + x.p = 0; + *(x.p) = 0xDEADBEEF; +} + +void test_assumptions(int a, int b) +{ + if (a == 0) { + return; + } + if (b != 0) { + return; + } + int *p = 0; + *p = 0xDEADBEEF; +} + +int *bar_cond_assign(); +int test_cond_assign() { + int *p; + if ((p = bar_cond_assign())) + return 1; + return *p; +} + +//===----------------------------------------------------------------------===// +// Diagnostics for leaks and "noreturn" paths. +//===----------------------------------------------------------------------===// + + +// leak reports should not show paths that end with exit() (but ones that don't end with exit()) + +void stop() __attribute__((noreturn)); + +void rdar8331641(int x) { + signed z = 1; + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); // expected-warning{{leak}} + if (x) + stop(); + (void) value; +} + +//===----------------------------------------------------------------------===// +// Test loops and control-flow. +//===----------------------------------------------------------------------===// + +void test_objc_fast_enumeration(NSArray *x) { + id obj; + for (obj in x) + *(volatile int *)0 = 0; +} + +void test_objc_fast_enumeration_2(id arr) { + int x; + for (id obj in arr) { + x = 1; + } + x += 1; +} + +// Test that loops are documented in the path. +void rdar12280665() { + for (unsigned i = 0; i < 2; ++i) { + if (i == 1) { + int *p = 0; + *p = 0xDEADBEEF; // expected-warning {{dereference}} + } + } +} + +// Test for a "loop executed 0 times" diagnostic. +int *radar12322528_bar(); + +void radar12322528_for(int x) { + int z; + int *p = 0; + for (unsigned i = 0; i < x; ++i) { + p = radar12322528_bar(); + } + *p = 0xDEADBEEF; +} + +void radar12322528_while(int x) { + int *p = 0; + unsigned i = 0; + for ( ; i < x ; ) { + ++i; + p = radar12322528_bar(); + } + *p = 0xDEADBEEF; +} + +void radar12322528_foo_2() { + int *p = 0; + for (unsigned i = 0; i < 2; ++i) { + if (i == 0) + continue; + + if (i == 1) { + + break; + } + } + *p = 0xDEADBEEF; +} + +void test_loop_diagnostics() { + int *p = 0; + for (int i = 0; i < 2; ++i) { p = 0; } + *p = 1; +} + +void test_loop_diagnostics_2() { + int *p = 0; + + for (int i = 0; i < 2; ) { + + ++i; + + p = 0; + + } + + *p = 1; +} + +void test_loop_diagnostics_3() { + int z; + int y; + int k; + int *p = 0; + int i = 0; + while (i < 2) { + ++i; + p = 0; + } + * p = 1; +} + +void test_do_while() { + unsigned i = 0; + + int *p; + + do { + + ++i; + p = 0; + + } while (i< 2); + + *p = 0xDEADBEEF; +} + + +void test_logical_and() { + int *p = 0; + if (1 && 2) { + *p = 0xDEADBEEF; + } +} + +void test_logical_or() { + int *p = 0; + if (0 || 2) { + *p = 0xDEADBEEF; + } +} + +void test_logical_or_call() { + extern int call(int); + int *p = 0; + if (call(0 || 2)) { + *p = 0xDEADBEEF; + } +} + +void test_nested_logicals(int coin) { + int *p = 0; + + if ((0 || 0) || coin) { + *p = 0xDEADBEEF; + } + + if (0 || (0 || !coin)) { + *p = 0xDEADBEEF; + } +} + +void test_deeply_nested_logicals() { + extern int call(int); + int *p = 0; + + if ((0 || (5 && 0)) ? 0 : ((0 || 4) ? call(1 && 5) : 0)) { + + *p = 0xDEADBEEF; + } +} + +void test_ternary(int x, int *y) { + int z = x ? 0 : 1; + + int *p = z ? y : 0; + + *p = 0xDEADBEEF; +} + +void testUseless(int *y) { + if (y) { + + } + if (y) { + + } + int *p = 0; + *p = 0xDEADBEEF; +} + +//===----------------------------------------------------------------------===// +// Interprocedural tests. +//===----------------------------------------------------------------------===// + +@interface IPA_Foo +- (int *) returnsPointer; +@end + +int testFoo(IPA_Foo *x) { + if (x) + return 1; + return *[x returnsPointer]; +} + +@interface IPA_X : NSObject +- (int *)getPointer; +@end + +void test1_IPA_X() { + IPA_X *x = nil; + *[x getPointer] = 1; // here +} + + +@interface IPA_Y : NSObject +- (IPA_Y *)opaque; +- (IPA_X *)getX; +@end + +@implementation IPA_Y +- (IPA_X *)getX { + return nil; +} +@end + +void test_IPA_Y(IPA_Y *y) { + if (y) + return; + + IPA_X *x = [[y opaque] getX]; // here + *[x getPointer] = 1; +} + +// From diagnostics/report-issues-within-main-file.cpp: +void causeDivByZeroInMain(int in) { + int m = 0; + m = in/m; + m++; +} + +void mainPlusMain() { + int i = 0; + i++; + causeDivByZeroInMain(i); + i++; +} + +// From inlining/path-notes.c: +int *getZero() { + int *p = 0; + return p; +} + +void usePointer(int *p) { + *p = 1; +} + +void testUseOfNullPointer() { + // Test the case where an argument expression is itself a call. + usePointer(getZero()); +} + + +//===----------------------------------------------------------------------===// +// Misc. tests. +//===----------------------------------------------------------------------===// + +// Test for tracking null state of ivars. +@interface RDar12114812 : NSObject { char *p; } +@end +@implementation RDar12114812 +- (void)test { + p = 0; + *p = 1; +} +@end + +// Test diagnostics for initialization of structs. +void RDar13295437_f(void *i) __attribute__((__nonnull__)); +struct RDar13295437_S { int *i; }; +int RDar13295437() { + struct RDar13295437_S s = {0}; + struct RDar13295437_S *sp = &s; + RDar13295437_f(sp->i); + return 0; +} + + +void testCast(int coin) { + if (coin) { + (void)(1+2); + (void)(2+3); + (void)(3+4); + *(volatile int *)0 = 1; + } +} + +// The following previously crashed when generating extensive diagnostics. +// +@interface RDar10797980_help +@property (readonly) int x; +@end +@interface RDar10797980 : NSObject { + RDar10797980_help *y; +} +- (void) test; +@end +@implementation RDar10797980 +- (void) test { + if (y.x == 1) { + int *p = 0; + *p = 0xDEADBEEF; // expected-warning {{deference}} + } +} + +// The original source for the above Radar contains another problem: +// if the end-of-path node is an implicit statement, it may not have a valid +// source location. +- (void)test2 { + if (bar_cond_assign()) { + id foo = [[RDar10797980 alloc] init]; // leak + } + (void)y; // first statement after the 'if' is an implicit 'self' DeclRefExpr +} + +@end + +void variousLoops(id input) { + extern int a(); + extern int b(); + extern int c(); + + extern int work(); + + while (a()) { + work(); + work(); + work(); + *(volatile int *)0 = 1; + } + + int first = 1; + do { + work(); + work(); + work(); + if (!first) + *(volatile int *)0 = 1; + first = 0; + } while (a()); + + for (int i = 0; i != b(); ++i) { + work(); + *(volatile int *)0 = 1; + } + + for (id x in input) { + work(); + work(); + work(); + (void)x; + *(volatile int *)0 = 1; + } + + int z[] = {1,2}; + for (int y : z) { + work(); + work(); + work(); + (void)y; + } + + int empty[] = {}; + for (int y : empty) { + work(); + work(); + work(); + (void)y; + } + + for (int i = 0; ; ++i) { + work(); + if (i == b()) + break; + } + + int i; + for (i = 0; i != b(); ++i) { + work(); + *(volatile int *)0 = 1; + } + + for (; i != b(); ++i) { + work(); + *(volatile int *)0 = 1; + } + + for (; i != b(); ) { + work(); + if (i == b()) + break; + *(volatile int *)0 = 1; + } + + for (;;) { + work(); + if (i == b()) + break; + } + + *(volatile int *)0 = 1; +} + +void *malloc(unsigned long); +void *realloc(void *, unsigned long); +void free(void *); + +void reallocDiagnostics() { + char * buf = (char*)malloc(100); + char * tmp; + tmp = (char*)realloc(buf, 0x1000000); + if (!tmp) { + return;// expected-warning {{leak}} + } + buf = tmp; + free(buf); +} + +template +class unique_ptr { + T *ptr; +public: + explicit unique_ptr(T *p) : ptr(p) {} + ~unique_ptr() { delete ptr; } +}; + +void test() { + int i = 0; + ++i; + + unique_ptr p(new int[4]); + { + ++i; + } +} + +void longLines() { + id foo = [[NSObject alloc] init]; // leak + id bar = + [foo retain]; + [bar release]; + id baz = [foo + retain]; + [baz release]; + // This next line is intentionally longer than 80 characters. + id garply = [foo retain]; + [garply release]; +} + +#define POINTER(T) T* +POINTER(void) testMacroInFunctionDecl(void *q) { + int *p = 0; + *p = 1; + return q; +} + +namespace rdar14960554 { + class Foo { + int a = 1; + int b = 2; + int c = 3; + + Foo() : + a(0), + c(3) { + // Check that we don't have an edge to the in-class initializer for 'b'. + if (b == 2) + *(volatile int *)0 = 1; + } + }; +} + +// CHECK: diagnostics +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line52 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line52 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line52 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line52 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line52 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_null_init +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line57 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line57 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line58 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line58 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line58 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line58 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line58 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line58 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line58 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_null_assign +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line59 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line63 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line63 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line64 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line64 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line64 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line64 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line64 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line64 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line64 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line65 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line65 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line65 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line65 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line65 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'q' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'q' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line65 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line65 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line66 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line66 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line66 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line66 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line66 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line66 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line66 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line66 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line66 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'q') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'q') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'q') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_null_assign_transitive +// CHECK-NEXT: issue_hash4 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line66 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_null_cond +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line71 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'q' is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'q' is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line77 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_null_cond_transitive +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line83 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line83 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line84 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line84 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line84 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line84 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line84 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Null pointer value stored to 'x.p' +// CHECK-NEXT: message +// CHECK-NEXT: Null pointer value stored to 'x.p' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line84 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line84 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line85 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line85 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line85 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line85 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line85 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line85 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line85 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line85 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line85 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from field 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from field 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from field 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_null_field +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line85 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line90 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line90 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line90 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line90 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line90 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line90 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line90 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'a' is not equal to 0 +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'a' is not equal to 0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line90 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line90 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line93 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line93 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line93 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line93 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line93 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line93 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line93 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line93 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line93 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'b' is equal to 0 +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'b' is equal to 0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line93 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line93 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line96 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line96 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line96 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line96 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line96 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line96 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line96 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line97 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line97 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line97 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line97 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line97 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line97 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line97 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line97 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line97 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_assumptions +// CHECK-NEXT: issue_hash8 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line97 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line102 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line102 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Value assigned to 'p' +// CHECK-NEXT: message +// CHECK-NEXT: Value assigned to 'p' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col29 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming pointer value is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming pointer value is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line103 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line105 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line105 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line105 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line105 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line105 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line105 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line105 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line105 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line105 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_cond_assign +// CHECK-NEXT: issue_hash4 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line105 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line118 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line118 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line119 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line119 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line119 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line119 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line119 +// CHECK-NEXT: col82 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Call to function 'CFNumberCreate' returns a Core Foundation object with a +1 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Call to function 'CFNumberCreate' returns a Core Foundation object with a +1 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line119 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line119 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line120 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line120 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line120 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line120 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line120 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line120 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line120 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line120 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line120 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'x' is 0 +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'x' is 0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line120 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line120 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line122 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line122 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line122 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line122 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line123 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line123 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line123 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object leaked: object allocated and stored into 'value' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: message +// CHECK-NEXT: Object leaked: object allocated and stored into 'value' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionPotential leak of an object stored into 'value' +// CHECK-NEXT: categoryMemory (Core Foundation/Objective-C) +// CHECK-NEXT: typeLeak +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextrdar8331641 +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line123 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line130 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line130 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line131 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line131 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line131 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line131 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line131 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line131 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line131 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line132 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line132 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line132 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line132 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line132 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line132 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line132 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line132 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line132 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_objc_fast_enumeration +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line132 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line140 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line140 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line140 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Value stored to 'x' is never read +// CHECK-NEXT: message +// CHECK-NEXT: Value stored to 'x' is never read +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionValue stored to 'x' is never read +// CHECK-NEXT: categoryDead store +// CHECK-NEXT: typeDead increment +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_objc_fast_enumeration_2 +// CHECK-NEXT: issue_hash5 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line140 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line136 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line136 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line136 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'x' declared without an initial value +// CHECK-NEXT: message +// CHECK-NEXT: 'x' declared without an initial value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line136 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line136 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line137 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line137 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line137 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line137 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line137 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body skipped when collection is empty +// CHECK-NEXT: message +// CHECK-NEXT: Loop body skipped when collection is empty +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line137 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line137 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line140 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line140 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line140 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line140 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line140 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line140 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line140 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line140 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line140 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage +// CHECK-NEXT: message +// CHECK-NEXT: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionThe left expression of the compound assignment is an uninitialized value. The computed value will also be garbage +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeAssigned value is garbage or undefined +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_objc_fast_enumeration_2 +// CHECK-NEXT: issue_hash5 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line140 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line150 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line150 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line150 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line150 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line147 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line147 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line147 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line147 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line147 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line147 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line147 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line148 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line148 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line148 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line148 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line148 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line148 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line148 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line148 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line148 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextrdar12280665 +// CHECK-NEXT: issue_hash4 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line148 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line157 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line157 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line158 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line158 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line158 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line158 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line158 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line158 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line158 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'i' is >= 'x' +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'i' is >= 'x' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextradar12322528_for +// CHECK-NEXT: issue_hash6 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line166 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line166 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line166 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line166 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line166 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line168 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line168 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line168 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line168 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line168 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line168 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line168 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line168 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line168 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'i' is >= 'x' +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'i' is >= 'x' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line168 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line168 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line168 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line168 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line168 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line172 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line172 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line172 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line172 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line172 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line172 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line172 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line172 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line172 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextradar12322528_while +// CHECK-NEXT: issue_hash7 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line172 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line176 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line176 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line176 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line176 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line176 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line178 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line178 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line178 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line178 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line179 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line179 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line179 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line179 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line185 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line185 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line185 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line185 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line178 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line178 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line178 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line178 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line181 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line181 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line181 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line181 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line183 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line183 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line183 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line183 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line186 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line186 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line186 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line186 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line186 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line186 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line186 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line186 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line186 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextradar12322528_foo_2 +// CHECK-NEXT: issue_hash11 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line186 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line190 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line190 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col40 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col40 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col40 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col40 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col37 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col40 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col40 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col40 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col40 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line191 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line192 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line192 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line192 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line192 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line192 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line192 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line192 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line192 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line192 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_loop_diagnostics +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line192 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line196 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line196 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line200 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line200 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line200 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line200 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line202 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line202 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line202 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line202 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line204 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line204 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line204 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line204 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line200 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line200 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line200 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line200 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line202 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line202 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line202 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line202 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line202 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line202 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line202 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line204 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line204 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line204 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line204 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line198 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line206 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line206 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line206 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line206 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line206 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line206 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line206 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line206 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line206 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_loop_diagnostics_2 +// CHECK-NEXT: issue_hash11 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line206 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line210 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line210 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line216 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line216 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line216 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line216 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line217 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line217 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line217 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line217 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line218 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line218 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line218 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line218 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line216 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line216 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line216 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line216 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line217 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line217 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line217 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line217 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line217 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line217 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line217 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line218 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line218 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line218 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line218 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line219 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line219 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line219 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line219 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line219 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line219 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line219 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line219 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line219 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_loop_diagnostics_3 +// CHECK-NEXT: issue_hash10 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line219 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line223 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line223 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line225 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line225 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line225 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line225 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line229 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line229 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line229 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line229 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line232 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line232 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line232 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line232 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line227 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line227 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line227 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line227 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line227 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line227 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line227 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line229 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line229 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line229 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line229 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line232 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line232 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line232 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line232 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line234 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line234 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line234 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line234 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line234 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line234 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line234 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line234 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line234 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_do_while +// CHECK-NEXT: issue_hash12 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line234 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line239 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line239 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line239 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line239 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line239 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line240 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line240 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line240 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line240 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line240 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line240 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line240 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line240 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line240 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line240 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line240 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line240 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line241 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line241 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line241 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line241 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line241 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line241 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line241 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line241 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line241 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_logical_and +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line241 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line246 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line246 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line246 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line246 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line246 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_logical_or +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line254 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line254 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line254 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line254 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line254 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_logical_or_call +// CHECK-NEXT: issue_hash4 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line264 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line264 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line264 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line264 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line264 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line264 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line264 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line264 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line264 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_nested_logicals +// CHECK-NEXT: issue_hash4 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line264 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col18 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col18 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col18 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line267 +// CHECK-NEXT: col18 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line268 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line268 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line268 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line268 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line268 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line268 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line268 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line268 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line268 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_nested_logicals +// CHECK-NEXT: issue_hash8 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line268 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line274 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line274 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line274 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line274 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line274 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col30 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col30 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col31 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col31 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col36 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col36 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col36 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col36 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col46 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col46 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col46 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col46 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col51 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col51 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col51 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col51 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col41 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col44 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col41 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col44 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line276 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line278 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line278 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line278 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line278 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line278 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line278 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line278 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line278 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line278 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_deeply_nested_logicals +// CHECK-NEXT: issue_hash6 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line278 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'x' is not equal to 0 +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'x' is not equal to 0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line283 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line285 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line287 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line287 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line287 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line287 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line287 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line287 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line287 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line287 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line287 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_ternary +// CHECK-NEXT: issue_hash5 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line287 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line291 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line291 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line291 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line291 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line291 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line291 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line291 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'y' is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'y' is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line291 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line291 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line294 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line294 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line294 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line294 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line297 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line297 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line297 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line297 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line297 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line297 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line297 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line298 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line298 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line298 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line298 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line298 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line298 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line298 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line298 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line298 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestUseless +// CHECK-NEXT: issue_hash8 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line298 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line310 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line310 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line310 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line310 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line310 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line310 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line310 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'x' is nil +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'x' is nil +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line310 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line310 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line312 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line312 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line312 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line312 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line312 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line312 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line312 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line312 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line312 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'returnsPointer' not called because the receiver is nil +// CHECK-NEXT: message +// CHECK-NEXT: 'returnsPointer' not called because the receiver is nil +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line312 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line312 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line312 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestFoo +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line312 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line320 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line320 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line320 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'x' initialized to nil +// CHECK-NEXT: message +// CHECK-NEXT: 'x' initialized to nil +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line320 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line320 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line321 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line321 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line321 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line321 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line321 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'getPointer' not called because the receiver is nil +// CHECK-NEXT: message +// CHECK-NEXT: 'getPointer' not called because the receiver is nil +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line321 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line321 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line321 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line321 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line321 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line321 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line321 +// CHECK-NEXT: col21 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest1_IPA_X +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line321 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line337 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line337 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line337 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line337 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line337 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line337 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line337 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'y' is nil +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'y' is nil +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line337 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line337 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'opaque' not called because the receiver is nil +// CHECK-NEXT: message +// CHECK-NEXT: 'opaque' not called because the receiver is nil +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'getX' not called because the receiver is nil +// CHECK-NEXT: message +// CHECK-NEXT: 'getX' not called because the receiver is nil +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'x' initialized to nil +// CHECK-NEXT: message +// CHECK-NEXT: 'x' initialized to nil +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line340 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line341 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line341 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line341 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line341 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line341 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'getPointer' not called because the receiver is nil +// CHECK-NEXT: message +// CHECK-NEXT: 'getPointer' not called because the receiver is nil +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line341 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line341 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line341 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line341 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line341 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line341 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line341 +// CHECK-NEXT: col21 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_IPA_Y +// CHECK-NEXT: issue_hash5 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line341 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line352 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line352 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line354 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line354 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line354 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line354 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line354 +// CHECK-NEXT: col25 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling 'causeDivByZeroInMain' +// CHECK-NEXT: message +// CHECK-NEXT: Calling 'causeDivByZeroInMain' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line345 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'mainPlusMain' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'mainPlusMain' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line345 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line345 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line346 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line346 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line346 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line346 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line346 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'm' initialized to 0 +// CHECK-NEXT: message +// CHECK-NEXT: 'm' initialized to 0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line346 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line346 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line347 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line347 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line347 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line347 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line347 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDivision by zero +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDivision by zero +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextcauseDivByZeroInMain +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line347 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line383 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line383 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line383 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line383 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line383 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line384 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line384 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line384 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line384 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line384 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line384 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line384 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line384 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line384 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from ivar 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from ivar 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from ivar 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindObjective-C method +// CHECK-NEXT: issue_contexttest +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line384 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line392 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line392 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line392 +// CHECK-NEXT: col25 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 's.i' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 's.i' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line392 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line392 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line394 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line394 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line394 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line394 +// CHECK-NEXT: col18 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line394 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Null pointer passed as an argument to a 'nonnull' parameter +// CHECK-NEXT: message +// CHECK-NEXT: Null pointer passed as an argument to a 'nonnull' parameter +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionNull pointer passed as an argument to a 'nonnull' parameter +// CHECK-NEXT: categoryAPI +// CHECK-NEXT: typeArgument with 'nonnull' attribute passed null +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextRDar13295437 +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line394 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line400 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line400 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line400 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line400 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line400 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line400 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line400 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'coin' is not equal to 0 +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'coin' is not equal to 0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line400 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line400 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line401 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line401 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line401 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line401 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line404 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line404 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line404 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line404 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line404 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line404 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line404 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line404 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line404 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestCast +// CHECK-NEXT: issue_hash5 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line404 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line420 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line420 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line421 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line421 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line421 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line421 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line421 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line421 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line421 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line422 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line422 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line422 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line422 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line422 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line422 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line422 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line422 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line422 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindObjective-C method +// CHECK-NEXT: issue_contexttest +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line422 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line431 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line431 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line431 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line431 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line431 +// CHECK-NEXT: col40 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Value stored to 'foo' during its initialization is never read +// CHECK-NEXT: message +// CHECK-NEXT: Value stored to 'foo' during its initialization is never read +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionValue stored to 'foo' during its initialization is never read +// CHECK-NEXT: categoryDead store +// CHECK-NEXT: typeDead initialization +// CHECK-NEXT: issue_context_kindObjective-C method +// CHECK-NEXT: issue_contexttest2 +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line431 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line430 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line430 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line431 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line431 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line431 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line431 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line431 +// CHECK-NEXT: col40 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Method returns an Objective-C object with a +1 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Method returns an Objective-C object with a +1 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line431 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line431 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line433 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line433 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line433 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object leaked: object allocated and stored into 'foo' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: message +// CHECK-NEXT: Object leaked: object allocated and stored into 'foo' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionPotential leak of an object stored into 'foo' +// CHECK-NEXT: categoryMemory (Core Foundation/Objective-C) +// CHECK-NEXT: typeLeak +// CHECK-NEXT: issue_context_kindObjective-C method +// CHECK-NEXT: issue_contexttest2 +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line433 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line446 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line446 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line446 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line446 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line449 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line449 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line449 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line449 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line449 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line449 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line449 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line449 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line449 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextvariousLoops +// CHECK-NEXT: issue_hash11 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line449 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line453 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line453 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line453 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line453 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line453 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line453 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line453 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line458 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line458 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line458 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line458 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line458 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line458 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line458 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line458 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line458 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextvariousLoops +// CHECK-NEXT: issue_hash20 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line458 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line463 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line463 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line463 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line463 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line464 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line464 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line464 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line464 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line464 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line464 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line464 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line464 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line464 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextvariousLoops +// CHECK-NEXT: issue_hash26 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line464 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line468 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line468 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line468 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line468 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line472 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line472 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line472 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line472 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line472 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line472 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line472 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line472 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line472 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextvariousLoops +// CHECK-NEXT: issue_hash34 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line472 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body skipped when collection is empty +// CHECK-NEXT: message +// CHECK-NEXT: Loop body skipped when collection is empty +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body skipped when range is empty +// CHECK-NEXT: message +// CHECK-NEXT: Loop body skipped when range is empty +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line499 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line499 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line499 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line499 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line500 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line500 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line500 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line500 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line500 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line500 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line500 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line500 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line500 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextvariousLoops +// CHECK-NEXT: issue_hash62 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line500 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body skipped when collection is empty +// CHECK-NEXT: message +// CHECK-NEXT: Loop body skipped when collection is empty +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body skipped when range is empty +// CHECK-NEXT: message +// CHECK-NEXT: Loop body skipped when range is empty +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line504 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line504 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line504 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line504 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line505 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line505 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line505 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line505 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line505 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line505 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line505 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line505 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line505 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextvariousLoops +// CHECK-NEXT: issue_hash67 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line505 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body skipped when collection is empty +// CHECK-NEXT: message +// CHECK-NEXT: Loop body skipped when collection is empty +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body skipped when range is empty +// CHECK-NEXT: message +// CHECK-NEXT: Loop body skipped when range is empty +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line508 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line508 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line508 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line508 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line508 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line508 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line508 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line509 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line509 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line509 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line509 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line510 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line510 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line510 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line510 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line512 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line512 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line512 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line512 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line512 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line512 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line512 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line512 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line512 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextvariousLoops +// CHECK-NEXT: issue_hash74 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line512 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line445 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line452 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line454 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line457 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line459 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line460 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line462 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body skipped when collection is empty +// CHECK-NEXT: message +// CHECK-NEXT: Loop body skipped when collection is empty +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line467 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line475 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line477 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line480 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line481 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: message +// CHECK-NEXT: Looping back to the head of the loop +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line476 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body skipped when range is empty +// CHECK-NEXT: message +// CHECK-NEXT: Loop body skipped when range is empty +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line484 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line491 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line492 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line493 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line494 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line497 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line498 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line503 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line508 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line508 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line508 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line508 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line508 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: message +// CHECK-NEXT: Loop body executed 0 times +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line508 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line508 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line515 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line515 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line515 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line515 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line515 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: message +// CHECK-NEXT: Entering loop body +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line515 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line515 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line516 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line516 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line516 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line516 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line517 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line517 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line517 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line517 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line518 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line518 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line518 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line518 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line521 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line521 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line521 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line521 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line521 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line521 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line521 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line521 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line521 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextvariousLoops +// CHECK-NEXT: issue_hash83 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line521 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line529 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line529 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line529 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Memory is allocated +// CHECK-NEXT: message +// CHECK-NEXT: Memory is allocated +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line529 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line529 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line531 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line531 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line531 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line531 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line531 +// CHECK-NEXT: col38 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Attempt to reallocate memory +// CHECK-NEXT: message +// CHECK-NEXT: Attempt to reallocate memory +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line531 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line531 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line532 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line532 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line532 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line532 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line532 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line532 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line532 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line532 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line532 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'tmp' is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'tmp' is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line532 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line532 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line532 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Reallocation failed +// CHECK-NEXT: message +// CHECK-NEXT: Reallocation failed +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line532 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line532 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line533 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line533 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line533 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Potential leak of memory pointed to by 'buf' +// CHECK-NEXT: message +// CHECK-NEXT: Potential leak of memory pointed to by 'buf' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionPotential leak of memory pointed to by 'buf' +// CHECK-NEXT: categoryMemory Error +// CHECK-NEXT: typeMemory leak +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextreallocDiagnostics +// CHECK-NEXT: issue_hash1 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line533 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line548 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line548 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line551 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line551 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line551 +// CHECK-NEXT: col21 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line551 +// CHECK-NEXT: col21 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line551 +// CHECK-NEXT: col30 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Memory is allocated +// CHECK-NEXT: message +// CHECK-NEXT: Memory is allocated +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line551 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line551 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line553 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line553 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line553 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line553 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line555 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line555 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line555 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling '~unique_ptr' +// CHECK-NEXT: message +// CHECK-NEXT: Calling '~unique_ptr' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line544 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'test' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'test' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line544 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line544 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line544 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line544 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line544 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line544 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line544 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Memory allocated by 'new[]' should be deallocated by 'delete[]', not 'delete' +// CHECK-NEXT: message +// CHECK-NEXT: Memory allocated by 'new[]' should be deallocated by 'delete[]', not 'delete' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionMemory allocated by 'new[]' should be deallocated by 'delete[]', not 'delete' +// CHECK-NEXT: categoryMemory Error +// CHECK-NEXT: typeBad deallocator +// CHECK-NEXT: issue_hash0 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line544 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line558 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line558 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line558 +// CHECK-NEXT: col34 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Method returns an Objective-C object with a +1 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Method returns an Objective-C object with a +1 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line558 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line558 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line559 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line559 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line559 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line559 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line560 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line560 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line560 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line560 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line560 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line560 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line560 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Reference count incremented. The object now has a +2 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Reference count incremented. The object now has a +2 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line560 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line560 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line561 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line561 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line561 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line561 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line561 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line561 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line561 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Reference count decremented. The object now has a +1 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Reference count decremented. The object now has a +1 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line561 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line561 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line563 +// CHECK-NEXT: col21 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Reference count incremented. The object now has a +2 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Reference count incremented. The object now has a +2 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line562 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line564 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line564 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line564 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line564 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line564 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line564 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line564 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Reference count decremented. The object now has a +1 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Reference count decremented. The object now has a +1 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line564 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line564 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col87 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col18 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Reference count incremented. The object now has a +2 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Reference count incremented. The object now has a +2 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line566 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line567 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line567 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line567 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line567 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line567 +// CHECK-NEXT: col18 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line567 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line567 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Reference count decremented. The object now has a +1 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Reference count decremented. The object now has a +1 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line567 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line567 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line568 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line568 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line568 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object leaked: object allocated and stored into 'foo' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: message +// CHECK-NEXT: Object leaked: object allocated and stored into 'foo' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionPotential leak of an object stored into 'foo' +// CHECK-NEXT: categoryMemory (Core Foundation/Objective-C) +// CHECK-NEXT: typeLeak +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextlongLines +// CHECK-NEXT: issue_hash1 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line568 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line572 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line572 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line572 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line572 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line572 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line573 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line573 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line573 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line573 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line573 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line573 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line573 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line573 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line573 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestMacroInFunctionDecl +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line573 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line584 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line584 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line585 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line585 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line585 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line585 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line587 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line587 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line587 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line587 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line588 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line588 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line588 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line588 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line588 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line588 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line588 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line588 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line588 +// CHECK-NEXT: col30 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line588 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: diff --git a/test/Analysis/func.c b/test/Analysis/func.c index 9abb560e7583..78afb45da696 100644 --- a/test/Analysis/func.c +++ b/test/Analysis/func.c @@ -1,6 +1,7 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core,debug.ExprInspection -analyzer-store=region -verify %s void clang_analyzer_eval(int); +void clang_analyzer_warnIfReached(); void f(void) { void (*p)(void); @@ -25,3 +26,16 @@ void f3(void (*f)(void), void (*g)(void)) { (*g)(); clang_analyzer_eval(!g); // expected-warning{{FALSE}} } + +void nullFunctionPointerConstant() { + void (*f)(void) = 0; + f(); // expected-warning{{Called function pointer is null}} + clang_analyzer_warnIfReached(); // no-warning +} + +void nullFunctionPointerConstraint(void (*f)(void)) { + if (f) + return; + f(); // expected-warning{{Called function pointer is null}} + clang_analyzer_warnIfReached(); // no-warning +} diff --git a/test/Analysis/html-diags-multifile.c b/test/Analysis/html-diags-multifile.c index 6e89faefc5bd..bb769283bba9 100644 --- a/test/Analysis/html-diags-multifile.c +++ b/test/Analysis/html-diags-multifile.c @@ -1,6 +1,6 @@ // RUN: mkdir -p %t.dir -// RUN: %clang_cc1 -analyze -analyzer-output=html -analyzer-checker=core -o %t.dir -// RUN: ls %t.dir | grep report | count 0 +// RUN: %clang_cc1 -analyze -analyzer-output=html -analyzer-checker=core -o %t.dir %s +// RUN: ls %t.dir | not grep report // RUN: rm -fR %t.dir // This tests that we do not currently emit HTML diagnostics for reports that diff --git a/test/Analysis/html-diags.c b/test/Analysis/html-diags.c index 1ec4d18884ad..1b01783d5d24 100644 --- a/test/Analysis/html-diags.c +++ b/test/Analysis/html-diags.c @@ -1,6 +1,14 @@ // RUN: rm -fR %T/dir // RUN: mkdir %T/dir // RUN: %clang_cc1 -analyze -analyzer-output=html -analyzer-checker=core -o %T/dir %s +// RUN: ls %T/dir | grep report + +// PR16547: Test relative paths +// RUN: cd %T/dir +// RUN: %clang_cc1 -analyze -analyzer-output=html -analyzer-checker=core -o testrelative %s +// RUN: ls %T/dir/testrelative | grep report + +// REQUIRES: shell // Currently this test mainly checks that the HTML diagnostics doesn't crash // when handling macros will calls with macros. We should actually validate diff --git a/test/Analysis/identical-expressions.cpp b/test/Analysis/identical-expressions.cpp new file mode 100644 index 000000000000..50f341d39335 --- /dev/null +++ b/test/Analysis/identical-expressions.cpp @@ -0,0 +1,942 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core.IdenticalExpr -verify %s + +/* Only one expected warning per function allowed at the very end. */ + +/* '!=' operator*/ + +/* '!=' with float */ +int checkNotEqualFloatLiteralCompare1(void) { + return (5.14F != 5.14F); // no warning +} + +int checkNotEqualFloatLiteralCompare2(void) { + return (6.14F != 7.14F); // no warning +} + +int checkNotEqualFloatDeclCompare1(void) { + float f = 7.1F; + float g = 7.1F; + return (f != g); // no warning +} + +int checkNotEqualFloatDeclCompare12(void) { + float f = 7.1F; + return (f != f); // no warning +} + +int checkNotEqualFloatDeclCompare3(void) { + float f = 7.1F; + return (f != 7.1F); // no warning +} + +int checkNotEqualFloatDeclCompare4(void) { + float f = 7.1F; + return (7.1F != f); // no warning +} + +int checkNotEqualFloatDeclCompare5(void) { + float f = 7.1F; + int t = 7; + return (t != f); // no warning +} + +int checkNotEqualFloatDeclCompare6(void) { + float f = 7.1F; + int t = 7; + return (f != t); // no warning +} + + + +int checkNotEqualCastFloatDeclCompare11(void) { + float f = 7.1F; + return ((int)f != (int)f); // expected-warning {{comparison of identical expressions always evaluates to false}} +} +int checkNotEqualCastFloatDeclCompare12(void) { + float f = 7.1F; + return ((char)f != (int)f); // no warning +} +int checkNotEqualBinaryOpFloatCompare1(void) { + int res; + float f= 3.14F; + res = (f + 3.14F != f + 3.14F); // no warning + return (0); +} +int checkNotEqualBinaryOpFloatCompare2(void) { + float f = 7.1F; + float g = 7.1F; + return (f + 3.14F != g + 3.14F); // no warning +} +int checkNotEqualBinaryOpFloatCompare3(void) { + int res; + float f= 3.14F; + res = ((int)f + 3.14F != (int)f + 3.14F); // no warning + return (0); +} +int checkNotEqualBinaryOpFloatCompare4(void) { + int res; + float f= 3.14F; + res = ((int)f + 3.14F != (char)f + 3.14F); // no warning + return (0); +} + +int checkNotEqualNestedBinaryOpFloatCompare1(void) { + int res; + int t= 1; + int u= 2; + float f= 3.14F; + res = (((int)f + (3.14F - u)*t) != ((int)f + (3.14F - u)*t)); // no warning + return (0); +} + +int checkNotEqualNestedBinaryOpFloatCompare2(void) { + int res; + int t= 1; + int u= 2; + float f= 3.14F; + res = (((int)f + (u - 3.14F)*t) != ((int)f + (3.14F - u)*t)); // no warning + return (0); +} + +int checkNotEqualNestedBinaryOpFloatCompare3(void) { + int res; + int t= 1; + int u= 2; + float f= 3.14F; + res = (((int)f + (u - 3.14F)*t) != ((int)f + (3.14F - u)*(f + t != f + t))); // no warning + return (0); +} + + + + +/* end '!=' with float*/ + +/* '!=' with int*/ + +int checkNotEqualIntLiteralCompare1(void) { + return (5 != 5); // expected-warning {{comparison of identical expressions always evaluates to false}} +} + +int checkNotEqualIntLiteralCompare2(void) { + return (6 != 7); // no warning +} + +int checkNotEqualIntDeclCompare1(void) { + int f = 7; + int g = 7; + return (f != g); // no warning +} + +int checkNotEqualIntDeclCompare3(void) { + int f = 7; + return (f != 7); // no warning +} + +int checkNotEqualIntDeclCompare4(void) { + int f = 7; + return (7 != f); // no warning +} + +int checkNotEqualCastIntDeclCompare11(void) { + int f = 7; + return ((int)f != (int)f); // expected-warning {{comparison of identical expressions always evaluates to false}} +} +int checkNotEqualCastIntDeclCompare12(void) { + int f = 7; + return ((char)f != (int)f); // no warning +} +int checkNotEqualBinaryOpIntCompare1(void) { + int res; + int t= 1; + int u= 2; + int f= 4; + res = (f + 4 != f + 4); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} +int checkNotEqualBinaryOpIntCompare2(void) { + int f = 7; + int g = 7; + return (f + 4 != g + 4); // no warning +} + + +int checkNotEqualBinaryOpIntCompare3(void) { + int res; + int t= 1; + int u= 2; + int f= 4; + res = ((int)f + 4 != (int)f + 4); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} +int checkNotEqualBinaryOpIntCompare4(void) { + int res; + int t= 1; + int u= 2; + int f= 4; + res = ((int)f + 4 != (char)f + 4); // no warning + return (0); +} +int checkNotEqualBinaryOpIntCompare5(void) { + int res; + int t= 1; + int u= 2; + res = (u + t != u + t); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} + +int checkNotEqualNestedBinaryOpIntCompare1(void) { + int res; + int t= 1; + int u= 2; + int f= 3; + res = (((int)f + (3 - u)*t) != ((int)f + (3 - u)*t)); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} + +int checkNotEqualNestedBinaryOpIntCompare2(void) { + int res; + int t= 1; + int u= 2; + int f= 3; + res = (((int)f + (u - 3)*t) != ((int)f + (3 - u)*t)); // no warning + return (0); +} + +int checkNotEqualNestedBinaryOpIntCompare3(void) { + int res; + int t= 1; + int u= 2; + int f= 3; + res = (((int)f + (u - 3)*t) != ((int)f + (3 - u)*(t + 1 != t + 1))); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} + +/* end '!=' int */ + + + +/* '!=' with int pointer */ + +int checkNotEqualIntPointerLiteralCompare1(void) { + int* p = 0; + return (p != 0); // no warning +} + +int checkNotEqualIntPointerLiteralCompare2(void) { + return (6 != 7); // no warning +} + +int checkNotEqualIntPointerDeclCompare1(void) { + int k = 3; + int* f = &k; + int* g = &k; + return (f != g); // no warning +} + +int checkNotEqualCastIntPointerDeclCompare11(void) { + int k = 7; + int* f = &k; + return ((int*)f != (int*)f); // expected-warning {{comparison of identical expressions always evaluates to false}} +} +int checkNotEqualCastIntPointerDeclCompare12(void) { + int k = 7; + int* f = &k; + return ((int*)((char*)f) != (int*)f); // no warning +} +int checkNotEqualBinaryOpIntPointerCompare1(void) { + int k = 7; + int res; + int* f= &k; + res = (f + 4 != f + 4); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} +int checkNotEqualBinaryOpIntPointerCompare2(void) { + int k = 7; + int* f = &k; + int* g = &k; + return (f + 4 != g + 4); // no warning +} + + +int checkNotEqualBinaryOpIntPointerCompare3(void) { + int k = 7; + int res; + int* f= &k; + res = ((int*)f + 4 != (int*)f + 4); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} +int checkNotEqualBinaryOpIntPointerCompare4(void) { + int k = 7; + int res; + int* f= &k; + res = ((int*)f + 4 != (int*)((char*)f) + 4); // no warning + return (0); +} + +int checkNotEqualNestedBinaryOpIntPointerCompare1(void) { + int res; + int k = 7; + int t= 1; + int* u= &k+2; + int* f= &k+3; + res = ((f + (3)*t) != (f + (3)*t)); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} + +int checkNotEqualNestedBinaryOpIntPointerCompare2(void) { + int res; + int k = 7; + int t= 1; + int* u= &k+2; + int* f= &k+3; + res = (((3)*t + f) != (f + (3)*t)); // no warning + return (0); +} +/* end '!=' int* */ + +/* end '!=' */ + + + +/* EQ operator */ + +int checkEqualIntPointerDeclCompare(void) { + int k = 3; + int* f = &k; + int* g = &k; + return (f == g); // no warning +} + +int checkEqualIntPointerDeclCompare0(void) { + int k = 3; + int* f = &k; + return (f+1 == f+1); // expected-warning {{comparison of identical expressions always evaluates to true}} +} + +/* EQ with float*/ + +int checkEqualFloatLiteralCompare1(void) { + return (5.14F == 5.14F); // no warning +} + +int checkEqualFloatLiteralCompare2(void) { + return (6.14F == 7.14F); // no warning +} + +int checkEqualFloatDeclCompare1(void) { + float f = 7.1F; + float g = 7.1F; + return (f == g); // no warning +} + +int checkEqualFloatDeclCompare12(void) { + float f = 7.1F; + return (f == f); // no warning +} + + +int checkEqualFloatDeclCompare3(void) { + float f = 7.1F; + return (f == 7.1F); // no warning +} + +int checkEqualFloatDeclCompare4(void) { + float f = 7.1F; + return (7.1F == f); // no warning +} + +int checkEqualFloatDeclCompare5(void) { + float f = 7.1F; + int t = 7; + return (t == f); // no warning +} + +int checkEqualFloatDeclCompare6(void) { + float f = 7.1F; + int t = 7; + return (f == t); // no warning +} + + + + +int checkEqualCastFloatDeclCompare11(void) { + float f = 7.1F; + return ((int)f == (int)f); // expected-warning {{comparison of identical expressions always evaluates to true}} +} +int checkEqualCastFloatDeclCompare12(void) { + float f = 7.1F; + return ((char)f == (int)f); // no warning +} +int checkEqualBinaryOpFloatCompare1(void) { + int res; + float f= 3.14F; + res = (f + 3.14F == f + 3.14F); // no warning + return (0); +} +int checkEqualBinaryOpFloatCompare2(void) { + float f = 7.1F; + float g = 7.1F; + return (f + 3.14F == g + 3.14F); // no warning +} +int checkEqualBinaryOpFloatCompare3(void) { + int res; + float f= 3.14F; + res = ((int)f + 3.14F == (int)f + 3.14F); // no warning + return (0); +} +int checkEqualBinaryOpFloatCompare4(void) { + int res; + float f= 3.14F; + res = ((int)f + 3.14F == (char)f + 3.14F); // no warning + return (0); +} + +int checkEqualNestedBinaryOpFloatCompare1(void) { + int res; + int t= 1; + int u= 2; + float f= 3.14F; + res = (((int)f + (3.14F - u)*t) == ((int)f + (3.14F - u)*t)); // no warning + return (0); +} + +int checkEqualNestedBinaryOpFloatCompare2(void) { + int res; + int t= 1; + int u= 2; + float f= 3.14F; + res = (((int)f + (u - 3.14F)*t) == ((int)f + (3.14F - u)*t)); // no warning + return (0); +} + +int checkEqualNestedBinaryOpFloatCompare3(void) { + int res; + int t= 1; + int u= 2; + float f= 3.14F; + res = (((int)f + (u - 3.14F)*t) == ((int)f + (3.14F - u)*(f + t == f + t))); // no warning + return (0); +} + + + + + +/* Equal with int*/ + +int checkEqualIntLiteralCompare1(void) { + return (5 == 5); // expected-warning {{comparison of identical expressions always evaluates to true}} +} + +int checkEqualIntLiteralCompare2(void) { + return (6 == 7); // no warning +} + +int checkEqualIntDeclCompare1(void) { + int f = 7; + int g = 7; + return (f == g); // no warning +} + +int checkEqualCastIntDeclCompare11(void) { + int f = 7; + return ((int)f == (int)f); // expected-warning {{comparison of identical expressions always evaluates to true}} +} +int checkEqualCastIntDeclCompare12(void) { + int f = 7; + return ((char)f == (int)f); // no warning +} + +int checkEqualIntDeclCompare3(void) { + int f = 7; + return (f == 7); // no warning +} + +int checkEqualIntDeclCompare4(void) { + int f = 7; + return (7 == f); // no warning +} + +int checkEqualBinaryOpIntCompare1(void) { + int res; + int t= 1; + int u= 2; + int f= 4; + res = (f + 4 == f + 4); // expected-warning {{comparison of identical expressions always evaluates to true}} + return (0); +} +int checkEqualBinaryOpIntCompare2(void) { + int f = 7; + int g = 7; + return (f + 4 == g + 4); // no warning +} + + +int checkEqualBinaryOpIntCompare3(void) { + int res; + int t= 1; + int u= 2; + int f= 4; + res = ((int)f + 4 == (int)f + 4); // expected-warning {{comparison of identical expressions always evaluates to true}} + return (0); + +} +int checkEqualBinaryOpIntCompare4(void) { + int res; + int t= 1; + int u= 2; + int f= 4; + res = ((int)f + 4 == (char)f + 4); // no warning + return (0); +} +int checkEqualBinaryOpIntCompare5(void) { + int res; + int t= 1; + int u= 2; + res = (u + t == u + t); // expected-warning {{comparison of identical expressions always evaluates to true}} + return (0); +} + +int checkEqualNestedBinaryOpIntCompare1(void) { + int res; + int t= 1; + int u= 2; + int f= 3; + res = (((int)f + (3 - u)*t) == ((int)f + (3 - u)*t)); // expected-warning {{comparison of identical expressions always evaluates to true}} + return (0); +} + +int checkEqualNestedBinaryOpIntCompare2(void) { + int res; + int t= 1; + int u= 2; + int f= 3; + res = (((int)f + (u - 3)*t) == ((int)f + (3 - u)*t)); // no warning + return (0); +} + +int checkEqualNestedBinaryOpIntCompare3(void) { + int res; + int t= 1; + int u= 2; + int f= 3; + res = (((int)f + (u - 3)*t) == ((int)f + (3 - u)*(t + 1 == t + 1))); // expected-warning {{comparison of identical expressions always evaluates to true}} + return (0); +} + + +/* end EQ int */ + +/* end EQ */ + + +/* LT */ + +/* LT with float */ + +int checkLessThanFloatLiteralCompare1(void) { + return (5.14F < 5.14F); // expected-warning {{comparison of identical expressions always evaluates to false}} +} + +int checkLessThanFloatLiteralCompare2(void) { + return (6.14F < 7.14F); // no warning +} + +int checkLessThanFloatDeclCompare1(void) { + float f = 7.1F; + float g = 7.1F; + return (f < g); // no warning +} + +int checkLessThanFloatDeclCompare12(void) { + float f = 7.1F; + return (f < f); // expected-warning {{comparison of identical expressions always evaluates to false}} +} + +int checkLessThanFloatDeclCompare3(void) { + float f = 7.1F; + return (f < 7.1F); // no warning +} + +int checkLessThanFloatDeclCompare4(void) { + float f = 7.1F; + return (7.1F < f); // no warning +} + +int checkLessThanFloatDeclCompare5(void) { + float f = 7.1F; + int t = 7; + return (t < f); // no warning +} + +int checkLessThanFloatDeclCompare6(void) { + float f = 7.1F; + int t = 7; + return (f < t); // no warning +} + + +int checkLessThanCastFloatDeclCompare11(void) { + float f = 7.1F; + return ((int)f < (int)f); // expected-warning {{comparison of identical expressions always evaluates to false}} +} +int checkLessThanCastFloatDeclCompare12(void) { + float f = 7.1F; + return ((char)f < (int)f); // no warning +} +int checkLessThanBinaryOpFloatCompare1(void) { + int res; + float f= 3.14F; + res = (f + 3.14F < f + 3.14F); // no warning + return (0); +} +int checkLessThanBinaryOpFloatCompare2(void) { + float f = 7.1F; + float g = 7.1F; + return (f + 3.14F < g + 3.14F); // no warning +} +int checkLessThanBinaryOpFloatCompare3(void) { + int res; + float f= 3.14F; + res = ((int)f + 3.14F < (int)f + 3.14F); // no warning + return (0); +} +int checkLessThanBinaryOpFloatCompare4(void) { + int res; + float f= 3.14F; + res = ((int)f + 3.14F < (char)f + 3.14F); // no warning + return (0); +} + +int checkLessThanNestedBinaryOpFloatCompare1(void) { + int res; + int t= 1; + int u= 2; + float f= 3.14F; + res = (((int)f + (3.14F - u)*t) < ((int)f + (3.14F - u)*t)); // no warning + return (0); +} + +int checkLessThanNestedBinaryOpFloatCompare2(void) { + int res; + int t= 1; + int u= 2; + float f= 3.14F; + res = (((int)f + (u - 3.14F)*t) < ((int)f + (3.14F - u)*t)); // no warning + return (0); +} + +int checkLessThanNestedBinaryOpFloatCompare3(void) { + int res; + int t= 1; + int u= 2; + float f= 3.14F; + res = (((int)f + (u - 3.14F)*t) < ((int)f + (3.14F - u)*(f + t < f + t))); // no warning + return (0); +} + +/* end LT with float */ + +/* LT with int */ + + +int checkLessThanIntLiteralCompare1(void) { + return (5 < 5); // expected-warning {{comparison of identical expressions always evaluates to false}} +} + +int checkLessThanIntLiteralCompare2(void) { + return (6 < 7); // no warning +} + +int checkLessThanIntDeclCompare1(void) { + int f = 7; + int g = 7; + return (f < g); // no warning +} + +int checkLessThanIntDeclCompare3(void) { + int f = 7; + return (f < 7); // no warning +} + +int checkLessThanIntDeclCompare4(void) { + int f = 7; + return (7 < f); // no warning +} + +int checkLessThanIntDeclCompare5(void) { + int f = 7; + int t = 7; + return (t < f); // no warning +} + +int checkLessThanIntDeclCompare6(void) { + int f = 7; + int t = 7; + return (f < t); // no warning +} + +int checkLessThanCastIntDeclCompare11(void) { + int f = 7; + return ((int)f < (int)f); // expected-warning {{comparison of identical expressions always evaluates to false}} +} +int checkLessThanCastIntDeclCompare12(void) { + int f = 7; + return ((char)f < (int)f); // no warning +} +int checkLessThanBinaryOpIntCompare1(void) { + int res; + int f= 3; + res = (f + 3 < f + 3); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} +int checkLessThanBinaryOpIntCompare2(void) { + int f = 7; + int g = 7; + return (f + 3 < g + 3); // no warning +} +int checkLessThanBinaryOpIntCompare3(void) { + int res; + int f= 3; + res = ((int)f + 3 < (int)f + 3); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} +int checkLessThanBinaryOpIntCompare4(void) { + int res; + int f= 3; + res = ((int)f + 3 < (char)f + 3); // no warning + return (0); +} + +int checkLessThanNestedBinaryOpIntCompare1(void) { + int res; + int t= 1; + int u= 2; + int f= 3; + res = (((int)f + (3 - u)*t) < ((int)f + (3 - u)*t)); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} + +int checkLessThanNestedBinaryOpIntCompare2(void) { + int res; + int t= 1; + int u= 2; + int f= 3; + res = (((int)f + (u - 3)*t) < ((int)f + (3 - u)*t)); // no warning + return (0); +} + +int checkLessThanNestedBinaryOpIntCompare3(void) { + int res; + int t= 1; + int u= 2; + int f= 3; + res = (((int)f + (u - 3)*t) < ((int)f + (3 - u)*(t + u < t + u))); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} + +/* end LT with int */ + +/* end LT */ + + +/* GT */ + +/* GT with float */ + +int checkGreaterThanFloatLiteralCompare1(void) { + return (5.14F > 5.14F); // expected-warning {{comparison of identical expressions always evaluates to false}} +} + +int checkGreaterThanFloatLiteralCompare2(void) { + return (6.14F > 7.14F); // no warning +} + +int checkGreaterThanFloatDeclCompare1(void) { + float f = 7.1F; + float g = 7.1F; + + return (f > g); // no warning +} + +int checkGreaterThanFloatDeclCompare12(void) { + float f = 7.1F; + return (f > f); // expected-warning {{comparison of identical expressions always evaluates to false}} +} + + +int checkGreaterThanFloatDeclCompare3(void) { + float f = 7.1F; + return (f > 7.1F); // no warning +} + +int checkGreaterThanFloatDeclCompare4(void) { + float f = 7.1F; + return (7.1F > f); // no warning +} + +int checkGreaterThanFloatDeclCompare5(void) { + float f = 7.1F; + int t = 7; + return (t > f); // no warning +} + +int checkGreaterThanFloatDeclCompare6(void) { + float f = 7.1F; + int t = 7; + return (f > t); // no warning +} + +int checkGreaterThanCastFloatDeclCompare11(void) { + float f = 7.1F; + return ((int)f > (int)f); // expected-warning {{comparison of identical expressions always evaluates to false}} +} +int checkGreaterThanCastFloatDeclCompare12(void) { + float f = 7.1F; + return ((char)f > (int)f); // no warning +} +int checkGreaterThanBinaryOpFloatCompare1(void) { + int res; + float f= 3.14F; + res = (f + 3.14F > f + 3.14F); // no warning + return (0); +} +int checkGreaterThanBinaryOpFloatCompare2(void) { + float f = 7.1F; + float g = 7.1F; + return (f + 3.14F > g + 3.14F); // no warning +} +int checkGreaterThanBinaryOpFloatCompare3(void) { + int res; + float f= 3.14F; + res = ((int)f + 3.14F > (int)f + 3.14F); // no warning + return (0); +} +int checkGreaterThanBinaryOpFloatCompare4(void) { + int res; + float f= 3.14F; + res = ((int)f + 3.14F > (char)f + 3.14F); // no warning + return (0); +} + +int checkGreaterThanNestedBinaryOpFloatCompare1(void) { + int res; + int t= 1; + int u= 2; + float f= 3.14F; + res = (((int)f + (3.14F - u)*t) > ((int)f + (3.14F - u)*t)); // no warning + return (0); +} + +int checkGreaterThanNestedBinaryOpFloatCompare2(void) { + int res; + int t= 1; + int u= 2; + float f= 3.14F; + res = (((int)f + (u - 3.14F)*t) > ((int)f + (3.14F - u)*t)); // no warning + return (0); +} + +int checkGreaterThanNestedBinaryOpFloatCompare3(void) { + int res; + int t= 1; + int u= 2; + float f= 3.14F; + res = (((int)f + (u - 3.14F)*t) > ((int)f + (3.14F - u)*(f + t > f + t))); // no warning + return (0); +} + +/* end GT with float */ + +/* GT with int */ + + +int checkGreaterThanIntLiteralCompare1(void) { + return (5 > 5); // expected-warning {{comparison of identical expressions always evaluates to false}} +} + +int checkGreaterThanIntLiteralCompare2(void) { + return (6 > 7); // no warning +} + +int checkGreaterThanIntDeclCompare1(void) { + int f = 7; + int g = 7; + + return (f > g); // no warning +} + +int checkGreaterThanIntDeclCompare3(void) { + int f = 7; + return (f > 7); // no warning +} + +int checkGreaterThanIntDeclCompare4(void) { + int f = 7; + return (7 > f); // no warning +} + +int checkGreaterThanCastIntDeclCompare11(void) { + int f = 7; + return ((int)f > (int)f); // expected-warning {{comparison of identical expressions always evaluates to false}} +} +int checkGreaterThanCastIntDeclCompare12(void) { + int f = 7; + return ((char)f > (int)f); // no warning +} +int checkGreaterThanBinaryOpIntCompare1(void) { + int res; + int f= 3; + res = (f + 3 > f + 3); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} +int checkGreaterThanBinaryOpIntCompare2(void) { + int f = 7; + int g = 7; + return (f + 3 > g + 3); // no warning +} +int checkGreaterThanBinaryOpIntCompare3(void) { + int res; + int f= 3; + res = ((int)f + 3 > (int)f + 3); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} +int checkGreaterThanBinaryOpIntCompare4(void) { + int res; + int f= 3; + res = ((int)f + 3 > (char)f + 3); // no warning + return (0); +} + +int checkGreaterThanNestedBinaryOpIntCompare1(void) { + int res; + int t= 1; + int u= 2; + int f= 3; + res = (((int)f + (3 - u)*t) > ((int)f + (3 - u)*t)); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} + +int checkGreaterThanNestedBinaryOpIntCompare2(void) { + int res; + int t= 1; + int u= 2; + int f= 3; + res = (((int)f + (u - 3)*t) > ((int)f + (3 - u)*t)); // no warning + return (0); +} + +int checkGreaterThanNestedBinaryOpIntCompare3(void) { + int res; + int t= 1; + int u= 2; + int f= 3; + res = (((int)f + (u - 3)*t) > ((int)f + (3 - u)*(t + u > t + u))); // expected-warning {{comparison of identical expressions always evaluates to false}} + return (0); +} + +/* end GT with int */ + +/* end GT */ diff --git a/test/Analysis/initializer.cpp b/test/Analysis/initializer.cpp index 3f7802c56d29..a71e35dc63c6 100644 --- a/test/Analysis/initializer.cpp +++ b/test/Analysis/initializer.cpp @@ -109,3 +109,37 @@ namespace DefaultConstructorWithCleanups { return w.arr[0].value; // no-warning } } + +namespace DefaultMemberInitializers { + struct Wrapper { + int value = 42; + + Wrapper() {} + Wrapper(int x) : value(x) {} + Wrapper(bool) {} + }; + + void test() { + Wrapper w1; + clang_analyzer_eval(w1.value == 42); // expected-warning{{TRUE}} + + Wrapper w2(50); + clang_analyzer_eval(w2.value == 50); // expected-warning{{TRUE}} + + Wrapper w3(false); + clang_analyzer_eval(w3.value == 42); // expected-warning{{TRUE}} + } + + struct StringWrapper { + const char s[4] = "abc"; + const char *p = "xyz"; + + StringWrapper(bool) {} + }; + + void testString() { + StringWrapper w(true); + clang_analyzer_eval(w.s[1] == 'b'); // expected-warning{{TRUE}} + clang_analyzer_eval(w.p[1] == 'y'); // expected-warning{{TRUE}} + } +} diff --git a/test/Analysis/initializers-cfg-output.cpp b/test/Analysis/initializers-cfg-output.cpp index b62d979d5bf0..db3c0fb99000 100644 --- a/test/Analysis/initializers-cfg-output.cpp +++ b/test/Analysis/initializers-cfg-output.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpCFG %s 2>&1 | FileCheck %s +// RUN: %clang_cc1 -std=c++11 -analyze -analyzer-checker=debug.DumpCFG %s 2>&1 | FileCheck %s class A { public: @@ -43,6 +43,13 @@ TestControlFlow::TestControlFlow(bool b) int v; } +class TestDelegating { + int x, z; + public: + TestDelegating() : TestDelegating(2, 3) {} + TestDelegating(int x, int z) : x(x), z(z) {} +}; + // CHECK: [B2 (ENTRY)] // CHECK: Succs (1): B1 // CHECK: [B1] @@ -95,3 +102,14 @@ TestControlFlow::TestControlFlow(bool b) // CHECK: Succs (2): B2 B3 // CHECK: [B0 (EXIT)] // CHECK: Preds (1): B1 +// CHECK: [B2 (ENTRY)] +// CHECK: Succs (1): B1 +// CHECK: [B1] +// CHECK: 1: 2 +// CHECK: 2: 3 +// CHECK: 3: [B1.1], [B1.2] (CXXConstructExpr, class TestDelegating) +// CHECK: 4: TestDelegating([B1.3]) (Delegating initializer) +// CHECK: Preds (1): B2 +// CHECK: Succs (1): B0 +// CHECK: [B0 (EXIT)] +// CHECK: Preds (1): B1 diff --git a/test/Analysis/inline-plist.c b/test/Analysis/inline-plist.c index dcdd23f74bb3..bcf15b343ae1 100644 --- a/test/Analysis/inline-plist.c +++ b/test/Analysis/inline-plist.c @@ -1,5 +1,5 @@ // RUN: %clang --analyze %s -fblocks -Xanalyzer -analyzer-output=text -Xanalyzer -analyzer-config -Xanalyzer suppress-null-return-paths=false -Xclang -verify %s -// RUN: %clang --analyze %s -fblocks -Xanalyzer -analyzer-config -Xanalyzer suppress-null-return-paths=false -o %t +// RUN: %clang --analyze %s -fblocks -Xanalyzer -analyzer-config -Xanalyzer suppress-null-return-paths=false -Xanalyzer -analyzer-config -Xanalyzer path-diagnostics-alternate=false -o %t // RUN: FileCheck -input-file %t %s // diff --git a/test/Analysis/inline-unique-reports.c b/test/Analysis/inline-unique-reports.c index 5c42135b0490..9f33bd4652f7 100644 --- a/test/Analysis/inline-unique-reports.c +++ b/test/Analysis/inline-unique-reports.c @@ -1,4 +1,4 @@ -// RUN: %clang --analyze %s -o %t > /dev/null 2>&1 +// RUN: %clang --analyze %s -Xanalyzer -analyzer-config -Xanalyzer path-diagnostics-alternate=false -o %t > /dev/null 2>&1 // RUN: FileCheck -input-file %t %s static inline bug(int *p) { diff --git a/test/Analysis/inline.c b/test/Analysis/inline.c index 8cba63f17e0d..9ecdce33a36d 100644 --- a/test/Analysis/inline.c +++ b/test/Analysis/inline.c @@ -110,3 +110,9 @@ void never_called_by_anyone() { clang_analyzer_checkInlined(0); // no-warning } + +void knr_one_argument(a) int a; { } + +void call_with_less_arguments() { + knr_one_argument(); // expected-warning{{too few arguments}} expected-warning{{Function taking 1 argument}} +} diff --git a/test/Analysis/inline.cpp b/test/Analysis/inline.cpp index 909e18017b34..ca126ddf7f38 100644 --- a/test/Analysis/inline.cpp +++ b/test/Analysis/inline.cpp @@ -290,6 +290,15 @@ namespace DefaultArgs { clang_analyzer_eval(defaultFloatReferenceZero(1) == -1); // expected-warning{{UNKNOWN}} clang_analyzer_eval(defaultFloatReferenceZero() == 0); // expected-warning{{UNKNOWN}} } + + char defaultString(const char *s = "abc") { + return s[1]; + } + + void testString() { + clang_analyzer_eval(defaultString("xyz") == 'y'); // expected-warning{{TRUE}} + clang_analyzer_eval(defaultString() == 'b'); // expected-warning{{TRUE}} + } } namespace OperatorNew { @@ -420,3 +429,10 @@ namespace rdar12409977 { clang_analyzer_eval(obj.getThis()->x == 42); // expected-warning{{TRUE}} } } + +namespace bug16307 { + void one_argument(int a) { } + void call_with_less() { + reinterpret_cast(one_argument)(); // expected-warning{{Function taking 1 argument}} + } +} diff --git a/test/Analysis/inlining/DynDispatchBifurcate.m b/test/Analysis/inlining/DynDispatchBifurcate.m index ab1dfc5ec14b..0ce079654e98 100644 --- a/test/Analysis/inlining/DynDispatchBifurcate.m +++ b/test/Analysis/inlining/DynDispatchBifurcate.m @@ -181,11 +181,11 @@ int testPropertySynthesized(PublicClass *p) { } // Test definition not available edge case. -@interface DefNotAvailClass : NSObject +@interface DefNotAvailClass : NSObject // expected-note {{receiver is instance of class declared here}} @end id testDefNotAvailableInlined(DefNotAvailClass *C) { return [C mem]; // expected-warning {{instance method '-mem' not found}} } id testDefNotAvailable(DefNotAvailClass *C) { return testDefNotAvailableInlined(C); -} \ No newline at end of file +} diff --git a/test/Analysis/inlining/InlineObjCClassMethod.m b/test/Analysis/inlining/InlineObjCClassMethod.m index 90ce3c051bab..6efcb894fecd 100644 --- a/test/Analysis/inlining/InlineObjCClassMethod.m +++ b/test/Analysis/inlining/InlineObjCClassMethod.m @@ -1,4 +1,6 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-config ipa=dynamic-bifurcate -verify %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-config ipa=dynamic-bifurcate -verify %s + +void clang_analyzer_checkInlined(int); // Test inlining of ObjC class methods. @@ -209,3 +211,26 @@ int checkSelfUsedInparentClassMethod() { return 5/[SelfUsedInParentChild fooA]; } + +@interface Rdar15037033 : NSObject +@end + +void rdar15037033() { + [Rdar15037033 forwardDeclaredMethod]; // expected-warning {{class method '+forwardDeclaredMethod' not found}} + [Rdar15037033 forwardDeclaredVariadicMethod:1, 2, 3, 0]; // expected-warning {{class method '+forwardDeclaredVariadicMethod:' not found}} +} + +@implementation Rdar15037033 + ++ (void)forwardDeclaredMethod { + clang_analyzer_checkInlined(1); // expected-warning{{TRUE}} +} + ++ (void)forwardDeclaredVariadicMethod:(int)x, ... { + clang_analyzer_checkInlined(0); // no-warning +} + +@end + + + diff --git a/test/Analysis/inlining/eager-reclamation-path-notes.c b/test/Analysis/inlining/eager-reclamation-path-notes.c index 65613658fcb8..d14aba3d989e 100644 --- a/test/Analysis/inlining/eager-reclamation-path-notes.c +++ b/test/Analysis/inlining/eager-reclamation-path-notes.c @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -analyzer-config graph-trim-interval=5 -verify %s -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file -analyzer-config graph-trim-interval=5 %s -o %t.plist +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file -analyzer-config graph-trim-interval=5 -analyzer-config path-diagnostics-alternate=false %s -o %t.plist // RUN: FileCheck --input-file=%t.plist %s void use(int *ptr, int val) { diff --git a/test/Analysis/inlining/eager-reclamation-path-notes.cpp b/test/Analysis/inlining/eager-reclamation-path-notes.cpp index 05411bbc7778..672b3b8b3efb 100644 --- a/test/Analysis/inlining/eager-reclamation-path-notes.cpp +++ b/test/Analysis/inlining/eager-reclamation-path-notes.cpp @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -analyzer-config graph-trim-interval=5 -analyzer-config suppress-null-return-paths=false -verify %s -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file -analyzer-config graph-trim-interval=5 -analyzer-config suppress-null-return-paths=false %s -o %t.plist +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file -analyzer-config graph-trim-interval=5 -analyzer-config suppress-null-return-paths=false -analyzer-config path-diagnostics-alternate=false %s -o %t.plist // RUN: FileCheck --input-file=%t.plist %s typedef struct { diff --git a/test/Analysis/inlining/false-positive-suppression.c b/test/Analysis/inlining/false-positive-suppression.c index c5c6bb875ea2..e1c8f67614e1 100644 --- a/test/Analysis/inlining/false-positive-suppression.c +++ b/test/Analysis/inlining/false-positive-suppression.c @@ -84,6 +84,14 @@ void testMultipleStore(void *p) { #endif } +// Test that div by zero does not get suppressed. This is a policy choice. +int retZero() { + return 0; +} +int triggerDivZero () { + int y = retZero(); + return 5/y; // expected-warning {{Division by zero}} +} // -------------------------- // "Suppression suppression" diff --git a/test/Analysis/inlining/inline-defensive-checks.c b/test/Analysis/inlining/inline-defensive-checks.c index aa7f70030c06..4ce783c852fe 100644 --- a/test/Analysis/inlining/inline-defensive-checks.c +++ b/test/Analysis/inlining/inline-defensive-checks.c @@ -110,3 +110,32 @@ void testConstantOffset(char *value) { cursor++; } } + +// Ensure idc works for integer zero values (ex: suppressed div by zero). +void idcZero(int assume) { + if (assume) + ; +} + +int idcTriggerZeroValue(int m) { + idcZero(m); + return 5/m; // no-warning +} + +int idcTriggerZeroValueThroughCall(int i) { + return 5/i; // no-warning +} +void idcTrackZeroValueThroughCall(int x) { + idcZero(x); + idcTriggerZeroValueThroughCall(x); +} + +int idcTriggerZeroThroughDoubleAssignemnt(int i) { + return 5/i; // no-warning +} +void idcTrackZeroThroughDoubleAssignemnt(int x) { + idcZero(x); + int y = x; + int z = y; + idcTriggerZeroValueThroughCall(z); +} diff --git a/test/Analysis/inlining/path-notes.c b/test/Analysis/inlining/path-notes.c index 660988535b34..deb2efe1d803 100644 --- a/test/Analysis/inlining/path-notes.c +++ b/test/Analysis/inlining/path-notes.c @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -analyzer-config suppress-null-return-paths=false -verify %s -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file -analyzer-config suppress-null-return-paths=false %s -o %t.plist +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file -analyzer-config suppress-null-return-paths=false -analyzer-config path-diagnostics-alternate=false %s -o %t.plist // RUN: FileCheck --input-file=%t.plist %s void zero(int **p) { diff --git a/test/Analysis/inlining/path-notes.cpp b/test/Analysis/inlining/path-notes.cpp index e0c83cbe3296..a354e14df9ed 100644 --- a/test/Analysis/inlining/path-notes.cpp +++ b/test/Analysis/inlining/path-notes.cpp @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -analyzer-config c++-inlining=destructors -std=c++11 -verify %s -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file -analyzer-config c++-inlining=destructors -std=c++11 %s -o %t.plist +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file -analyzer-config c++-inlining=destructors -std=c++11 -analyzer-config path-diagnostics-alternate=false %s -o %t.plist // RUN: FileCheck --input-file=%t.plist %s class Foo { @@ -264,6 +264,40 @@ const A& testDeclRefExprToReferenceInGetDerefExpr(const A *ptr) { return val; } + +int generateNoteOnDefaultArgument(int one, int two = 0) { + return one/two; // expected-warning {{Division by zero}} + // expected-note@-1 {{Division by zero}} +} +int callGenerateNoteOnDefaultArgument(int o) { + return generateNoteOnDefaultArgument(o); //expected-note{{Calling 'generateNoteOnDefaultArgument'}} + //expected-note@-1 {{Passing the value 0 via 2nd parameter 'two'}} +} + +namespace PR17746 { + class Inner { + public: + ~Inner() { + *(volatile int *)0 = 1; // expected-warning {{Dereference of null pointer}} + // expected-note@-1 {{Dereference of null pointer}} + } + }; + + class Outer { + public: + Inner *inner; + ~Outer() { + delete inner; + // expected-note@-1 {{Calling '~Inner'}} + } + }; + + void test(Outer *outer) { + delete outer; + // expected-note@-1 {{Calling '~Outer'}} + } +} + // CHECK: diagnostics // CHECK-NEXT: // CHECK-NEXT: @@ -4743,4 +4777,456 @@ const A& testDeclRefExprToReferenceInGetDerefExpr(const A *ptr) { // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line273 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line273 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line273 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line273 +// CHECK-NEXT: col38 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line273 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line273 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line273 +// CHECK-NEXT: col41 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Passing the value 0 via 2nd parameter 'two' +// CHECK-NEXT: message +// CHECK-NEXT: Passing the value 0 via 2nd parameter 'two' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line273 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line273 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line273 +// CHECK-NEXT: col41 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling 'generateNoteOnDefaultArgument' +// CHECK-NEXT: message +// CHECK-NEXT: Calling 'generateNoteOnDefaultArgument' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line268 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'callGenerateNoteOnDefaultArgument' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'callGenerateNoteOnDefaultArgument' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line268 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line268 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line269 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line269 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line269 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line269 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line269 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line269 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line269 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line269 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line269 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDivision by zero +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDivision by zero +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextgenerateNoteOnDefaultArgument +// CHECK-NEXT: issue_hash1 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line269 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line296 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line296 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line296 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling '~Outer' +// CHECK-NEXT: message +// CHECK-NEXT: Calling '~Outer' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line289 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'test' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'test' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line289 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line289 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line290 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line290 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line290 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line290 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line290 +// CHECK-NEXT: col18 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling '~Inner' +// CHECK-NEXT: message +// CHECK-NEXT: Calling '~Inner' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line280 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth2 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from '~Outer' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from '~Outer' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line280 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line280 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line281 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line281 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line281 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line281 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line281 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line281 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line281 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line281 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line281 +// CHECK-NEXT: col28 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth2 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_hash1 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line281 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: // CHECK-NEXT: diff --git a/test/Analysis/inlining/path-notes.m b/test/Analysis/inlining/path-notes.m index 74f088a382bd..23040386e4dd 100644 --- a/test/Analysis/inlining/path-notes.m +++ b/test/Analysis/inlining/path-notes.m @@ -1,16 +1,74 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -analyzer-config suppress-null-return-paths=false -fblocks -verify %s -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file -analyzer-config suppress-null-return-paths=false -fblocks %s -o %t.plist +// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx.cocoa.NilArg,osx.cocoa.RetainCount -analyzer-output=text -analyzer-config suppress-null-return-paths=false -fblocks -verify %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx.cocoa.NilArg,osx.cocoa.RetainCount -analyzer-output=plist-multi-file -analyzer-config suppress-null-return-paths=false -analyzer-config path-diagnostics-alternate=false -fblocks %s -o %t.plist // RUN: FileCheck --input-file=%t.plist %s typedef struct dispatch_queue_s *dispatch_queue_t; typedef void (^dispatch_block_t)(void); void dispatch_sync(dispatch_queue_t, dispatch_block_t); +typedef long dispatch_once_t; +// Note: The real dispatch_once has all parameters marked nonnull. +// We don't do that here so that we can trigger a null dereference inside +// the synthesized body. +void dispatch_once(dispatch_once_t *predicate, dispatch_block_t block); + @interface Test @property int *p; @end +typedef unsigned long NSUInteger; +typedef signed char BOOL; +typedef struct _NSZone NSZone; +@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; +@protocol NSObject +@end +@protocol NSCopying +- (id)copyWithZone:(NSZone *)zone; +@end +@protocol NSMutableCopying +- (id)mutableCopyWithZone:(NSZone *)zone; +@end +@protocol NSCoding +- (void)encodeWithCoder:(NSCoder *)aCoder; +@end +@protocol NSFastEnumeration +@end +@protocol NSSecureCoding +@required ++ (BOOL)supportsSecureCoding; +@end +@interface NSObject {} +- (id)init; ++ (id)alloc; +- (id)autorelease; +@end +@interface NSArray : NSObject + +- (NSUInteger)count; +- (id)objectAtIndex:(NSUInteger)index; + +@end + +@interface NSArray (NSExtendedArray) +- (NSArray *)arrayByAddingObject:(id)anObject; +- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx __attribute__((availability(macosx,introduced=10.8))); +@end + +@interface NSArray (NSArrayCreation) ++ (instancetype)arrayWithObjects:(const id [])objects count:(NSUInteger)cnt; +@end + +@interface NSMutableArray : NSArray + +- (void)addObject:(id)anObject; +- (void)insertObject:(id)anObject atIndex:(NSUInteger)index; +- (void)removeLastObject; +- (void)removeObjectAtIndex:(NSUInteger)index; +- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject; + +@end + int *getZeroIfNil(Test *x) { return x.p; // expected-note@-1 {{'p' not called because the receiver is nil}} @@ -34,10 +92,10 @@ int testDispatchSyncInlining() { // expected-note@+2 {{Calling 'dispatch_sync'}} // expected-note@+1 {{Returning from 'dispatch_sync'}} dispatch_sync(globalQueue, ^{ - // expected-note@7 {{Calling anonymous block}} + // expected-note@-1 {{Calling anonymous block}} + // expected-note@-2 {{Returning to caller}} x = 0; // expected-note@-1 {{The value 0 is assigned to 'x'}} - // expected-note@7 {{Returning to caller}} }); return 1 / x; // expected-warning{{Division by zero}} @@ -54,7 +112,7 @@ int testDispatchSyncInliningNoPruning(int coin) { // expected-note@+1 {{Calling 'dispatch_sync'}} dispatch_sync(globalQueue, ^{ - // expected-note@7 {{Calling anonymous block}} + // expected-note@-1 {{Calling anonymous block}} int x; // expected-note@-1 {{'x' declared without an initial value}} ^{ y = x; }(); // expected-warning{{Variable 'x' is uninitialized when captured by block}} @@ -89,6 +147,32 @@ void testNilReceiver(id *x) { // expected-note@-3 {{Calling 'testNilReceiverHelper'}} } +id testCreateArrayLiteral(id myNil) { + if (myNil) // expected-note {{Assuming 'myNil' is nil}} + ; // expected-note@-1 {{Taking false branch}} + return @[ @"a", myNil, @"c" ]; // expected-warning {{Array element cannot be nil}} + //expected-note@-1 {{Array element cannot be nil}} +} + +// +id testAutoreleaseTakesEffectInDispatch() { + static dispatch_once_t token = 0; + dispatch_once(&token, ^{}); + + id x = [[[[NSObject alloc] init] autorelease] autorelease]; + // expected-note@-1 {{Method returns an Objective-C object with a +1 retain count}} + // expected-note@-2 {{Object autoreleased}} + // expected-note@-3 {{Object autoreleased}} + + dispatch_once(&token, ^{}); // don't crash, don't warn here + + return x; // expected-warning{{Object autoreleased too many times}} + // expected-note@-1 {{Object was autoreleased 2 times but the object has a +0 retain count}} +} + +void testNullDereferenceInDispatch() { + dispatch_once(0, ^{}); // no-warning, don't crash +} // CHECK: diagnostics // CHECK-NEXT: @@ -103,12 +187,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -116,12 +200,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -133,7 +217,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -141,12 +225,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -166,12 +250,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -179,12 +263,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -196,7 +280,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -204,12 +288,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -225,7 +309,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line14 +// CHECK-NEXT: line72 // CHECK-NEXT: col1 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -243,12 +327,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line14 +// CHECK-NEXT: line72 // CHECK-NEXT: col1 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line14 +// CHECK-NEXT: line72 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -256,12 +340,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -277,12 +361,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -290,12 +374,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -307,7 +391,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -315,12 +399,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -340,12 +424,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -353,12 +437,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -370,7 +454,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -378,12 +462,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line73 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -399,7 +483,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -407,12 +491,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -432,12 +516,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -445,12 +529,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col20 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col20 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -462,7 +546,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col20 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -470,12 +554,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -496,7 +580,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: issue_hash1 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line79 // CHECK-NEXT: col20 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -512,12 +596,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line30 +// CHECK-NEXT: line88 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line30 +// CHECK-NEXT: line88 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -525,12 +609,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line94 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line94 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -542,7 +626,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line94 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -550,12 +634,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line94 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line41 +// CHECK-NEXT: line99 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -571,24 +655,25 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line7 -// CHECK-NEXT: col1 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: depth1 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Entered call from 'testDispatchSyncInlining' -// CHECK-NEXT: message -// CHECK-NEXT: Entered call from 'testDispatchSyncInlining' -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line7 -// CHECK-NEXT: col1 +// CHECK-NEXT: line94 +// CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line94 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line99 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: // CHECK-NEXT: depth1 // CHECK-NEXT: extended_message // CHECK-NEXT: Calling anonymous block @@ -599,7 +684,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line94 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -617,12 +702,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line94 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line94 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -630,12 +715,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line38 +// CHECK-NEXT: line97 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line38 +// CHECK-NEXT: line97 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -647,7 +732,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line38 +// CHECK-NEXT: line97 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -655,12 +740,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line38 +// CHECK-NEXT: line97 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line38 +// CHECK-NEXT: line97 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -676,10 +761,25 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line7 -// CHECK-NEXT: col1 +// CHECK-NEXT: line94 +// CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line94 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line99 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: // CHECK-NEXT: depth1 // CHECK-NEXT: extended_message // CHECK-NEXT: Returning to caller @@ -690,7 +790,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line94 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -698,12 +798,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line94 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line41 +// CHECK-NEXT: line99 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -723,12 +823,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line94 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line94 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -736,12 +836,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line43 +// CHECK-NEXT: line101 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line43 +// CHECK-NEXT: line101 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -753,7 +853,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line43 +// CHECK-NEXT: line101 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -761,12 +861,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line43 +// CHECK-NEXT: line101 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line43 +// CHECK-NEXT: line101 // CHECK-NEXT: col14 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -787,7 +887,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: issue_hash14 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line43 +// CHECK-NEXT: line101 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -803,12 +903,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line51 +// CHECK-NEXT: line109 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line51 +// CHECK-NEXT: line109 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -816,12 +916,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line114 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line114 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -833,7 +933,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line114 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -841,12 +941,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line114 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line62 +// CHECK-NEXT: line120 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -862,24 +962,25 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line7 -// CHECK-NEXT: col1 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: depth1 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Entered call from 'testDispatchSyncInliningNoPruning' -// CHECK-NEXT: message -// CHECK-NEXT: Entered call from 'testDispatchSyncInliningNoPruning' -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line7 -// CHECK-NEXT: col1 +// CHECK-NEXT: line114 +// CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line114 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line120 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: // CHECK-NEXT: depth1 // CHECK-NEXT: extended_message // CHECK-NEXT: Calling anonymous block @@ -890,7 +991,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line114 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -908,12 +1009,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line114 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line114 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -921,12 +1022,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line116 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line116 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -938,7 +1039,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line116 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -946,12 +1047,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line116 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line116 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -971,12 +1072,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line116 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line116 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -984,12 +1085,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line118 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line118 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1001,7 +1102,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line118 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1009,12 +1110,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line118 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line118 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1032,7 +1133,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: typeuninitialized variable captured by block // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line118 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1048,12 +1149,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line82 +// CHECK-NEXT: line140 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line82 +// CHECK-NEXT: line140 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1061,12 +1162,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col23 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1082,12 +1183,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col23 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1095,12 +1196,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col26 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col26 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1112,7 +1213,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col26 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1120,12 +1221,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col26 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col27 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1145,12 +1246,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col26 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col26 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1158,12 +1259,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col25 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col25 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1175,7 +1276,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col25 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1183,12 +1284,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col25 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col35 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1204,7 +1305,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1212,12 +1313,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line144 // CHECK-NEXT: col36 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1233,7 +1334,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line134 // CHECK-NEXT: col1 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1251,12 +1352,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line134 // CHECK-NEXT: col1 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line134 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1264,12 +1365,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line135 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line135 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1285,12 +1386,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line135 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line135 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1298,12 +1399,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line135 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line135 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1315,7 +1416,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line135 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1323,12 +1424,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line135 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line135 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1349,9 +1450,581 @@ void testNilReceiver(id *x) { // CHECK-NEXT: issue_hash1 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line135 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line151 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line151 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line151 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line151 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line151 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line151 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line151 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'myNil' is nil +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'myNil' is nil +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line151 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line151 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Array element cannot be nil +// CHECK-NEXT: message +// CHECK-NEXT: Array element cannot be nil +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionArray element cannot be nil +// CHECK-NEXT: categoryAPI Misuse (Apple) +// CHECK-NEXT: typenil argument +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestCreateArrayLiteral +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line159 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line160 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line160 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line160 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line160 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col34 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Method returns an Objective-C object with a +1 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Method returns an Objective-C object with a +1 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col47 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col34 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object autoreleased +// CHECK-NEXT: message +// CHECK-NEXT: Object autoreleased +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col60 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col47 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object autoreleased +// CHECK-NEXT: message +// CHECK-NEXT: Object autoreleased +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line162 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line167 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line167 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line167 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line167 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line169 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line169 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line169 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line169 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line169 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object was autoreleased 2 times but the object has a +0 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Object was autoreleased 2 times but the object has a +0 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionObject autoreleased too many times +// CHECK-NEXT: categoryMemory (Core Foundation/Objective-C) +// CHECK-NEXT: typeObject autoreleased too many times +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestAutoreleaseTakesEffectInDispatch +// CHECK-NEXT: issue_hash11 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line169 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: // CHECK-NEXT: diff --git a/test/Analysis/inlining/stl.cpp b/test/Analysis/inlining/stl.cpp index 6053daaf3a21..c153174d27ad 100644 --- a/test/Analysis/inlining/stl.cpp +++ b/test/Analysis/inlining/stl.cpp @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc,debug.ExprInspection -analyzer-config c++-container-inlining=true -analyzer-config c++-stdlib-inlining=false -verify %s -// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc,debug.ExprInspection -analyzer-config c++-container-inlining=true -analyzer-config c++-stdlib-inlining=true -DINLINE=1 -verify %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc,cplusplus.NewDelete,debug.ExprInspection -analyzer-config c++-container-inlining=true -analyzer-config c++-stdlib-inlining=false -std=c++11 -verify %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc,cplusplus.NewDelete,debug.ExprInspection -analyzer-config c++-container-inlining=true -analyzer-config c++-stdlib-inlining=true -std=c++11 -DINLINE=1 -verify %s #include "../Inputs/system-header-simulator-cxx.h" @@ -27,3 +27,18 @@ void testException(std::exception e) { // expected-warning@-4 {{UNKNOWN}} #endif } + +void testList_pop_front(std::list list) { + while(!list.empty()) + list.pop_front(); // no-warning +} + +void testBasicStringSuppression() { + std::basic_string v; + v.push_back(1); // no-warning +} + +void testBasicStringSuppression_append() { + std::basic_string v; + v += 'c'; // no-warning +} diff --git a/test/Analysis/lambdas.cpp b/test/Analysis/lambdas.cpp index 77b36c42cfa8..33e216b57ecc 100644 --- a/test/Analysis/lambdas.cpp +++ b/test/Analysis/lambdas.cpp @@ -10,7 +10,7 @@ void f(X x) { (void) [x]{}; } // CHECK: 1: x // CHECK: 2: [B1.1] (ImplicitCastExpr, NoOp, const struct X) // CHECK: 3: [B1.2] (CXXConstructExpr, struct X) -// CHECK: 4: [=x] { +// CHECK: 4: [x] { // CHECK: } // CHECK: 5: (void)[B1.4] (CStyleCastExpr, ToVoid, void) // CHECK: Preds (1): B2 diff --git a/test/Analysis/lit.local.cfg b/test/Analysis/lit.local.cfg new file mode 100644 index 000000000000..da2a68b378cc --- /dev/null +++ b/test/Analysis/lit.local.cfg @@ -0,0 +1,2 @@ +if config.root.clang_staticanalyzer == 0: + config.unsupported = True diff --git a/test/Analysis/live-variables.cpp b/test/Analysis/live-variables.cpp new file mode 100644 index 000000000000..0cfaa1b41f52 --- /dev/null +++ b/test/Analysis/live-variables.cpp @@ -0,0 +1,23 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core -verify %s +// expected-no-diagnostics +class B { +public: + bool m; + ~B() {} // The destructor ensures that the binary logical operator below is wrapped in the ExprWithCleanups. +}; +B foo(); +int getBool(); +int *getPtr(); +int test() { + int r = 0; + for (int x = 0; x< 10; x++) { + int *p = getPtr(); + // Liveness info is not computed correctly due to the following expression. + // This happens due to CFG being special cased for short circuit operators. + // PR18159 + if (p != 0 && getBool() && foo().m && getBool()) { + r = *p; // no warning + } + } + return r; +} diff --git a/test/Analysis/live-variables.m b/test/Analysis/live-variables.m new file mode 100644 index 000000000000..eefd292bf79b --- /dev/null +++ b/test/Analysis/live-variables.m @@ -0,0 +1,24 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core -fobjc-arc -verify %s +// expected-no-diagnostics +@interface NSObject +@end +@interface NSString : NSObject +- (id)lastPathComponent; +@end +int getBool(); +int *getPtr(); +int foo() { + int r = 0; + NSString *filename = @"filename"; + for (int x = 0; x< 10; x++) { + int *p = getPtr(); + // Liveness info is not computed correctly due to the following expression. + // This happens due to CFG being special cased for short circuit operators. + // Note, due to ObjC method call, the outermost logical operator is wrapped in ExprWithCleanups. + // PR18159 + if ((p != 0) && (getBool()) && ([filename lastPathComponent]) && (getBool())) { + r = *p; // no-warning + } + } + return r; +} \ No newline at end of file diff --git a/test/Analysis/logical-ops.c b/test/Analysis/logical-ops.c index a1223b39fa89..afaa2f107780 100644 --- a/test/Analysis/logical-ops.c +++ b/test/Analysis/logical-ops.c @@ -25,3 +25,15 @@ int testTypeIsInt(int i, void *p) { return 1; return 0; } + +// These crashed the analyzer at some point. +int between(char *x) { + extern char start[]; + extern char end[]; + return x >= start && x < end; +} + +int undef(void) {} // expected-warning{{control reaches end of non-void function}} +void useUndef(void) { 0 || undef(); } + +void testPointer(void) { (void) (1 && testPointer && 0); } diff --git a/test/Analysis/malloc-plist.c b/test/Analysis/malloc-plist.c index 41bb8b5793ce..0cbf9725b683 100644 --- a/test/Analysis/malloc-plist.c +++ b/test/Analysis/malloc-plist.c @@ -1,5 +1,5 @@ // RUN: rm -f %t -// RUN: %clang_cc1 -analyze -analyzer-checker=unix.Malloc -analyzer-output=plist -o %t %s +// RUN: %clang_cc1 -analyze -analyzer-checker=unix.Malloc -analyzer-output=plist -analyzer-config path-diagnostics-alternate=false -o %t %s // RUN: FileCheck -input-file %t %s typedef __typeof(sizeof(int)) size_t; diff --git a/test/Analysis/malloc.c b/test/Analysis/malloc.c index 6071d1d43582..58d40a31a835 100644 --- a/test/Analysis/malloc.c +++ b/test/Analysis/malloc.c @@ -627,8 +627,49 @@ void doNotInvalidateWhenPassedToSystemCalls(char *s) { char *p = malloc(12); strlen(p); strcpy(p, s); + strcpy(s, p); + strcpy(p, p); + memcpy(p, s, 1); + memcpy(s, p, 1); + memcpy(p, p, 1); } // expected-warning {{leak}} +// Treat source buffer contents as escaped. +void escapeSourceContents(char *s) { + char *p = malloc(12); + memcpy(s, &p, 12); // no warning + + void *p1 = malloc(7); + char *a; + memcpy(&a, &p1, sizeof a); + // FIXME: No warning due to limitations imposed by current modelling of + // 'memcpy' (regions metadata is not copied). + + int *ptrs[2]; + int *allocated = (int *)malloc(4); + memcpy(&ptrs[0], &allocated, sizeof(int *)); + // FIXME: No warning due to limitations imposed by current modelling of + // 'memcpy' (regions metadata is not copied). +} + +void invalidateDestinationContents() { + int *null = 0; + int *p = (int *)malloc(4); + memcpy(&p, &null, sizeof(int *)); + + int *ptrs1[2]; // expected-warning {{Potential leak of memory pointed to by}} + ptrs1[0] = (int *)malloc(4); + memcpy(ptrs1, &null, sizeof(int *)); + + int *ptrs2[2]; // expected-warning {{Potential memory leak}} + ptrs2[0] = (int *)malloc(4); + memcpy(&ptrs2[1], &null, sizeof(int *)); + + int *ptrs3[2]; // expected-warning {{Potential memory leak}} + ptrs3[0] = (int *)malloc(4); + memcpy(&ptrs3[0], &null, sizeof(int *)); +} // expected-warning {{Potential memory leak}} + // Rely on the CString checker evaluation of the strcpy API to convey that the result of strcpy is equal to p. void symbolLostWithStrcpy(char *s) { char *p = malloc(12); @@ -1057,12 +1098,6 @@ void testPassConstPointerIndirectly() { return; // expected-warning {{leak}} } -void testPassToSystemHeaderFunctionIndirectly() { - int *p = malloc(4); - p++; - fakeSystemHeaderCallInt(p); -} // expected-warning {{leak}} - void testPassConstPointerIndirectlyStruct() { struct HasPtr hp; hp.p = malloc(10); @@ -1073,8 +1108,32 @@ void testPassConstPointerIndirectlyStruct() { void testPassToSystemHeaderFunctionIndirectlyStruct() { SomeStruct ss; ss.p = malloc(1); - fakeSystemHeaderCall(&ss); -} // expected-warning {{Potential leak of memory pointed to by 'ss.p'}} + fakeSystemHeaderCall(&ss); // invalidates ss, making ss.p unreachable + // Technically a false negative here -- we know the system function won't free + // ss.p, but nothing else will either! +} // no-warning + +void testPassToSystemHeaderFunctionIndirectlyStructFree() { + SomeStruct ss; + ss.p = malloc(1); + fakeSystemHeaderCall(&ss); // invalidates ss, making ss.p unreachable + free(ss.p); +} // no-warning + +void testPassToSystemHeaderFunctionIndirectlyArray() { + int *p[1]; + p[0] = malloc(sizeof(int)); + fakeSystemHeaderCallIntPtr(p); // invalidates p, making p[0] unreachable + // Technically a false negative here -- we know the system function won't free + // p[0], but nothing else will either! +} // no-warning + +void testPassToSystemHeaderFunctionIndirectlyArrayFree() { + int *p[1]; + p[0] = malloc(sizeof(int)); + fakeSystemHeaderCallIntPtr(p); // invalidates p, making p[0] unreachable + free(p[0]); +} // no-warning int *testOffsetAllocate(size_t size) { int *memoryBlock = (int *)malloc(size + sizeof(int)); @@ -1189,6 +1248,54 @@ void freeMemory() { } } +// PR16730 +void testReallocEscaped(void **memory) { + *memory = malloc(47); + char *new_memory = realloc(*memory, 47); + if (new_memory != 0) { + *memory = new_memory; + } +} + +// PR16558 +void *smallocNoWarn(size_t size) { + if (size == 0) { + return malloc(1); // this branch is never called + } + else { + return malloc(size); + } +} + +char *dupstrNoWarn(const char *s) { + const int len = strlen(s); + char *p = (char*) smallocNoWarn(len + 1); + strcpy(p, s); // no-warning + return p; +} + +void *smallocWarn(size_t size) { + if (size == 2) { + return malloc(1); + } + else { + return malloc(size); + } +} + +char *dupstrWarn(const char *s) { + const int len = strlen(s); + char *p = (char*) smallocWarn(len + 1); + strcpy(p, s); // expected-warning{{String copy function overflows destination buffer}} + return p; +} + +int *radar15580979() { + int *data = (int *)malloc(32); + int *p = data ?: (int*)malloc(32); // no warning + return p; +} + // ---------------------------------------------------------------------------- // False negatives. @@ -1200,3 +1307,11 @@ void testMallocWithParam(int **p) { void testMallocWithParam_2(int **p) { *p = (int*) malloc(sizeof(int)); // no-warning } + +void testPassToSystemHeaderFunctionIndirectly() { + int *p = malloc(4); + p++; + fakeSystemHeaderCallInt(p); + // FIXME: This is a leak: if we think a system function won't free p, it + // won't free (p-1) either. +} diff --git a/test/Analysis/malloc.m b/test/Analysis/malloc.m index 21d2dafa38b6..ad16db52dff9 100644 --- a/test/Analysis/malloc.m +++ b/test/Analysis/malloc.m @@ -35,3 +35,18 @@ void rdar10579586(char x); } @end +@interface MyArray : NSObject { + id * objects; +} +@end + +void _ArrayCreate() { + MyArray *array = (MyArray *)malloc(12); + array = [array init]; + free(array); // no-warning +} + +void testNSDataTruePositiveLeak() { + char *b = (char *)malloc(12); + NSData *d = [[NSData alloc] initWithBytes: b length: 12]; // expected-warning {{Potential leak of memory pointed to by 'b'}} +} \ No newline at end of file diff --git a/test/Analysis/method-call-path-notes.cpp b/test/Analysis/method-call-path-notes.cpp index f946b327d0c2..20348d588936 100644 --- a/test/Analysis/method-call-path-notes.cpp +++ b/test/Analysis/method-call-path-notes.cpp @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -verify %s -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file %s -o %t.plist +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file -analyzer-config path-diagnostics-alternate=false %s -o %t.plist // RUN: FileCheck --input-file=%t.plist %s // Test warning about null or uninitialized pointer values used as instance member diff --git a/test/Analysis/misc-ps-arm.m b/test/Analysis/misc-ps-arm.m index 1ff0f17cea5f..a9ea3274ae4b 100644 --- a/test/Analysis/misc-ps-arm.m +++ b/test/Analysis/misc-ps-arm.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple thumbv7-apple-ios0.0.0 -analyze -analyzer-checker=core -analyzer-store=region -verify -fblocks -analyzer-opt-analyze-nested-blocks -Wno-objc-root-class %s +// RUN: %clang_cc1 -triple thumbv7-apple-ios0.0.0 -target-feature +neon -analyze -analyzer-checker=core -analyzer-store=region -verify -fblocks -analyzer-opt-analyze-nested-blocks -Wno-objc-root-class %s // expected-no-diagnostics // - Handle casts of vectors to structs, and loading diff --git a/test/Analysis/misc-ps-region-store.cpp b/test/Analysis/misc-ps-region-store.cpp index 902a5e527113..6a873f01b3d3 100644 --- a/test/Analysis/misc-ps-region-store.cpp +++ b/test/Analysis/misc-ps-region-store.cpp @@ -1,5 +1,7 @@ -// RUN: %clang_cc1 -triple i386-apple-darwin9 -analyze -analyzer-checker=core,alpha.core -analyzer-store=region -verify -fblocks -analyzer-opt-analyze-nested-blocks %s -fexceptions -fcxx-exceptions -// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -analyze -analyzer-checker=core,alpha.core -analyzer-store=region -verify -fblocks -analyzer-opt-analyze-nested-blocks %s -fexceptions -fcxx-exceptions +// RUN: %clang_cc1 -triple i386-apple-darwin9 -analyze -analyzer-checker=core,alpha.core,debug.ExprInspection -analyzer-store=region -verify -fblocks -analyzer-opt-analyze-nested-blocks %s -fexceptions -fcxx-exceptions +// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -analyze -analyzer-checker=core,alpha.core,debug.ExprInspection -analyzer-store=region -verify -fblocks -analyzer-opt-analyze-nested-blocks %s -fexceptions -fcxx-exceptions + +void clang_analyzer_warnIfReached(); // Test basic handling of references. char &test1_aux(); @@ -54,9 +56,7 @@ int test_init_in_condition_switch() { if (x == 2) return 0; else { - // Unreachable. - int *p = 0; - *p = 0xDEADBEEF; // no-warning + clang_analyzer_warnIfReached(); // unreachable } default: break; @@ -74,8 +74,7 @@ int test_init_in_condition_while() { if (z == 2) return 0; - int *p = 0; - *p = 0xDEADBEEF; // no-warning + clang_analyzer_warnIfReached(); // unreachable return 0; } @@ -89,8 +88,7 @@ int test_init_in_condition_for() { if (z == 1) return 0; - int *p = 0; - *p = 0xDEADBEEF; // no-warning + clang_analyzer_warnIfReached(); // unreachable return 0; } @@ -117,8 +115,7 @@ int TestHandleThis::null_deref_negative() { if (x == 10) { return 1; } - int *p = 0; - *p = 0xDEADBEEF; // no-warning + clang_analyzer_warnIfReached(); // unreachable return 0; } @@ -127,8 +124,7 @@ int TestHandleThis::null_deref_positive() { if (x == 9) { return 1; } - int *p = 0; - *p = 0xDEADBEEF; // expected-warning{{null pointer}} + clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}} return 0; } @@ -143,9 +139,9 @@ void pr7675_test() { pr7675(10); pr7675('c'); pr7675_i(4.0i); - // Add null deref to ensure we are analyzing the code up to this point. - int *p = 0; - *p = 0xDEADBEEF; // expected-warning{{null pointer}} + + // Add check to ensure we are analyzing the code up to this point. + clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}} } // - CFGBuilder should handle temporaries. @@ -328,26 +324,23 @@ class RDar9267815 { }; void RDar9267815::test_pos() { - int *p = 0; if (x == 42) return; - *p = 0xDEADBEEF; // expected-warning {{null}} + clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}} } void RDar9267815::test() { - int *p = 0; if (x == 42) return; if (x == 42) - *p = 0xDEADBEEF; // no-warning + clang_analyzer_warnIfReached(); // no-warning } void RDar9267815::test2() { - int *p = 0; if (x == 42) return; invalidate(); if (x == 42) - *p = 0xDEADBEEF; // expected-warning {{null}} + clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}} } // Test reference parameters. @@ -440,8 +433,7 @@ int rdar9948787_negative() { unsigned value = classWithStatic.value; if (value == 1) return 1; - int *p = 0; - *p = 0xDEADBEEF; // no-warning + clang_analyzer_warnIfReached(); // no-warning return 0; } @@ -450,8 +442,7 @@ int rdar9948787_positive() { unsigned value = classWithStatic.value; if (value == 0) return 1; - int *p = 0; - *p = 0xDEADBEEF; // expected-warning {{null}} + clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}} return 0; } @@ -467,8 +458,7 @@ void rdar10202899_test1() { void rdar10202899_test2() { if (val == rdar10202899_ValTA) return; - int *p = 0; - *p = 0xDEADBEEF; + clang_analyzer_warnIfReached(); // no-warning } void rdar10202899_test3() { @@ -476,8 +466,7 @@ void rdar10202899_test3() { case rdar10202899_ValTA: return; default: ; }; - int *p = 0; - *p = 0xDEADBEEF; + clang_analyzer_warnIfReached(); // no-warning } // This used to crash the analyzer because of the unnamed bitfield. @@ -489,13 +478,12 @@ void PR11249() char f2[1]; char f3; } V = { 1, {2}, 3 }; - int *p = 0; if (V.f1 != 1) - *p = 0xDEADBEEF; // no-warning + clang_analyzer_warnIfReached(); // no-warning if (V.f2[0] != 2) - *p = 0xDEADBEEF; // no-warning + clang_analyzer_warnIfReached(); // no-warning if (V.f3 != 3) - *p = 0xDEADBEEF; // no-warning + clang_analyzer_warnIfReached(); // no-warning } // Handle doing a load from the memory associated with the code for @@ -599,12 +587,10 @@ void rdar10924675(unsigned short x[], int index, int index2) { void rdar11401827() { int x = int(); if (!x) { - int *p = 0; - *p = 0xDEADBEEF; // expected-warning {{null pointer}} + clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}} } else { - int *p = 0; - *p = 0xDEADBEEF; + clang_analyzer_warnIfReached(); // no-warning } } @@ -701,8 +687,7 @@ const Rdar12755044_foo *radar12755044() { void rdar12759044() { int flag = 512; if (!(flag & 512)) { - int *p = 0; - *p = 0xDEADBEEF; // no-warning + clang_analyzer_warnIfReached(); // no-warning } } diff --git a/test/Analysis/misc-ps.c b/test/Analysis/misc-ps.c index b302860a2f97..01cad1549cda 100644 --- a/test/Analysis/misc-ps.c +++ b/test/Analysis/misc-ps.c @@ -1,4 +1,6 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -disable-free -analyzer-eagerly-assume -analyzer-checker=core -analyzer-checker=deadcode -verify %s +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -disable-free -analyzer-eagerly-assume -analyzer-checker=core,deadcode,debug.ExprInspection -verify %s + +void clang_analyzer_eval(int); int size_rdar9373039 = 1; int foo_rdar9373039(const char *); @@ -175,3 +177,17 @@ void sinkAfterRegularNode(struct PR15684 *context) { context->callback(uninitialized); // expected-warning {{uninitialized}} } + +// PR16131: C permits variables to be declared extern void. +static void PR16131(int x) { + extern void v; + + int *ip = (int *)&v; + char *cp = (char *)&v; + clang_analyzer_eval(ip == cp); // expected-warning{{TRUE}} + // expected-warning@-1 {{comparison of distinct pointer types}} + + *ip = 42; + clang_analyzer_eval(*ip == 42); // expected-warning{{TRUE}} + clang_analyzer_eval(*(int *)&v == 42); // expected-warning{{TRUE}} +} diff --git a/test/Analysis/new-with-exceptions.cpp b/test/Analysis/new-with-exceptions.cpp index d909f1fb8b6b..84d77c22302c 100644 --- a/test/Analysis/new-with-exceptions.cpp +++ b/test/Analysis/new-with-exceptions.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-store region -std=c++11 -fexceptions -fcxx-exceptions -verify -DEXCEPTIONS %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-store region -std=c++11 -fexceptions -fcxx-exceptions -verify %s // RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-store region -std=c++11 -verify %s void clang_analyzer_eval(bool); @@ -32,33 +32,15 @@ void testNew() { clang_analyzer_eval(new NoThrow); // expected-warning{{UNKNOWN}} clang_analyzer_eval(new NoExcept); // expected-warning{{UNKNOWN}} - clang_analyzer_eval(new DefaultThrow); - clang_analyzer_eval(new ExplicitThrow); -#ifdef EXCEPTIONS - // expected-warning@-3 {{TRUE}} - // expected-warning@-3 {{TRUE}} -#else - // expected-warning@-6 {{UNKNOWN}} - // expected-warning@-6 {{UNKNOWN}} -#endif + clang_analyzer_eval(new DefaultThrow); // expected-warning{{TRUE}} + clang_analyzer_eval(new ExplicitThrow); // expected-warning{{TRUE}} } void testNewArray() { - clang_analyzer_eval(new NoThrow[2]); - clang_analyzer_eval(new NoExcept[2]); - clang_analyzer_eval(new DefaultThrow[2]); - clang_analyzer_eval(new ExplicitThrow[2]); -#ifdef EXCEPTIONS - // expected-warning@-5 {{TRUE}} - // expected-warning@-5 {{TRUE}} - // expected-warning@-5 {{TRUE}} - // expected-warning@-5 {{TRUE}} -#else - // expected-warning@-10 {{UNKNOWN}} - // expected-warning@-10 {{UNKNOWN}} - // expected-warning@-10 {{UNKNOWN}} - // expected-warning@-10 {{UNKNOWN}} -#endif + clang_analyzer_eval(new NoThrow[2]); // expected-warning{{TRUE}} + clang_analyzer_eval(new NoExcept[2]); // expected-warning{{TRUE}} + clang_analyzer_eval(new DefaultThrow[2]); // expected-warning{{TRUE}} + clang_analyzer_eval(new ExplicitThrow[2]); // expected-warning{{TRUE}} } extern void *operator new[](size_t, int) noexcept; diff --git a/test/Analysis/new.cpp b/test/Analysis/new.cpp index 8d3eee9baa6a..105a973ccc92 100644 --- a/test/Analysis/new.cpp +++ b/test/Analysis/new.cpp @@ -170,6 +170,16 @@ void testUsingThisAfterDelete() { c->f(0); // no-warning } +void testAggregateNew() { + struct Point { int x, y; }; + new Point{1, 2}; // no crash + + Point p; + new (&p) Point{1, 2}; // no crash + clang_analyzer_eval(p.x == 1); // expected-warning{{TRUE}} + clang_analyzer_eval(p.y == 2); // expected-warning{{TRUE}} +} + //-------------------------------- // Incorrectly-modelled behavior //-------------------------------- @@ -196,3 +206,148 @@ int testNoInitializationPlacement() { } return 1; } + +// Test modelling destructor call on call to delete +class IntPair{ +public: + int x; + int y; + IntPair() {}; + ~IntPair() {x = x/y;}; //expected-warning {{Division by zero}} +}; + +void testCallToDestructor() { + IntPair *b = new IntPair(); + b->x = 1; + b->y = 0; + delete b; // This results in divide by zero in destructor +} + +// Test Deleting a value that's passed as an argument. +class DerefClass{ +public: + int *x; + DerefClass() {}; + ~DerefClass() {*x = 1;}; //expected-warning {{Dereference of null pointer (loaded from field 'x')}} +}; + +void testDestCall(DerefClass *arg) { + delete arg; +} + +void test_delete_dtor_Arg() { + DerefClass *pair = new DerefClass(); + pair->x = 0; + testDestCall(pair); +} + +//Deleting the address of a local variable, null pointer +void abort(void) __attribute__((noreturn)); + +class NoReturnDtor { +public: + NoReturnDtor() {} + ~NoReturnDtor() {abort();} +}; + +void test_delete_dtor_LocalVar() { + NoReturnDtor test; + delete &test; // no warn or crash +} + +class DerivedNoReturn:public NoReturnDtor { +public: + DerivedNoReturn() {}; + ~DerivedNoReturn() {}; +}; + +void testNullDtorDerived() { + DerivedNoReturn *p = new DerivedNoReturn(); + delete p; // Calls the base destructor which aborts, checked below + clang_analyzer_eval(true); // no warn +} + +//Deleting a non class pointer should not crash/warn +void test_var_delete() { + int *v = new int; + delete v; // no crash/warn + clang_analyzer_eval(true); // expected-warning{{TRUE}} +} + +void testDeleteNull() { + NoReturnDtor *foo = 0; + delete foo; // should not call destructor, checked below + clang_analyzer_eval(true); // expected-warning{{TRUE}} +} + +void testNullAssigneddtor() { + NoReturnDtor *p = 0; + NoReturnDtor *s = p; + delete s; // should not call destructor, checked below + clang_analyzer_eval(true); // expected-warning{{TRUE}} +} + +void deleteArg(NoReturnDtor *test) { + delete test; +} + +void testNulldtorArg() { + NoReturnDtor *p = 0; + deleteArg(p); + clang_analyzer_eval(true); // expected-warning{{TRUE}} +} + +void testDeleteUnknown(NoReturnDtor *foo) { + delete foo; // should assume non-null and call noreturn destructor + clang_analyzer_eval(true); // no-warning +} + +void testArrayNull() { + NoReturnDtor *fooArray = 0; + delete[] fooArray; // should not call destructor, checked below + clang_analyzer_eval(true); // expected-warning{{TRUE}} +} + +void testArrayDestr() { + NoReturnDtor *p = new NoReturnDtor[2]; + delete[] p; // Calls the base destructor which aborts, checked below + //TODO: clang_analyzer_eval should not be called + clang_analyzer_eval(true); // expected-warning{{TRUE}} +} + +// Invalidate Region even in case of default destructor +class InvalidateDestTest { +public: + int x; + int *y; + ~InvalidateDestTest(); +}; + +int test_member_invalidation() { + + //test invalidation of member variable + InvalidateDestTest *test = new InvalidateDestTest(); + test->x = 5; + int *k = &(test->x); + clang_analyzer_eval(*k == 5); // expected-warning{{TRUE}} + delete test; + clang_analyzer_eval(*k == 5); // expected-warning{{UNKNOWN}} + + //test invalidation of member pointer + int localVar = 5; + test = new InvalidateDestTest(); + test->y = &localVar; + delete test; + clang_analyzer_eval(localVar == 5); // expected-warning{{UNKNOWN}} + + // Test aray elements are invalidated. + int Var1 = 5; + int Var2 = 5; + InvalidateDestTest *a = new InvalidateDestTest[2]; + a[0].y = &Var1; + a[1].y = &Var2; + delete[] a; + clang_analyzer_eval(Var1 == 5); // expected-warning{{UNKNOWN}} + clang_analyzer_eval(Var2 == 5); // expected-warning{{UNKNOWN}} + return 0; +} diff --git a/test/Analysis/nil-receiver-undefined-larger-than-voidptr-ret.m b/test/Analysis/nil-receiver-undefined-larger-than-voidptr-ret.m index 86e8911f4659..43a527be1907 100644 --- a/test/Analysis/nil-receiver-undefined-larger-than-voidptr-ret.m +++ b/test/Analysis/nil-receiver-undefined-larger-than-voidptr-ret.m @@ -1,9 +1,9 @@ // RUN: %clang_cc1 -triple i386-apple-darwin8 -analyze -analyzer-checker=core,alpha.core -analyzer-constraints=range -analyzer-store=region -Wno-objc-root-class %s > %t.1 2>&1 -// RUN: FileCheck -input-file=%t.1 -check-prefix=darwin8 %s +// RUN: FileCheck -input-file=%t.1 -check-prefix=CHECK-darwin8 %s // RUN: %clang_cc1 -triple i386-apple-darwin9 -analyze -analyzer-checker=core,alpha.core -analyzer-constraints=range -analyzer-store=region -Wno-objc-root-class %s > %t.2 2>&1 -// RUN: FileCheck -input-file=%t.2 -check-prefix=darwin9 %s +// RUN: FileCheck -input-file=%t.2 -check-prefix=CHECK-darwin9 %s // RUN: %clang_cc1 -triple thumbv6-apple-ios4.0 -analyze -analyzer-checker=core,alpha.core -analyzer-constraints=range -analyzer-store=region -Wno-objc-root-class %s > %t.3 2>&1 -// RUN: FileCheck -input-file=%t.3 -check-prefix=darwin9 %s +// RUN: FileCheck -input-file=%t.3 -check-prefix=CHECK-darwin9 %s @interface MyClass {} - (void *)voidPtrM; diff --git a/test/Analysis/null-deref-path-notes.m b/test/Analysis/null-deref-path-notes.m index e22d520f8884..605769483619 100644 --- a/test/Analysis/null-deref-path-notes.m +++ b/test/Analysis/null-deref-path-notes.m @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-store=region -analyzer-output=text -fblocks -verify -Wno-objc-root-class %s -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-store=region -analyzer-output=plist-multi-file -fblocks -Wno-objc-root-class %s -o %t +// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-store=region -analyzer-output=plist-multi-file -analyzer-config path-diagnostics-alternate=false -fblocks -Wno-objc-root-class %s -o %t // RUN: FileCheck --input-file=%t %s @interface Root { diff --git a/test/Analysis/nullptr.cpp b/test/Analysis/nullptr.cpp index 050c3f8dc56a..56151dc6b650 100644 --- a/test/Analysis/nullptr.cpp +++ b/test/Analysis/nullptr.cpp @@ -81,3 +81,9 @@ int materializeTempExpr() { const S &s = S(*n); // expected-warning{{Dereference of null pointer}} return s.a; } + +typedef decltype(nullptr) nullptr_t; +void testMaterializeTemporaryExprWithNullPtr() { + // Create MaterializeTemporaryExpr with a nullptr inside. + const nullptr_t &r = nullptr; +} diff --git a/test/Analysis/objc-arc.m b/test/Analysis/objc-arc.m index e6c6ab546132..ba590d614e8d 100644 --- a/test/Analysis/objc-arc.m +++ b/test/Analysis/objc-arc.m @@ -1,4 +1,5 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,osx.cocoa.RetainCount,deadcode -analyzer-store=region -verify -fblocks -analyzer-opt-analyze-nested-blocks -fobjc-arc %s +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,osx.cocoa.RetainCount,deadcode -verify -fblocks -analyzer-opt-analyze-nested-blocks -fobjc-arc -analyzer-config path-diagnostics-alternate=true -analyzer-output=plist-multi-file -o %t.plist %s +// RUN: FileCheck --input-file=%t.plist %s typedef signed char BOOL; typedef struct _NSZone NSZone; @@ -218,3 +219,1874 @@ void rdar11059275_negative() { (void) o; } +__attribute__((ns_returns_retained)) id rdar14061675_helper() { + return [[NSObject alloc] init]; +} + +id rdar14061675() { + // ARC produces an implicit cast here. We need to make sure the combination + // of that and the inlined call don't produce a spurious edge cycle. + id result = rdar14061675_helper(); + *(volatile int *)0 = 1; // expected-warning{{Dereference of null pointer}} + return result; +} + +// CHECK: diagnostics +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line53 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line54 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line54 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line54 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line54 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line54 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line54 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line54 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line54 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line54 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_working +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line54 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line93 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line93 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line94 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line94 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line94 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line94 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line94 +// CHECK-NEXT: col37 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Call to function 'CFDateCreate' returns a Core Foundation object with a +1 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Call to function 'CFDateCreate' returns a Core Foundation object with a +1 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line94 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line94 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line95 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line95 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line95 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line95 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line96 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line96 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line96 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object leaked: object allocated and stored into 'date' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: message +// CHECK-NEXT: Object leaked: object allocated and stored into 'date' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionPotential leak of an object stored into 'date' +// CHECK-NEXT: categoryMemory (Core Foundation/Objective-C) +// CHECK-NEXT: typeLeak +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_cf_leak +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line96 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line119 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line119 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line119 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line119 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line119 +// CHECK-NEXT: col25 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Value stored to 'x' during its initialization is never read +// CHECK-NEXT: message +// CHECK-NEXT: Value stored to 'x' during its initialization is never read +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionValue stored to 'x' during its initialization is never read +// CHECK-NEXT: categoryDead store +// CHECK-NEXT: typeDead initialization +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextrdar9424882 +// CHECK-NEXT: issue_hash1 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line119 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line139 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line139 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line139 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line139 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line139 +// CHECK-NEXT: col53 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Value stored to 'obj1' during its initialization is never read +// CHECK-NEXT: message +// CHECK-NEXT: Value stored to 'obj1' during its initialization is never read +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionValue stored to 'obj1' during its initialization is never read +// CHECK-NEXT: categoryDead store +// CHECK-NEXT: typeDead initialization +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextfrom_cf +// CHECK-NEXT: issue_hash1 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line139 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line144 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line144 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line144 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line144 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line144 +// CHECK-NEXT: col45 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Value stored to 'obj4' during its initialization is never read +// CHECK-NEXT: message +// CHECK-NEXT: Value stored to 'obj4' during its initialization is never read +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionValue stored to 'obj4' during its initialization is never read +// CHECK-NEXT: categoryDead store +// CHECK-NEXT: typeDead initialization +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextfrom_cf +// CHECK-NEXT: issue_hash6 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line144 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col44 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Value stored to 'obj5' during its initialization is never read +// CHECK-NEXT: message +// CHECK-NEXT: Value stored to 'obj5' during its initialization is never read +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionValue stored to 'obj5' during its initialization is never read +// CHECK-NEXT: categoryDead store +// CHECK-NEXT: typeDead initialization +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextfrom_cf +// CHECK-NEXT: issue_hash7 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col48 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Value stored to 'obj6' during its initialization is never read +// CHECK-NEXT: message +// CHECK-NEXT: Value stored to 'obj6' during its initialization is never read +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionValue stored to 'obj6' during its initialization is never read +// CHECK-NEXT: categoryDead store +// CHECK-NEXT: typeDead initialization +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextfrom_cf +// CHECK-NEXT: issue_hash8 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line139 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line139 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col44 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line145 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col46 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col48 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object leaked: object allocated and stored into 'obj5' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: message +// CHECK-NEXT: Object leaked: object allocated and stored into 'obj5' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionPotential leak of an object stored into 'obj5' +// CHECK-NEXT: categoryMemory (Core Foundation/Objective-C) +// CHECK-NEXT: typeLeak +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextfrom_cf +// CHECK-NEXT: issue_hash7 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line139 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line139 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col48 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Call to function 'CFCreateString' returns a Core Foundation object with a +1 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Call to function 'CFCreateString' returns a Core Foundation object with a +1 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line147 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line147 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line147 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object leaked: object allocated and stored into 'obj6' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: message +// CHECK-NEXT: Object leaked: object allocated and stored into 'obj6' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionPotential leak of an object stored into 'obj6' +// CHECK-NEXT: categoryMemory (Core Foundation/Objective-C) +// CHECK-NEXT: typeLeak +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextfrom_cf +// CHECK-NEXT: issue_hash8 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line147 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line150 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line150 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line150 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line150 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line150 +// CHECK-NEXT: col64 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Value stored to 'cf1' during its initialization is never read +// CHECK-NEXT: message +// CHECK-NEXT: Value stored to 'cf1' during its initialization is never read +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionValue stored to 'cf1' during its initialization is never read +// CHECK-NEXT: categoryDead store +// CHECK-NEXT: typeDead initialization +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextto_cf +// CHECK-NEXT: issue_hash1 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line150 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line151 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line151 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line151 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line151 +// CHECK-NEXT: col21 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line151 +// CHECK-NEXT: col67 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Value stored to 'cf2' during its initialization is never read +// CHECK-NEXT: message +// CHECK-NEXT: Value stored to 'cf2' during its initialization is never read +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionValue stored to 'cf2' during its initialization is never read +// CHECK-NEXT: categoryDead store +// CHECK-NEXT: typeDead initialization +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextto_cf +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line151 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line152 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line152 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line152 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line152 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line152 +// CHECK-NEXT: col55 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Value stored to 'cf3' during its initialization is never read +// CHECK-NEXT: message +// CHECK-NEXT: Value stored to 'cf3' during its initialization is never read +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionValue stored to 'cf3' during its initialization is never read +// CHECK-NEXT: categoryDead store +// CHECK-NEXT: typeDead initialization +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextto_cf +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line152 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col21 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col58 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Value stored to 'cf4' during its initialization is never read +// CHECK-NEXT: message +// CHECK-NEXT: Value stored to 'cf4' during its initialization is never read +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionValue stored to 'cf4' during its initialization is never read +// CHECK-NEXT: categoryDead store +// CHECK-NEXT: typeDead initialization +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextto_cf +// CHECK-NEXT: issue_hash4 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line153 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line164 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line164 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line165 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line165 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line165 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line165 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line165 +// CHECK-NEXT: col37 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Call to function 'CFDateCreate' returns a Core Foundation object with a +1 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Call to function 'CFDateCreate' returns a Core Foundation object with a +1 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line165 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line165 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line166 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line166 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line166 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line166 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line166 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object leaked: object allocated and stored into 'date' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: message +// CHECK-NEXT: Object leaked: object allocated and stored into 'date' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionPotential leak of an object stored into 'date' +// CHECK-NEXT: categoryMemory (Core Foundation/Objective-C) +// CHECK-NEXT: typeLeak +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_objc_unretainedObject +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line166 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line178 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line178 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line181 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line181 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line181 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line181 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line185 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line185 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line185 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line185 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line189 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line189 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line189 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line189 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line193 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line193 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line193 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line193 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line196 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line196 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line196 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line196 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line200 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line200 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line200 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line200 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line200 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Call to function 'CFCreateString' returns a Core Foundation object with a +1 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Call to function 'CFCreateString' returns a Core Foundation object with a +1 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line200 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line200 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line202 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line202 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line202 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: message +// CHECK-NEXT: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionPotential leak of an object +// CHECK-NEXT: categoryMemory (Core Foundation/Objective-C) +// CHECK-NEXT: typeLeak +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttest_objc_arrays +// CHECK-NEXT: issue_hash24 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line202 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line214 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line214 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line214 +// CHECK-NEXT: col39 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Method returns an Objective-C object with a +0 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Method returns an Objective-C object with a +0 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line214 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line214 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col18 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col21 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col20 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Reference count incremented. The object now has a +1 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Reference count incremented. The object now has a +1 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line215 +// CHECK-NEXT: col18 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line216 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line216 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line216 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object leaked: object allocated and stored into 'o' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: message +// CHECK-NEXT: Object leaked: object allocated and stored into 'o' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionPotential leak of an object stored into 'o' +// CHECK-NEXT: categoryMemory (Core Foundation/Objective-C) +// CHECK-NEXT: typeLeak +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextrdar11059275_positive +// CHECK-NEXT: issue_hash1 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line216 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line229 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line229 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextrdar14061675 +// CHECK-NEXT: issue_hash4 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line230 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: diff --git a/test/Analysis/objc-for.m b/test/Analysis/objc-for.m index ef149c4b14aa..2f14b8ad1aae 100644 --- a/test/Analysis/objc-for.m +++ b/test/Analysis/objc-for.m @@ -4,8 +4,10 @@ void clang_analyzer_eval(int); #define nil ((id)0) +typedef unsigned long NSUInteger; @protocol NSFastEnumeration - (int)countByEnumeratingWithState:(void *)state objects:(id *)objects count:(unsigned)count; +- (void)protocolMethod; @end @interface NSObject @@ -16,21 +18,37 @@ void clang_analyzer_eval(int); @end @interface NSArray : NSObject +- (NSUInteger)count; - (NSEnumerator *)objectEnumerator; @end @interface NSDictionary : NSObject +- (NSUInteger)count; +- (id)objectForKey:(id)key; +@end + +@interface NSDictionary (SomeCategory) +- (void)categoryMethodOnNSDictionary; @end @interface NSMutableDictionary : NSDictionary +- (void)setObject:(id)obj forKey:(id)key; +@end + +@interface NSMutableArray : NSArray +- (void)addObject:(id)obj; @end @interface NSSet : NSObject +- (NSUInteger)count; @end @interface NSPointerArray : NSObject @end +@interface NSString : NSObject +@end + void test() { id x; for (x in [NSArray testObject]) @@ -68,3 +86,241 @@ void testNonNil(id a, id b) { clang_analyzer_eval(b != nil); // expected-warning{{FALSE}} } +void collectionIsEmpty(NSMutableDictionary *D){ + if ([D count] == 0) { // Count is zero. + NSString *s = 0; + for (NSString *key in D) { + s = key; // Loop is never entered. + } + clang_analyzer_eval(s == 0); //expected-warning{{TRUE}} + } +} + +void processCollection(NSMutableDictionary *D); +void collectionIsEmptyCollectionIsModified(NSMutableDictionary *D){ + if ([D count] == 0) { // Count is zero. + NSString *s = 0; + processCollection(D); // However, the collection has changed. + for (NSString *key in D) { + s = key; // Loop might be entered. + } + clang_analyzer_eval(s == 0); //expected-warning{{FALSE}} //expected-warning{{TRUE}} + } +} + +int collectionIsEmptyNSSet(NSSet *S){ + if ([S count] == 2) { // Count is non zero. + int tapCounts[2]; + int i = 0; + for (NSString *elem in S) { + tapCounts[i]= 1; // Loop is entered. + i++; + } + return (tapCounts[0]); //no warning + } + return 0; +} + +int collectionIsNotEmptyNSArray(NSArray *A) { + int count = [A count]; + if (count > 0) { + int i; + int j; + for (NSString *a in A) { + i = 1; + j++; + } + clang_analyzer_eval(i == 1); // expected-warning {{TRUE}} + } + return 0; +} + +void onlySuppressExitAfterZeroIterations(NSMutableDictionary *D) { + if (D.count > 0) { + int *x; + int i; + for (NSString *key in D) { + x = 0; + i++; + } + // Test that this is reachable. + int y = *x; // expected-warning {{Dereference of null pointer}} + y++; + } +} + +void onlySuppressLoopExitAfterZeroIterations_WithContinue(NSMutableDictionary *D) { + if (D.count > 0) { + int *x; + int i; + for (NSString *key in D) { + x = 0; + i++; + continue; + } + // Test that this is reachable. + int y = *x; // expected-warning {{Dereference of null pointer}} + y++; + } +} + +int* getPtr(); +void onlySuppressLoopExitAfterZeroIterations_WithBreak(NSMutableDictionary *D) { + if (D.count > 0) { + int *x; + int i; + for (NSString *key in D) { + x = 0; + break; + x = getPtr(); + i++; + } + int y = *x; // expected-warning {{Dereference of null pointer}} + y++; + } +} + +int consistencyBetweenLoopsWhenCountIsUnconstrained(NSMutableDictionary *D, + int shouldUseCount) { + // Test with or without an initial count. + int count; + if (shouldUseCount) + count = [D count]; + + int i; + int j = 0; + for (NSString *key in D) { + i = 5; + j++; + } + for (NSString *key in D) { + return i; // no-warning + } + return 0; +} + +int consistencyBetweenLoopsWhenCountIsUnconstrained_dual(NSMutableDictionary *D, + int shouldUseCount) { + int count; + if (shouldUseCount) + count = [D count]; + + int i = 8; + int j = 1; + for (NSString *key in D) { + i = 0; + j++; + } + for (NSString *key in D) { + i = 5; + j++; + } + return 5/i; +} + +int consistencyCountThenLoop(NSArray *array) { + if ([array count] == 0) + return 0; + + int x; + for (id y in array) + x = 0; + return x; // no-warning +} + +int consistencyLoopThenCount(NSArray *array) { + int x; + for (id y in array) + x = 0; + + if ([array count] == 0) + return 0; + + return x; // no-warning +} + +void nonMutatingMethodsDoNotInvalidateCountDictionary(NSMutableDictionary *dict, + NSMutableArray *other) { + if ([dict count]) + return; + + for (id key in dict) + clang_analyzer_eval(0); // no-warning + + (void)[dict objectForKey:@""]; + + for (id key in dict) + clang_analyzer_eval(0); // no-warning + + [dict categoryMethodOnNSDictionary]; + + for (id key in dict) + clang_analyzer_eval(0); // no-warning + + [dict setObject:@"" forKey:@""]; + + for (id key in dict) + clang_analyzer_eval(0); // expected-warning{{FALSE}} + + // Reset. + if ([dict count]) + return; + + for (id key in dict) + clang_analyzer_eval(0); // no-warning + + [other addObject:dict]; + + for (id key in dict) + clang_analyzer_eval(0); // expected-warning{{FALSE}} +} + +void nonMutatingMethodsDoNotInvalidateCountArray(NSMutableArray *array, + NSMutableArray *other) { + if ([array count]) + return; + + for (id key in array) + clang_analyzer_eval(0); // no-warning + + (void)[array objectEnumerator]; + + for (id key in array) + clang_analyzer_eval(0); // no-warning + + [array addObject:@""]; + + for (id key in array) + clang_analyzer_eval(0); // expected-warning{{FALSE}} + + // Reset. + if ([array count]) + return; + + for (id key in array) + clang_analyzer_eval(0); // no-warning + + [other addObject:array]; + + for (id key in array) + clang_analyzer_eval(0); // expected-warning{{FALSE}} +} + +void protocolMethods(NSMutableArray *array) { + if ([array count]) + return; + + for (id key in array) + clang_analyzer_eval(0); // no-warning + + NSArray *immutableArray = array; + [immutableArray protocolMethod]; + + for (id key in array) + clang_analyzer_eval(0); // no-warning + + [array protocolMethod]; + + for (id key in array) + clang_analyzer_eval(0); // expected-warning{{FALSE}} +} diff --git a/test/Analysis/objc-properties.m b/test/Analysis/objc-properties.m index 87ab7f716395..323f41af54ce 100644 --- a/test/Analysis/objc-properties.m +++ b/test/Analysis/objc-properties.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=alpha.osx.cocoa.DirectIvarAssignment -fobjc-default-synthesize-properties -verify -fblocks %s +// RUN: %clang_cc1 -analyze -analyzer-checker=alpha.osx.cocoa.DirectIvarAssignment -verify -fblocks %s typedef signed char BOOL; @protocol NSObject - (BOOL)isEqual:(id)object; @end diff --git a/test/Analysis/objc/direct-ivar-assignment-in-annotated-functions.m b/test/Analysis/objc/direct-ivar-assignment-in-annotated-functions.m index f44978656998..f1ecd548eb3e 100644 --- a/test/Analysis/objc/direct-ivar-assignment-in-annotated-functions.m +++ b/test/Analysis/objc/direct-ivar-assignment-in-annotated-functions.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=alpha.osx.cocoa.DirectIvarAssignmentForAnnotatedFunctions -fobjc-default-synthesize-properties -verify -fblocks %s +// RUN: %clang_cc1 -analyze -analyzer-checker=alpha.osx.cocoa.DirectIvarAssignmentForAnnotatedFunctions -verify -fblocks %s typedef signed char BOOL; @protocol NSObject - (BOOL)isEqual:(id)object; @end diff --git a/test/Analysis/objc_invalidation.m b/test/Analysis/objc_invalidation.m index 6919feaccfc7..cd66444f4010 100644 --- a/test/Analysis/objc_invalidation.m +++ b/test/Analysis/objc_invalidation.m @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.osx.cocoa.InstanceVariableInvalidation -DRUN_IVAR_INVALIDATION -fobjc-default-synthesize-properties -verify %s -// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.osx.cocoa.MissingInvalidationMethod -DRUN_MISSING_INVALIDATION_METHOD -fobjc-default-synthesize-properties -verify %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.osx.cocoa.InstanceVariableInvalidation -DRUN_IVAR_INVALIDATION -verify %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.osx.cocoa.MissingInvalidationMethod -DRUN_MISSING_INVALIDATION_METHOD -verify %s extern void __assert_fail (__const char *__assertion, __const char *__file, unsigned int __line, __const char *__function) __attribute__ ((__noreturn__)); diff --git a/test/Analysis/operator-calls.cpp b/test/Analysis/operator-calls.cpp index 7461d75f673b..4bd7c12fad32 100644 --- a/test/Analysis/operator-calls.cpp +++ b/test/Analysis/operator-calls.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core,debug.ExprInspection -verify %s +// RUN: %clang_cc1 -std=c++11 -analyze -analyzer-checker=core,alpha.core,debug.ExprInspection -verify %s void clang_analyzer_eval(bool); struct X0 { }; @@ -85,3 +85,48 @@ namespace RValues { clang_analyzer_eval(+(coin ? getLargeOpaque() : getLargeOpaque())); // expected-warning{{UNKNOWN}} } } + +namespace SynthesizedAssignment { + struct A { + int a; + A& operator=(A& other) { a = -other.a; return *this; } + A& operator=(A&& other) { a = other.a+1; return *this; } + }; + + struct B { + int x; + A a[3]; + B& operator=(B&) = default; + B& operator=(B&&) = default; + }; + + // This used to produce a warning about the iteration variable in the + // synthesized assignment operator being undefined. + void testNoWarning() { + B v, u; + u = v; + } + + void testNoWarningMove() { + B v, u; + u = static_cast(v); + } + + void testConsistency() { + B v, u; + v.a[1].a = 47; + v.a[2].a = 42; + u = v; + clang_analyzer_eval(u.a[1].a == -47); // expected-warning{{TRUE}} + clang_analyzer_eval(u.a[2].a == -42); // expected-warning{{TRUE}} + } + + void testConsistencyMove() { + B v, u; + v.a[1].a = 47; + v.a[2].a = 42; + u = static_cast(v); + clang_analyzer_eval(u.a[1].a == 48); // expected-warning{{TRUE}} + clang_analyzer_eval(u.a[2].a == 43); // expected-warning{{TRUE}} + } +} diff --git a/test/Analysis/out-of-bounds.c b/test/Analysis/out-of-bounds.c index dd593c5f26c0..d89a23961903 100644 --- a/test/Analysis/out-of-bounds.c +++ b/test/Analysis/out-of-bounds.c @@ -154,3 +154,15 @@ void test_index_below_symboloc() { buf[-1] = 0; // no-warning; } +void test_incomplete_struct() { + extern struct incomplete incomplete; + int *p = (int *)&incomplete; + p[1] = 42; // no-warning +} + +void test_extern_void() { + extern void v; + int *p = (int *)&v; + p[1] = 42; // no-warning +} + diff --git a/test/Analysis/plist-macros.cpp b/test/Analysis/plist-macros.cpp new file mode 100644 index 000000000000..0e8518a6f59c --- /dev/null +++ b/test/Analysis/plist-macros.cpp @@ -0,0 +1,1597 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix -analyzer-eagerly-assume -verify %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix -analyzer-eagerly-assume -analyzer-output=plist-multi-file -analyzer-config path-diagnostics-alternate=ture %s -o %t.plist +// RUN: FileCheck --input-file=%t.plist %s + + +typedef __typeof(sizeof(int)) size_t; +void *malloc(size_t); + +#define mallocmemory int *x = (int*)malloc(12); +void noteOnMacro(int y) { + y++; + y--; + mallocmemory + y++; + y++; + delete x; // expected-warning {{Memory allocated by malloc() should be deallocated by free(), not 'delete'}} +} + +void macroIsFirstInFunction(int y) { + mallocmemory + y++; // expected-warning {{Potential leak of memory pointed to by 'x'}} +} + +#define checkmacro p==0 +void macroInExpressionAux(bool b); +int macroInExpression(int *p, int y) {; + y++; + macroInExpressionAux(checkmacro); + + return *p; // expected-warning {{Dereference of null pointer}} +} + +#define noPathNoteMacro y+y +int macroInExpressionNoNote(int *p, int y) {; + y++; + if (5 + noPathNoteMacro) + if (p) + ; + return *p; // expected-warning {{Dereference of null pointer}} +} + +#define macroWithArg(mp) mp==0 +int macroWithArgInExpression(int *p, int y) {; + y++; + if (macroWithArg(p)) + ; + return *p; // expected-warning {{Dereference of null pointer}} +} + +#define multiNoteMacroWithError \ + if (p) \ + ;\ + *p = 5; +int useMultiNoteMacroWithError(int *p, int y) {; + y++; + multiNoteMacroWithError // expected-warning {{Dereference of null pointer}} + + return *p; +} + +#define multiNoteMacro \ +if (p) \ + ;\ +if (y) \ + ; +int useMultiNote(int *p, int y) {; + y++; + multiNoteMacro + + return *p; // expected-warning {{Dereference of null pointer}} +} + +#define CALL_FN(a) null_deref(a) + +void null_deref(int *a) { + if (a) + return; + *a = 1; // expected-warning {{Dereference of null pointer}} +} + +void test1() { + CALL_FN(0); +} + +void test2(int *p) { + CALL_FN(p); +} +// CHECK: diagnostics +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line11 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line13 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line13 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line13 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line13 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line13 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Memory is allocated +// CHECK-NEXT: message +// CHECK-NEXT: Memory is allocated +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line13 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line13 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line16 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line16 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line16 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line16 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line16 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Memory allocated by malloc() should be deallocated by free(), not 'delete' +// CHECK-NEXT: message +// CHECK-NEXT: Memory allocated by malloc() should be deallocated by free(), not 'delete' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionMemory allocated by malloc() should be deallocated by free(), not 'delete' +// CHECK-NEXT: categoryMemory Error +// CHECK-NEXT: typeBad deallocator +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextnoteOnMacro +// CHECK-NEXT: issue_hash6 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line16 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line20 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line20 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line20 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Memory is allocated +// CHECK-NEXT: message +// CHECK-NEXT: Memory is allocated +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line20 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line20 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line21 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line21 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line21 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Potential leak of memory pointed to by 'x' +// CHECK-NEXT: message +// CHECK-NEXT: Potential leak of memory pointed to by 'x' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionPotential leak of memory pointed to by 'x' +// CHECK-NEXT: categoryMemory Error +// CHECK-NEXT: typeMemory leak +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextmacroIsFirstInFunction +// CHECK-NEXT: issue_hash1 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line21 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line27 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line27 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'p' is equal to null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'p' is equal to null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col24 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line28 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextmacroInExpression +// CHECK-NEXT: issue_hash4 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line30 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line35 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line35 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line36 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line36 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line36 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line36 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line37 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line37 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line37 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line37 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line37 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line37 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line37 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line37 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line37 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line37 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line37 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextmacroInExpressionNoNote +// CHECK-NEXT: issue_hash5 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line44 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line44 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line45 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line45 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line45 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line45 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line45 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line45 +// CHECK-NEXT: col18 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line45 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line45 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line45 +// CHECK-NEXT: col18 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'p' is equal to null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'p' is equal to null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line45 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line45 +// CHECK-NEXT: col18 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line47 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line47 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line47 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line47 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line47 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line47 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line47 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line47 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line47 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextmacroWithArgInExpression +// CHECK-NEXT: issue_hash4 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line47 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line55 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line55 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line56 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line56 +// CHECK-NEXT: col25 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line56 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line56 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line56 +// CHECK-NEXT: col25 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line56 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line56 +// CHECK-NEXT: col25 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line56 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line56 +// CHECK-NEXT: col25 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line56 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line56 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line56 +// CHECK-NEXT: col25 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextuseMultiNoteMacroWithError +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line56 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line67 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line67 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'y' is 0 +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'y' is 0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line68 +// CHECK-NEXT: col16 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextuseMultiNote +// CHECK-NEXT: issue_hash4 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line70 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line82 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line82 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line82 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Passing null pointer value via 1st parameter 'a' +// CHECK-NEXT: message +// CHECK-NEXT: Passing null pointer value via 1st parameter 'a' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line82 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line82 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line82 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling 'null_deref' +// CHECK-NEXT: message +// CHECK-NEXT: Calling 'null_deref' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line75 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'test1' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'test1' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line75 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line75 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line76 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'a') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextnull_deref +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line78 +// CHECK-NEXT: col6 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: diff --git a/test/Analysis/plist-output-alternate.m b/test/Analysis/plist-output-alternate.m index 93d0421d665e..ea5ace636373 100644 --- a/test/Analysis/plist-output-alternate.m +++ b/test/Analysis/plist-output-alternate.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx.cocoa.RetainCount,alpha.core -analyzer-store=region -analyzer-constraints=range -fblocks -analyzer-output=plist -o %t %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx.cocoa.RetainCount,alpha.core -fblocks -analyzer-output=plist -analyzer-config path-diagnostics-alternate=false -o %t %s // RUN: FileCheck --input-file %t %s void test_null_init(void) { @@ -925,12 +925,12 @@ void rdar8331641(int x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: line36 -// CHECK-NEXT: col10 +// CHECK-NEXT: col24 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: line36 -// CHECK-NEXT: col10 +// CHECK-NEXT: col24 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: @@ -946,12 +946,12 @@ void rdar8331641(int x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: line36 -// CHECK-NEXT: col10 +// CHECK-NEXT: col24 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: line36 -// CHECK-NEXT: col10 +// CHECK-NEXT: col24 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: diff --git a/test/Analysis/plist-output.m b/test/Analysis/plist-output.m index 3dfd6be2e713..f2823a060560 100644 --- a/test/Analysis/plist-output.m +++ b/test/Analysis/plist-output.m @@ -1,4 +1,4 @@ -// RUN: %clang --analyze %s -Xanalyzer -analyzer-checker=osx.cocoa.RetainCount -o %t.plist +// RUN: %clang --analyze %s -Xanalyzer -analyzer-checker=osx.cocoa.RetainCount -Xanalyzer -analyzer-config -Xanalyzer path-diagnostics-alternate=false -Xanalyzer -analyzer-config -Xanalyzer path-diagnostics-alternate=false -o %t.plist // RUN: FileCheck --input-file=%t.plist %s void test_null_init(void) { @@ -1062,12 +1062,12 @@ int testFoo(Foo *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: line36 -// CHECK-NEXT: col10 +// CHECK-NEXT: col24 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: line36 -// CHECK-NEXT: col10 +// CHECK-NEXT: col24 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: @@ -1083,12 +1083,12 @@ int testFoo(Foo *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: line36 -// CHECK-NEXT: col10 +// CHECK-NEXT: col24 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: line36 -// CHECK-NEXT: col10 +// CHECK-NEXT: col24 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: diff --git a/test/Analysis/pointer-to-member.cpp b/test/Analysis/pointer-to-member.cpp index c9150e8ca594..37d04399b7b7 100644 --- a/test/Analysis/pointer-to-member.cpp +++ b/test/Analysis/pointer-to-member.cpp @@ -33,6 +33,7 @@ void testConditionalUse() { void testComparison() { clang_analyzer_eval(&A::getPtr == &A::getPtr); // expected-warning{{TRUE}} + clang_analyzer_eval(&A::getPtr == 0); // expected-warning{{FALSE}} // FIXME: Should be TRUE. clang_analyzer_eval(&A::m_ptr == &A::m_ptr); // expected-warning{{UNKNOWN}} diff --git a/test/Analysis/ptr-arith.c b/test/Analysis/ptr-arith.c index 35faff4a1709..4a15bc24b906 100644 --- a/test/Analysis/ptr-arith.c +++ b/test/Analysis/ptr-arith.c @@ -280,3 +280,19 @@ void canonical_equal(int *lhs, int *rhs) { // FIXME: Should be FALSE. clang_analyzer_eval(rhs == lhs); // expected-warning{{UNKNOWN}} } + +void compare_element_region_and_base(int *p) { + int *q = p - 1; + clang_analyzer_eval(p == q); // expected-warning{{FALSE}} +} + +struct Point { + int x; + int y; +}; +void symbolicFieldRegion(struct Point *points, int i, int j) { + clang_analyzer_eval(&points[i].x == &points[j].x);// expected-warning{{UNKNOWN}} + clang_analyzer_eval(&points[i].x == &points[i].y);// expected-warning{{FALSE}} + clang_analyzer_eval(&points[i].x < &points[i].y);// expected-warning{{TRUE}} +} + diff --git a/test/Analysis/ptr-arith.cpp b/test/Analysis/ptr-arith.cpp new file mode 100644 index 000000000000..5f0951857b13 --- /dev/null +++ b/test/Analysis/ptr-arith.cpp @@ -0,0 +1,22 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -verify %s +// expected-no-diagnostics +struct X { + int *p; + int zero; + void foo () { + reset(p - 1); + } + void reset(int *in) { + while (in != p) // Loop must be entered. + zero = 1; + } +}; + +int test (int *in) { + X littleX; + littleX.zero = 0; + littleX.p = in; + littleX.foo(); + return 5/littleX.zero; // no-warning +} + diff --git a/test/Analysis/rdar-6540084.m b/test/Analysis/rdar-6540084.m index 7070709e57dd..e928710b387d 100644 --- a/test/Analysis/rdar-6540084.m +++ b/test/Analysis/rdar-6540084.m @@ -9,13 +9,13 @@ typedef struct _NSZone NSZone; @protocol NSObject - (BOOL)isEqual:(id)object; @end @interface NSObject {} @end extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone); -@class NSArray; +@class NSArray; // expected-note {{receiver is instance of class declared here}} @class NSMutableArray, NSIndexSet, NSView, NSPredicate, NSString, NSViewAnimation, NSTimer; // expected-note{{forward declaration of class here}} @interface FooBazController : NSObject {} @end typedef struct {} TazVersion; @class TazNode; -@interface TazGuttenberg : NSObject {} typedef NSUInteger BugsBunnyType; @end +@interface TazGuttenberg : NSObject {} typedef NSUInteger BugsBunnyType; @end // expected-note {{receiver is instance of class declared here}} @interface FooBaz : NSObject {} @property (nonatomic) BugsBunnyType matchType; @property (nonatomic, retain) NSArray *papyrus; @end diff --git a/test/Analysis/reference.cpp b/test/Analysis/reference.cpp index 1dabe7bc1a3d..bd5eaaa30909 100644 --- a/test/Analysis/reference.cpp +++ b/test/Analysis/reference.cpp @@ -75,6 +75,13 @@ namespace PR13440 { int (&x)[1]; int *m() { return x; } + + void testArrayToPointerDecayWithNonTypedValueRegion() { + int *p = x; + int *q = x; + clang_analyzer_eval(p[0] == q[0]); // expected-warning{{TRUE}} + } + }; void test() { diff --git a/test/Analysis/reinterpret-cast.cpp b/test/Analysis/reinterpret-cast.cpp index 59e6a539a11f..cb7cbfd325d8 100644 --- a/test/Analysis/reinterpret-cast.cpp +++ b/test/Analysis/reinterpret-cast.cpp @@ -86,3 +86,20 @@ namespace PR15345 { clang_analyzer_eval(p->x == 42); // expected-warning{{TRUE}} }; } + +int trackpointer_std_addressof() { + int x; + int *p = (int*)&reinterpret_cast(x); + *p = 6; + return x; // no warning +} + +void set_x1(int *&); +void set_x2(void *&); +int radar_13146953(void) { + int *x = 0, *y = 0; + + set_x1(x); + set_x2((void *&)y); + return *x + *y; // no warning +} \ No newline at end of file diff --git a/test/Analysis/retain-release-path-notes-gc.m b/test/Analysis/retain-release-path-notes-gc.m index f74d61fa9adc..40592f008b4b 100644 --- a/test/Analysis/retain-release-path-notes-gc.m +++ b/test/Analysis/retain-release-path-notes-gc.m @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,osx.coreFoundation.CFRetainRelease,osx.cocoa.ClassRelease,osx.cocoa.RetainCount -analyzer-store=region -fobjc-gc-only -analyzer-output=text -verify %s -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,osx.coreFoundation.CFRetainRelease,osx.cocoa.ClassRelease,osx.cocoa.RetainCount -analyzer-store=region -fobjc-gc-only -analyzer-output=plist-multi-file %s -o %t.plist +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,osx.coreFoundation.CFRetainRelease,osx.cocoa.ClassRelease,osx.cocoa.RetainCount -analyzer-store=region -fobjc-gc-only -analyzer-output=plist-multi-file -analyzer-config path-diagnostics-alternate=false %s -o %t.plist // RUN: FileCheck --input-file=%t.plist %s /*** @@ -40,17 +40,17 @@ CFTypeRef CFGetSomething(); void creationViaCFCreate () { - CFTypeRef leaked = CFCreateSomething(); // expected-warning{{leak}} expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count. Core Foundation objects are not automatically garbage collected}} - return; // expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} + CFTypeRef leaked = CFCreateSomething(); // expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count. Core Foundation objects are not automatically garbage collected}} + return; // expected-warning{{leak}} expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} } void makeCollectable () { - CFTypeRef leaked = CFCreateSomething(); // expected-warning{{leak}} expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count. Core Foundation objects are not automatically garbage collected}} + CFTypeRef leaked = CFCreateSomething(); // expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count. Core Foundation objects are not automatically garbage collected}} CFRetain(leaked); // expected-note{{Reference count incremented. The object now has a +2 retain count}} CFMakeCollectable(leaked); // expected-note{{In GC mode a call to 'CFMakeCollectable' decrements an object's retain count and registers the object with the garbage collector. An object must have a 0 retain count to be garbage collected. After this call its retain count is +1}} NSMakeCollectable(leaked); // expected-note{{In GC mode a call to 'NSMakeCollectable' decrements an object's retain count and registers the object with the garbage collector. Since it now has a 0 retain count the object can be automatically collected by the garbage collector}} CFRetain(leaked); // expected-note{{Reference count incremented. The object now has a +1 retain count. The object is not eligible for garbage collection until the retain count reaches 0 again}} - return; // expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} + return; // expected-warning{{leak}} expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} } void retainReleaseIgnored () { @@ -63,13 +63,13 @@ void retainReleaseIgnored () { @implementation Foo (FundamentalRuleUnderGC) - (id)getViolation { - id object = (id) CFCreateSomething(); // expected-warning{{leak}} expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count. Core Foundation objects are not automatically garbage collected}} - return object; // expected-note{{Object returned to caller as an owning reference (single retain count transferred to caller)}} expected-note{{Object leaked: object allocated and stored into 'object' and returned from method 'getViolation' is potentially leaked when using garbage collection. Callers of this method do not expect a returned object with a +1 retain count since they expect the object to be managed by the garbage collector}} + id object = (id) CFCreateSomething(); // expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count. Core Foundation objects are not automatically garbage collected}} + return object; // expected-warning{{leak}} expected-note{{Object returned to caller as an owning reference (single retain count transferred to caller)}} expected-note{{Object leaked: object allocated and stored into 'object' and returned from method 'getViolation' is potentially leaked when using garbage collection. Callers of this method do not expect a returned object with a +1 retain count since they expect the object to be managed by the garbage collector}} } - (id)copyViolation { - id object = (id) CFCreateSomething(); // expected-warning{{leak}} expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count. Core Foundation objects are not automatically garbage collected}} - return object; // expected-note{{Object returned to caller as an owning reference (single retain count transferred to caller)}} expected-note{{Object leaked: object allocated and stored into 'object' and returned from method 'copyViolation' is potentially leaked when using garbage collection. Callers of this method do not expect a returned object with a +1 retain count since they expect the object to be managed by the garbage collector}} + id object = (id) CFCreateSomething(); // expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count. Core Foundation objects are not automatically garbage collected}} + return object; // expected-warning{{leak}} expected-note{{Object returned to caller as an owning reference (single retain count transferred to caller)}} expected-note{{Object leaked: object allocated and stored into 'object' and returned from method 'copyViolation' is potentially leaked when using garbage collection. Callers of this method do not expect a returned object with a +1 retain count since they expect the object to be managed by the garbage collector}} } @end diff --git a/test/Analysis/retain-release-path-notes.m b/test/Analysis/retain-release-path-notes.m index a3c681ae3750..4b16c714e902 100644 --- a/test/Analysis/retain-release-path-notes.m +++ b/test/Analysis/retain-release-path-notes.m @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,osx.coreFoundation.CFRetainRelease,osx.cocoa.ClassRelease,osx.cocoa.RetainCount -analyzer-store=region -analyzer-output=text -verify %s -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,osx.coreFoundation.CFRetainRelease,osx.cocoa.ClassRelease,osx.cocoa.RetainCount -analyzer-store=region -analyzer-output=plist-multi-file %s -o %t +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,osx.coreFoundation.CFRetainRelease,osx.cocoa.ClassRelease,osx.cocoa.RetainCount -analyzer-store=region -analyzer-output=plist-multi-file -analyzer-config path-diagnostics-alternate=false %s -o %t // RUN: FileCheck --input-file=%t %s /*** @@ -34,6 +34,7 @@ GC-specific notes should go in retain-release-path-notes-gc.m. typedef struct CFType *CFTypeRef; CFTypeRef CFRetain(CFTypeRef); void CFRelease(CFTypeRef); +CFTypeRef CFAutorelease(CFTypeRef __attribute__((cf_consumed))); id NSMakeCollectable(CFTypeRef); CFTypeRef CFMakeCollectable(CFTypeRef); @@ -43,33 +44,33 @@ CFTypeRef CFGetSomething(); void creationViaAlloc () { - id leaked = [[NSObject alloc] init]; // expected-warning{{leak}} expected-note{{Method returns an Objective-C object with a +1 retain count}} - return; // expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} + id leaked = [[NSObject alloc] init]; // expected-note{{Method returns an Objective-C object with a +1 retain count}} + return; // expected-warning{{leak}} expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} } void creationViaCFCreate () { - CFTypeRef leaked = CFCreateSomething(); // expected-warning{{leak}} expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count}} - return; // expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} + CFTypeRef leaked = CFCreateSomething(); // expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count}} + return; // expected-warning{{leak}} expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} } void acquisitionViaMethod (Foo *foo) { - id leaked = [foo methodWithValue]; // expected-warning{{leak}} expected-note{{Method returns an Objective-C object with a +0 retain count}} + id leaked = [foo methodWithValue]; // expected-note{{Method returns an Objective-C object with a +0 retain count}} [leaked retain]; // expected-note{{Reference count incremented. The object now has a +1 retain count}} [leaked retain]; // expected-note{{Reference count incremented. The object now has a +2 retain count}} [leaked release]; // expected-note{{Reference count decremented. The object now has a +1 retain count}} - return; // expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} + return; // expected-warning{{leak}} expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} } void acquisitionViaProperty (Foo *foo) { - id leaked = foo.propertyValue; // expected-warning{{leak}} expected-note{{Property returns an Objective-C object with a +0 retain count}} + id leaked = foo.propertyValue; // expected-note{{Property returns an Objective-C object with a +0 retain count}} [leaked retain]; // expected-note{{Reference count incremented. The object now has a +1 retain count}} - return; // expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} + return; // expected-warning{{leak}} expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} } void acquisitionViaCFFunction () { - CFTypeRef leaked = CFGetSomething(); // expected-warning{{leak}} expected-note{{Call to function 'CFGetSomething' returns a Core Foundation object with a +0 retain count}} + CFTypeRef leaked = CFGetSomething(); // expected-note{{Call to function 'CFGetSomething' returns a Core Foundation object with a +0 retain count}} CFRetain(leaked); // expected-note{{Reference count incremented. The object now has a +1 retain count}} - return; // expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} + return; // expected-warning{{leak}} expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} } void explicitDealloc () { @@ -98,10 +99,10 @@ void autoreleaseUnowned (Foo *foo) { } void makeCollectableIgnored () { - CFTypeRef leaked = CFCreateSomething(); // expected-warning{{leak}} expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count}} + CFTypeRef leaked = CFCreateSomething(); // expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count}} CFMakeCollectable(leaked); // expected-note{{When GC is not enabled a call to 'CFMakeCollectable' has no effect on its argument}} NSMakeCollectable(leaked); // expected-note{{When GC is not enabled a call to 'NSMakeCollectable' has no effect on its argument}} - return; // expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} + return; // expected-warning{{leak}} expected-note{{Object leaked: object allocated and stored into 'leaked' is not referenced later in this execution path and has a retain count of +1}} } CFTypeRef CFCopyRuleViolation () { @@ -110,8 +111,8 @@ CFTypeRef CFCopyRuleViolation () { } CFTypeRef CFGetRuleViolation () { - CFTypeRef object = CFCreateSomething(); // expected-warning{{leak}} expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count}} - return object; // expected-note{{Object returned to caller as an owning reference (single retain count transferred to caller)}} expected-note{{Object leaked: object allocated and stored into 'object' is returned from a function whose name ('CFGetRuleViolation') does not contain 'Copy' or 'Create'. This violates the naming convention rules given in the Memory Management Guide for Core Foundation}} + CFTypeRef object = CFCreateSomething(); // expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count}} + return object; // expected-warning{{leak}} expected-note{{Object returned to caller as an owning reference (single retain count transferred to caller)}} expected-note{{Object leaked: object allocated and stored into 'object' is returned from a function whose name ('CFGetRuleViolation') does not contain 'Copy' or 'Create'. This violates the naming convention rules given in the Memory Management Guide for Core Foundation}} } @implementation Foo (FundamentalMemoryManagementRules) @@ -131,8 +132,8 @@ CFTypeRef CFGetRuleViolation () { } - (id)getViolation { - id result = [[Foo alloc] init]; // expected-warning{{leak}} expected-note{{Method returns an Objective-C object with a +1 retain count}} - return result; // expected-note{{Object returned to caller as an owning reference (single retain count transferred to caller)}} expected-note{{Object leaked: object allocated and stored into 'result' is returned from a method whose name ('getViolation') does not start with 'copy', 'mutableCopy', 'alloc' or 'new'. This violates the naming convention rules given in the Memory Management Guide for Cocoa}} + id result = [[Foo alloc] init]; // expected-note{{Method returns an Objective-C object with a +1 retain count}} + return result; // expected-warning{{leak}} expected-note{{Object returned to caller as an owning reference (single retain count transferred to caller)}} expected-note{{Object leaked: object allocated and stored into 'result' is returned from a method whose name ('getViolation') does not start with 'copy', 'mutableCopy', 'alloc' or 'new'. This violates the naming convention rules given in the Memory Management Guide for Cocoa}} } - (id)copyAutorelease { @@ -228,12 +229,12 @@ static int Cond; // expected-note@-3 {{Returning from 'initX'}} // expected-note@-4 {{Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1}} // initI is inlined because the allocation happens within initY - id y = [[MyObj alloc] initY]; // expected-warning {{Potential leak of an object}} + id y = [[MyObj alloc] initY]; // expected-note@-1 {{Calling 'initY'}} // expected-note@-2 {{Returning from 'initY'}} // initZ is not inlined - id z = [[MyObj alloc] initZ]; + id z = [[MyObj alloc] initZ]; // expected-warning {{Potential leak of an object}} // expected-note@-1 {{Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1}} [x release]; @@ -241,6 +242,28 @@ static int Cond; } @end + +void CFOverAutorelease() { + CFTypeRef object = CFCreateSomething(); // expected-note{{Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count}} + CFAutorelease(object); // expected-note{{Object autoreleased}} + CFAutorelease(object); // expected-note{{Object autoreleased}} + return; // expected-warning{{Object autoreleased too many times}} expected-note{{Object was autoreleased 2 times but the object has a +1 retain count}} +} + +void CFAutoreleaseUnowned() { + CFTypeRef object = CFGetSomething(); // expected-note{{Call to function 'CFGetSomething' returns a Core Foundation object with a +0 retain count}} + CFAutorelease(object); // expected-note{{Object autoreleased}} + return; // expected-warning{{Object autoreleased too many times}} expected-note{{Object was autoreleased but has a +0 retain count}} +} + +void CFAutoreleaseUnownedMixed() { + CFTypeRef object = CFGetSomething(); // expected-note{{Call to function 'CFGetSomething' returns a Core Foundation object with a +0 retain count}} + CFAutorelease(object); // expected-note{{Object autoreleased}} + [(id)object autorelease]; // expected-note{{Object autoreleased}} + return; // expected-warning{{Object autoreleased too many times}} expected-note{{Object was autoreleased 2 times but the object has a +0 retain count}} +} + + // CHECK: diagnostics // CHECK-NEXT: // CHECK-NEXT: @@ -254,12 +277,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line46 +// CHECK-NEXT: line47 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line46 +// CHECK-NEXT: line47 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -267,12 +290,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line46 +// CHECK-NEXT: line47 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line46 +// CHECK-NEXT: line47 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -284,7 +307,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line46 +// CHECK-NEXT: line47 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -292,12 +315,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line46 +// CHECK-NEXT: line47 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line46 +// CHECK-NEXT: line47 // CHECK-NEXT: col37 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -317,12 +340,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line46 +// CHECK-NEXT: line47 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line46 +// CHECK-NEXT: line47 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -330,12 +353,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -347,7 +370,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -355,12 +378,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -381,7 +404,7 @@ static int Cond; // CHECK-NEXT: issue_hash1 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -397,12 +420,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line51 +// CHECK-NEXT: line52 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line51 +// CHECK-NEXT: line52 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -410,12 +433,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line51 +// CHECK-NEXT: line52 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line51 +// CHECK-NEXT: line52 // CHECK-NEXT: col38 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -427,7 +450,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line51 +// CHECK-NEXT: line52 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -435,12 +458,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line51 +// CHECK-NEXT: line52 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line51 +// CHECK-NEXT: line52 // CHECK-NEXT: col40 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -460,12 +483,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line51 +// CHECK-NEXT: line52 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line51 +// CHECK-NEXT: line52 // CHECK-NEXT: col38 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -473,12 +496,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line52 +// CHECK-NEXT: line53 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line52 +// CHECK-NEXT: line53 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -490,7 +513,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line52 +// CHECK-NEXT: line53 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -498,12 +521,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line52 +// CHECK-NEXT: line53 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line52 +// CHECK-NEXT: line53 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -524,7 +547,7 @@ static int Cond; // CHECK-NEXT: issue_hash1 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line52 +// CHECK-NEXT: line53 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -540,12 +563,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line57 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line57 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -553,12 +576,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line57 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line57 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -570,7 +593,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line57 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -578,12 +601,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line57 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line57 // CHECK-NEXT: col35 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -603,12 +626,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line57 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line57 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -616,12 +639,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line57 +// CHECK-NEXT: line58 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line57 +// CHECK-NEXT: line58 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -633,7 +656,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line57 +// CHECK-NEXT: line58 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -641,24 +664,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line57 +// CHECK-NEXT: line58 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line57 +// CHECK-NEXT: line58 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line57 +// CHECK-NEXT: line58 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line57 +// CHECK-NEXT: line58 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -678,12 +701,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line57 +// CHECK-NEXT: line58 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line57 +// CHECK-NEXT: line58 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -691,12 +714,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line59 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line59 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -708,7 +731,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line59 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -716,24 +739,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line59 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line59 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line59 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line59 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -753,12 +776,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line59 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line59 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -766,12 +789,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -783,7 +806,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -791,24 +814,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -828,12 +851,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -841,12 +864,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line61 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line61 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -858,7 +881,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line61 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -866,12 +889,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line61 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line61 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -892,7 +915,7 @@ static int Cond; // CHECK-NEXT: issue_hash1 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line61 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -908,12 +931,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line64 +// CHECK-NEXT: line65 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line64 +// CHECK-NEXT: line65 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -921,12 +944,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line64 +// CHECK-NEXT: line65 // CHECK-NEXT: col19 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line64 +// CHECK-NEXT: line65 // CHECK-NEXT: col31 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -938,7 +961,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line64 +// CHECK-NEXT: line65 // CHECK-NEXT: col19 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -946,12 +969,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line64 +// CHECK-NEXT: line65 // CHECK-NEXT: col19 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line64 +// CHECK-NEXT: line65 // CHECK-NEXT: col31 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -971,12 +994,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line64 +// CHECK-NEXT: line65 // CHECK-NEXT: col19 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line64 +// CHECK-NEXT: line65 // CHECK-NEXT: col31 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -984,12 +1007,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line65 +// CHECK-NEXT: line66 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line65 +// CHECK-NEXT: line66 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1001,7 +1024,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line65 +// CHECK-NEXT: line66 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1009,24 +1032,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line65 +// CHECK-NEXT: line66 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line65 +// CHECK-NEXT: line66 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line65 +// CHECK-NEXT: line66 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line65 +// CHECK-NEXT: line66 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1046,12 +1069,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line65 +// CHECK-NEXT: line66 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line65 +// CHECK-NEXT: line66 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1059,12 +1082,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1076,7 +1099,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1084,12 +1107,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1110,7 +1133,7 @@ static int Cond; // CHECK-NEXT: issue_hash1 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1126,12 +1149,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line70 +// CHECK-NEXT: line71 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line70 +// CHECK-NEXT: line71 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1139,12 +1162,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line70 +// CHECK-NEXT: line71 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line70 +// CHECK-NEXT: line71 // CHECK-NEXT: col35 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1156,7 +1179,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line70 +// CHECK-NEXT: line71 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1164,12 +1187,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line70 +// CHECK-NEXT: line71 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line70 +// CHECK-NEXT: line71 // CHECK-NEXT: col37 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1189,12 +1212,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line70 +// CHECK-NEXT: line71 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line70 +// CHECK-NEXT: line71 // CHECK-NEXT: col35 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1202,12 +1225,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line71 +// CHECK-NEXT: line72 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line71 +// CHECK-NEXT: line72 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1219,7 +1242,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line71 +// CHECK-NEXT: line72 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1227,24 +1250,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line71 +// CHECK-NEXT: line72 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line71 +// CHECK-NEXT: line72 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line71 +// CHECK-NEXT: line72 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line71 +// CHECK-NEXT: line72 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1264,12 +1287,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line71 +// CHECK-NEXT: line72 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line71 +// CHECK-NEXT: line72 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1277,12 +1300,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line72 +// CHECK-NEXT: line73 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line72 +// CHECK-NEXT: line73 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1294,7 +1317,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line72 +// CHECK-NEXT: line73 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1302,12 +1325,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line72 +// CHECK-NEXT: line73 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line72 +// CHECK-NEXT: line73 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1328,7 +1351,7 @@ static int Cond; // CHECK-NEXT: issue_hash1 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line72 +// CHECK-NEXT: line73 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1344,12 +1367,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line77 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line77 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1357,12 +1380,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line77 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line77 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1374,7 +1397,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line77 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1382,12 +1405,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line77 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line77 // CHECK-NEXT: col37 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1407,12 +1430,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line77 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line77 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1420,12 +1443,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line78 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line78 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1437,7 +1460,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line78 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1445,24 +1468,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line78 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line78 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line78 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line78 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1482,12 +1505,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line78 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line78 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1495,12 +1518,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line78 +// CHECK-NEXT: line79 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line78 +// CHECK-NEXT: line79 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1512,7 +1535,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line78 +// CHECK-NEXT: line79 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1520,12 +1543,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line78 +// CHECK-NEXT: line79 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line78 +// CHECK-NEXT: line79 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1546,7 +1569,7 @@ static int Cond; // CHECK-NEXT: issue_hash3 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line78 +// CHECK-NEXT: line79 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1562,12 +1585,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line82 +// CHECK-NEXT: line83 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line82 +// CHECK-NEXT: line83 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1575,12 +1598,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line82 +// CHECK-NEXT: line83 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line82 +// CHECK-NEXT: line83 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1592,7 +1615,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line82 +// CHECK-NEXT: line83 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1600,12 +1623,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line82 +// CHECK-NEXT: line83 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line82 +// CHECK-NEXT: line83 // CHECK-NEXT: col37 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1625,12 +1648,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line82 +// CHECK-NEXT: line83 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line82 +// CHECK-NEXT: line83 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1638,12 +1661,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1655,7 +1678,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1663,24 +1686,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1700,12 +1723,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1713,12 +1736,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line84 +// CHECK-NEXT: line85 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line84 +// CHECK-NEXT: line85 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1730,7 +1753,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line84 +// CHECK-NEXT: line85 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1738,12 +1761,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line84 +// CHECK-NEXT: line85 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line84 +// CHECK-NEXT: line85 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1764,7 +1787,7 @@ static int Cond; // CHECK-NEXT: issue_hash3 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line84 +// CHECK-NEXT: line85 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1780,12 +1803,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line88 +// CHECK-NEXT: line89 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line88 +// CHECK-NEXT: line89 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1793,12 +1816,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line88 +// CHECK-NEXT: line89 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line88 +// CHECK-NEXT: line89 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1810,7 +1833,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line88 +// CHECK-NEXT: line89 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1818,12 +1841,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line88 +// CHECK-NEXT: line89 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line88 +// CHECK-NEXT: line89 // CHECK-NEXT: col37 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1843,12 +1866,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line88 +// CHECK-NEXT: line89 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line88 +// CHECK-NEXT: line89 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1856,12 +1879,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line89 +// CHECK-NEXT: line90 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line89 +// CHECK-NEXT: line90 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1873,7 +1896,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line89 +// CHECK-NEXT: line90 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1881,24 +1904,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line89 +// CHECK-NEXT: line90 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line89 +// CHECK-NEXT: line90 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line89 +// CHECK-NEXT: line90 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line89 +// CHECK-NEXT: line90 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1918,12 +1941,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line89 +// CHECK-NEXT: line90 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line89 +// CHECK-NEXT: line90 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1931,12 +1954,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line90 +// CHECK-NEXT: line91 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line90 +// CHECK-NEXT: line91 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1948,7 +1971,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line90 +// CHECK-NEXT: line91 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1956,24 +1979,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line90 +// CHECK-NEXT: line91 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line90 +// CHECK-NEXT: line91 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line90 +// CHECK-NEXT: line91 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line90 +// CHECK-NEXT: line91 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1993,12 +2016,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line90 +// CHECK-NEXT: line91 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line90 +// CHECK-NEXT: line91 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2006,12 +2029,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line91 +// CHECK-NEXT: line92 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line91 +// CHECK-NEXT: line92 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2023,7 +2046,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line91 +// CHECK-NEXT: line92 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2031,12 +2054,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line91 +// CHECK-NEXT: line92 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line91 +// CHECK-NEXT: line92 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2057,7 +2080,7 @@ static int Cond; // CHECK-NEXT: issue_hash4 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line91 +// CHECK-NEXT: line92 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2073,12 +2096,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line95 +// CHECK-NEXT: line96 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line95 +// CHECK-NEXT: line96 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2086,12 +2109,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line95 +// CHECK-NEXT: line96 // CHECK-NEXT: col19 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line95 +// CHECK-NEXT: line96 // CHECK-NEXT: col31 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2103,7 +2126,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line95 +// CHECK-NEXT: line96 // CHECK-NEXT: col19 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2111,12 +2134,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line95 +// CHECK-NEXT: line96 // CHECK-NEXT: col19 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line95 +// CHECK-NEXT: line96 // CHECK-NEXT: col31 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2136,12 +2159,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line95 +// CHECK-NEXT: line96 // CHECK-NEXT: col19 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line95 +// CHECK-NEXT: line96 // CHECK-NEXT: col31 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2149,12 +2172,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line96 +// CHECK-NEXT: line97 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line96 +// CHECK-NEXT: line97 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2166,7 +2189,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line96 +// CHECK-NEXT: line97 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2174,24 +2197,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line96 +// CHECK-NEXT: line97 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line96 +// CHECK-NEXT: line97 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line96 +// CHECK-NEXT: line97 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line96 +// CHECK-NEXT: line97 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2211,12 +2234,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line96 +// CHECK-NEXT: line97 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line96 +// CHECK-NEXT: line97 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2224,12 +2247,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line97 +// CHECK-NEXT: line98 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line97 +// CHECK-NEXT: line98 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2241,7 +2264,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line97 +// CHECK-NEXT: line98 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2249,12 +2272,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line97 +// CHECK-NEXT: line98 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line97 +// CHECK-NEXT: line98 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2275,7 +2298,7 @@ static int Cond; // CHECK-NEXT: issue_hash3 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line97 +// CHECK-NEXT: line98 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2291,12 +2314,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line101 +// CHECK-NEXT: line102 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line101 +// CHECK-NEXT: line102 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2304,12 +2327,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line101 +// CHECK-NEXT: line102 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line101 +// CHECK-NEXT: line102 // CHECK-NEXT: col38 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2321,7 +2344,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line101 +// CHECK-NEXT: line102 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2329,12 +2352,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line101 +// CHECK-NEXT: line102 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line101 +// CHECK-NEXT: line102 // CHECK-NEXT: col40 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2354,12 +2377,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line101 +// CHECK-NEXT: line102 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line101 +// CHECK-NEXT: line102 // CHECK-NEXT: col38 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2367,12 +2390,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line102 +// CHECK-NEXT: line103 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line102 +// CHECK-NEXT: line103 // CHECK-NEXT: col19 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2384,7 +2407,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line102 +// CHECK-NEXT: line103 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2392,24 +2415,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line102 +// CHECK-NEXT: line103 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line102 +// CHECK-NEXT: line103 // CHECK-NEXT: col27 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line102 +// CHECK-NEXT: line103 // CHECK-NEXT: col21 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line102 +// CHECK-NEXT: line103 // CHECK-NEXT: col26 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2429,12 +2452,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line102 +// CHECK-NEXT: line103 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line102 +// CHECK-NEXT: line103 // CHECK-NEXT: col19 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2442,12 +2465,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line103 +// CHECK-NEXT: line104 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line103 +// CHECK-NEXT: line104 // CHECK-NEXT: col19 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2459,7 +2482,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line103 +// CHECK-NEXT: line104 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2467,24 +2490,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line103 +// CHECK-NEXT: line104 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line103 +// CHECK-NEXT: line104 // CHECK-NEXT: col27 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line103 +// CHECK-NEXT: line104 // CHECK-NEXT: col21 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line103 +// CHECK-NEXT: line104 // CHECK-NEXT: col26 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2504,12 +2527,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line103 +// CHECK-NEXT: line104 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line103 +// CHECK-NEXT: line104 // CHECK-NEXT: col19 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2517,12 +2540,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line104 +// CHECK-NEXT: line105 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line104 +// CHECK-NEXT: line105 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2534,7 +2557,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line104 +// CHECK-NEXT: line105 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2542,12 +2565,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line104 +// CHECK-NEXT: line105 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line104 +// CHECK-NEXT: line105 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2568,7 +2591,7 @@ static int Cond; // CHECK-NEXT: issue_hash1 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line104 +// CHECK-NEXT: line105 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2584,12 +2607,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line108 +// CHECK-NEXT: line109 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line108 +// CHECK-NEXT: line109 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2597,12 +2620,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line108 +// CHECK-NEXT: line109 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line108 +// CHECK-NEXT: line109 // CHECK-NEXT: col35 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2614,7 +2637,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line108 +// CHECK-NEXT: line109 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2622,12 +2645,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line108 +// CHECK-NEXT: line109 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line108 +// CHECK-NEXT: line109 // CHECK-NEXT: col37 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2647,12 +2670,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line108 +// CHECK-NEXT: line109 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line108 +// CHECK-NEXT: line109 // CHECK-NEXT: col35 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2660,12 +2683,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line109 +// CHECK-NEXT: line110 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line109 +// CHECK-NEXT: line110 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2677,7 +2700,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line109 +// CHECK-NEXT: line110 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2685,24 +2708,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line109 +// CHECK-NEXT: line110 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line109 +// CHECK-NEXT: line110 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line109 +// CHECK-NEXT: line110 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line109 +// CHECK-NEXT: line110 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2718,7 +2741,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line109 +// CHECK-NEXT: line110 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2726,12 +2749,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line109 +// CHECK-NEXT: line110 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line109 +// CHECK-NEXT: line110 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2752,7 +2775,7 @@ static int Cond; // CHECK-NEXT: issue_hash2 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line109 +// CHECK-NEXT: line110 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2768,12 +2791,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line113 +// CHECK-NEXT: line114 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line113 +// CHECK-NEXT: line114 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2781,12 +2804,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line113 +// CHECK-NEXT: line114 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line113 +// CHECK-NEXT: line114 // CHECK-NEXT: col38 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2798,7 +2821,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line113 +// CHECK-NEXT: line114 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2806,12 +2829,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line113 +// CHECK-NEXT: line114 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line113 +// CHECK-NEXT: line114 // CHECK-NEXT: col40 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2831,12 +2854,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line113 +// CHECK-NEXT: line114 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line113 +// CHECK-NEXT: line114 // CHECK-NEXT: col38 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2844,12 +2867,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line114 +// CHECK-NEXT: line115 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line114 +// CHECK-NEXT: line115 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2861,7 +2884,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line114 +// CHECK-NEXT: line115 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2869,24 +2892,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line114 +// CHECK-NEXT: line115 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line114 +// CHECK-NEXT: line115 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line114 +// CHECK-NEXT: line115 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line114 +// CHECK-NEXT: line115 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2902,7 +2925,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line114 +// CHECK-NEXT: line115 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2910,12 +2933,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line114 +// CHECK-NEXT: line115 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line114 +// CHECK-NEXT: line115 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2936,7 +2959,7 @@ static int Cond; // CHECK-NEXT: issue_hash1 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line114 +// CHECK-NEXT: line115 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2952,12 +2975,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line119 +// CHECK-NEXT: line120 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line119 +// CHECK-NEXT: line120 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2965,12 +2988,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line119 +// CHECK-NEXT: line120 // CHECK-NEXT: col20 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line119 +// CHECK-NEXT: line120 // CHECK-NEXT: col32 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2982,7 +3005,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line119 +// CHECK-NEXT: line120 // CHECK-NEXT: col20 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -2990,12 +3013,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line119 +// CHECK-NEXT: line120 // CHECK-NEXT: col20 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line119 +// CHECK-NEXT: line120 // CHECK-NEXT: col32 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3015,12 +3038,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line119 +// CHECK-NEXT: line120 // CHECK-NEXT: col20 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line119 +// CHECK-NEXT: line120 // CHECK-NEXT: col32 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3028,12 +3051,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line120 +// CHECK-NEXT: line121 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line120 +// CHECK-NEXT: line121 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3045,7 +3068,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line120 +// CHECK-NEXT: line121 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3053,24 +3076,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line120 +// CHECK-NEXT: line121 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line120 +// CHECK-NEXT: line121 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line120 +// CHECK-NEXT: line121 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line120 +// CHECK-NEXT: line121 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3086,7 +3109,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line120 +// CHECK-NEXT: line121 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3094,12 +3117,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line120 +// CHECK-NEXT: line121 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line120 +// CHECK-NEXT: line121 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3120,7 +3143,7 @@ static int Cond; // CHECK-NEXT: issue_hash2 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line120 +// CHECK-NEXT: line121 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3136,12 +3159,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line124 +// CHECK-NEXT: line125 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line124 +// CHECK-NEXT: line125 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3149,12 +3172,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line124 +// CHECK-NEXT: line125 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line124 +// CHECK-NEXT: line125 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3166,7 +3189,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line124 +// CHECK-NEXT: line125 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3174,12 +3197,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line124 +// CHECK-NEXT: line125 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line124 +// CHECK-NEXT: line125 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3199,12 +3222,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line124 +// CHECK-NEXT: line125 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line124 +// CHECK-NEXT: line125 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3212,12 +3235,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line125 +// CHECK-NEXT: line126 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line125 +// CHECK-NEXT: line126 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3229,7 +3252,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line125 +// CHECK-NEXT: line126 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3237,24 +3260,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line125 +// CHECK-NEXT: line126 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line125 +// CHECK-NEXT: line126 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line125 +// CHECK-NEXT: line126 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line125 +// CHECK-NEXT: line126 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3270,7 +3293,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line125 +// CHECK-NEXT: line126 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3278,12 +3301,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line125 +// CHECK-NEXT: line126 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line125 +// CHECK-NEXT: line126 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3304,7 +3327,7 @@ static int Cond; // CHECK-NEXT: issue_hash2 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line125 +// CHECK-NEXT: line126 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3320,12 +3343,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line129 +// CHECK-NEXT: line130 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line129 +// CHECK-NEXT: line130 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3333,12 +3356,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line129 +// CHECK-NEXT: line130 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line129 +// CHECK-NEXT: line130 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3350,7 +3373,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line129 +// CHECK-NEXT: line130 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3358,12 +3381,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line129 +// CHECK-NEXT: line130 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line129 +// CHECK-NEXT: line130 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3383,12 +3406,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line129 +// CHECK-NEXT: line130 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line129 +// CHECK-NEXT: line130 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3396,12 +3419,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line130 +// CHECK-NEXT: line131 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line130 +// CHECK-NEXT: line131 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3413,7 +3436,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line130 +// CHECK-NEXT: line131 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3421,24 +3444,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line130 +// CHECK-NEXT: line131 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line130 +// CHECK-NEXT: line131 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line130 +// CHECK-NEXT: line131 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line130 +// CHECK-NEXT: line131 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3454,7 +3477,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line130 +// CHECK-NEXT: line131 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3462,12 +3485,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line130 +// CHECK-NEXT: line131 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line130 +// CHECK-NEXT: line131 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3488,7 +3511,7 @@ static int Cond; // CHECK-NEXT: issue_hash2 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line130 +// CHECK-NEXT: line131 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3504,12 +3527,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line134 +// CHECK-NEXT: line135 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line134 +// CHECK-NEXT: line135 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3517,12 +3540,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line134 +// CHECK-NEXT: line135 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line134 +// CHECK-NEXT: line135 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3534,7 +3557,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line134 +// CHECK-NEXT: line135 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3542,12 +3565,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line134 +// CHECK-NEXT: line135 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line134 +// CHECK-NEXT: line135 // CHECK-NEXT: col32 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3567,12 +3590,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line134 +// CHECK-NEXT: line135 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line134 +// CHECK-NEXT: line135 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3580,12 +3603,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line135 +// CHECK-NEXT: line136 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line135 +// CHECK-NEXT: line136 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3597,7 +3620,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line135 +// CHECK-NEXT: line136 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3605,24 +3628,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line135 +// CHECK-NEXT: line136 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line135 +// CHECK-NEXT: line136 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line135 +// CHECK-NEXT: line136 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line135 +// CHECK-NEXT: line136 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3638,7 +3661,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line135 +// CHECK-NEXT: line136 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3646,12 +3669,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line135 +// CHECK-NEXT: line136 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line135 +// CHECK-NEXT: line136 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3672,7 +3695,7 @@ static int Cond; // CHECK-NEXT: issue_hash1 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line135 +// CHECK-NEXT: line136 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3688,12 +3711,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line139 +// CHECK-NEXT: line140 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line139 +// CHECK-NEXT: line140 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3701,12 +3724,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line139 +// CHECK-NEXT: line140 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line139 +// CHECK-NEXT: line140 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3718,7 +3741,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line139 +// CHECK-NEXT: line140 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3726,12 +3749,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line139 +// CHECK-NEXT: line140 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line139 +// CHECK-NEXT: line140 // CHECK-NEXT: col32 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3751,12 +3774,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line139 +// CHECK-NEXT: line140 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line139 +// CHECK-NEXT: line140 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3764,12 +3787,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line140 +// CHECK-NEXT: line141 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line140 +// CHECK-NEXT: line141 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3781,7 +3804,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line140 +// CHECK-NEXT: line141 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3789,24 +3812,24 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line140 +// CHECK-NEXT: line141 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line140 +// CHECK-NEXT: line141 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line140 +// CHECK-NEXT: line141 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line140 +// CHECK-NEXT: line141 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3826,12 +3849,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line140 +// CHECK-NEXT: line141 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line140 +// CHECK-NEXT: line141 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3839,12 +3862,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line141 +// CHECK-NEXT: line142 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line141 +// CHECK-NEXT: line142 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3856,7 +3879,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line141 +// CHECK-NEXT: line142 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3864,12 +3887,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line141 +// CHECK-NEXT: line142 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line141 +// CHECK-NEXT: line142 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3890,7 +3913,7 @@ static int Cond; // CHECK-NEXT: issue_hash3 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line141 +// CHECK-NEXT: line142 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3906,12 +3929,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line169 +// CHECK-NEXT: line170 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line169 +// CHECK-NEXT: line170 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3919,12 +3942,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line169 +// CHECK-NEXT: line170 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line169 +// CHECK-NEXT: line170 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3936,7 +3959,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line169 +// CHECK-NEXT: line170 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3944,12 +3967,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line169 +// CHECK-NEXT: line170 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line169 +// CHECK-NEXT: line170 // CHECK-NEXT: col16 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3969,12 +3992,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line169 +// CHECK-NEXT: line170 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line169 +// CHECK-NEXT: line170 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3982,12 +4005,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line170 +// CHECK-NEXT: line171 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line170 +// CHECK-NEXT: line171 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -3999,7 +4022,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line170 +// CHECK-NEXT: line171 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4007,12 +4030,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line170 +// CHECK-NEXT: line171 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line170 +// CHECK-NEXT: line171 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4033,7 +4056,7 @@ static int Cond; // CHECK-NEXT: issue_hash2 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line170 +// CHECK-NEXT: line171 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4049,12 +4072,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line174 +// CHECK-NEXT: line175 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line174 +// CHECK-NEXT: line175 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4062,12 +4085,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line174 +// CHECK-NEXT: line175 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line174 +// CHECK-NEXT: line175 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4079,7 +4102,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line174 +// CHECK-NEXT: line175 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4087,12 +4110,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line174 +// CHECK-NEXT: line175 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line174 +// CHECK-NEXT: line175 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4112,12 +4135,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line174 +// CHECK-NEXT: line175 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line174 +// CHECK-NEXT: line175 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4125,12 +4148,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line175 +// CHECK-NEXT: line176 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line175 +// CHECK-NEXT: line176 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4142,7 +4165,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line175 +// CHECK-NEXT: line176 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4150,12 +4173,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line175 +// CHECK-NEXT: line176 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line175 +// CHECK-NEXT: line176 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4176,7 +4199,7 @@ static int Cond; // CHECK-NEXT: issue_hash2 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line175 +// CHECK-NEXT: line176 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4192,12 +4215,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line179 +// CHECK-NEXT: line180 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line179 +// CHECK-NEXT: line180 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4205,12 +4228,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line179 +// CHECK-NEXT: line180 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line179 +// CHECK-NEXT: line180 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4222,7 +4245,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line179 +// CHECK-NEXT: line180 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4230,12 +4253,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line179 +// CHECK-NEXT: line180 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line179 +// CHECK-NEXT: line180 // CHECK-NEXT: col20 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4255,12 +4278,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line179 +// CHECK-NEXT: line180 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line179 +// CHECK-NEXT: line180 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4268,12 +4291,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line180 +// CHECK-NEXT: line181 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line180 +// CHECK-NEXT: line181 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4285,7 +4308,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line180 +// CHECK-NEXT: line181 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4293,12 +4316,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line180 +// CHECK-NEXT: line181 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line180 +// CHECK-NEXT: line181 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4319,7 +4342,7 @@ static int Cond; // CHECK-NEXT: issue_hash2 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line180 +// CHECK-NEXT: line181 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4335,12 +4358,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line184 +// CHECK-NEXT: line185 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line184 +// CHECK-NEXT: line185 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4348,12 +4371,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line184 +// CHECK-NEXT: line185 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line184 +// CHECK-NEXT: line185 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4365,7 +4388,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line184 +// CHECK-NEXT: line185 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4373,12 +4396,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line184 +// CHECK-NEXT: line185 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line184 +// CHECK-NEXT: line185 // CHECK-NEXT: col20 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4398,12 +4421,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line184 +// CHECK-NEXT: line185 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line184 +// CHECK-NEXT: line185 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4411,12 +4434,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line185 +// CHECK-NEXT: line186 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line185 +// CHECK-NEXT: line186 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4428,7 +4451,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line185 +// CHECK-NEXT: line186 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4436,12 +4459,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line185 +// CHECK-NEXT: line186 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line185 +// CHECK-NEXT: line186 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4462,7 +4485,7 @@ static int Cond; // CHECK-NEXT: issue_hash2 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line185 +// CHECK-NEXT: line186 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4478,12 +4501,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line189 +// CHECK-NEXT: line190 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line189 +// CHECK-NEXT: line190 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4491,12 +4514,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line189 +// CHECK-NEXT: line190 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line189 +// CHECK-NEXT: line190 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4508,7 +4531,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line189 +// CHECK-NEXT: line190 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4516,12 +4539,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line189 +// CHECK-NEXT: line190 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line189 +// CHECK-NEXT: line190 // CHECK-NEXT: col27 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4541,12 +4564,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line189 +// CHECK-NEXT: line190 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line189 +// CHECK-NEXT: line190 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4554,12 +4577,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line190 +// CHECK-NEXT: line191 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line190 +// CHECK-NEXT: line191 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4571,7 +4594,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line190 +// CHECK-NEXT: line191 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4579,12 +4602,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line190 +// CHECK-NEXT: line191 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line190 +// CHECK-NEXT: line191 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4605,7 +4628,7 @@ static int Cond; // CHECK-NEXT: issue_hash2 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line190 +// CHECK-NEXT: line191 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4621,12 +4644,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4634,12 +4657,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4651,7 +4674,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4659,12 +4682,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col23 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4684,12 +4707,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4697,12 +4720,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4714,7 +4737,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4722,12 +4745,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4743,7 +4766,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line205 +// CHECK-NEXT: line206 // CHECK-NEXT: col1 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4761,12 +4784,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line205 +// CHECK-NEXT: line206 // CHECK-NEXT: col1 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line205 +// CHECK-NEXT: line206 // CHECK-NEXT: col1 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4774,12 +4797,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line206 +// CHECK-NEXT: line207 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line206 +// CHECK-NEXT: line207 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4795,12 +4818,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line206 +// CHECK-NEXT: line207 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line206 +// CHECK-NEXT: line207 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4808,12 +4831,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line206 +// CHECK-NEXT: line207 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line206 +// CHECK-NEXT: line207 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4825,7 +4848,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line206 +// CHECK-NEXT: line207 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4833,12 +4856,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line206 +// CHECK-NEXT: line207 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line206 +// CHECK-NEXT: line207 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4858,12 +4881,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line206 +// CHECK-NEXT: line207 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line206 +// CHECK-NEXT: line207 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4871,12 +4894,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line208 +// CHECK-NEXT: line209 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line208 +// CHECK-NEXT: line209 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4888,7 +4911,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4896,12 +4919,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4921,12 +4944,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4934,12 +4957,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4951,7 +4974,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4959,12 +4982,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -4985,7 +5008,7 @@ static int Cond; // CHECK-NEXT: issue_hash2 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5001,12 +5024,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5014,12 +5037,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5035,12 +5058,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line225 +// CHECK-NEXT: line226 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5048,12 +5071,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line231 +// CHECK-NEXT: line232 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line231 +// CHECK-NEXT: line232 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5065,7 +5088,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line231 +// CHECK-NEXT: line232 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5073,12 +5096,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line231 +// CHECK-NEXT: line232 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line231 +// CHECK-NEXT: line232 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5094,7 +5117,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line213 +// CHECK-NEXT: line214 // CHECK-NEXT: col1 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5112,12 +5135,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line213 +// CHECK-NEXT: line214 // CHECK-NEXT: col1 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line213 +// CHECK-NEXT: line214 // CHECK-NEXT: col1 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5125,12 +5148,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line214 +// CHECK-NEXT: line215 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line214 +// CHECK-NEXT: line215 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5146,12 +5169,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line214 +// CHECK-NEXT: line215 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line214 +// CHECK-NEXT: line215 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5159,12 +5182,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line214 +// CHECK-NEXT: line215 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line214 +// CHECK-NEXT: line215 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5176,7 +5199,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line214 +// CHECK-NEXT: line215 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5184,12 +5207,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line214 +// CHECK-NEXT: line215 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line214 +// CHECK-NEXT: line215 // CHECK-NEXT: col21 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5205,7 +5228,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line231 +// CHECK-NEXT: line232 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5213,12 +5236,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line231 +// CHECK-NEXT: line232 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line231 +// CHECK-NEXT: line232 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5238,12 +5261,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line231 +// CHECK-NEXT: line232 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line231 +// CHECK-NEXT: line232 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5251,12 +5274,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line236 +// CHECK-NEXT: line237 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line236 +// CHECK-NEXT: line237 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5272,12 +5295,12 @@ static int Cond; // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line236 +// CHECK-NEXT: line237 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line236 +// CHECK-NEXT: line237 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5285,12 +5308,12 @@ static int Cond; // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line236 +// CHECK-NEXT: line237 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line236 +// CHECK-NEXT: line237 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5302,7 +5325,7 @@ static int Cond; // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line236 +// CHECK-NEXT: line237 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5310,12 +5333,12 @@ static int Cond; // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line236 +// CHECK-NEXT: line237 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line236 +// CHECK-NEXT: line237 // CHECK-NEXT: col23 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -5336,9 +5359,813 @@ static int Cond; // CHECK-NEXT: issue_hash8 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line236 +// CHECK-NEXT: line237 // CHECK-NEXT: col11 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col38 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col40 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Call to function 'CFCreateSomething' returns a Core Foundation object with a +1 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line247 +// CHECK-NEXT: col38 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object autoreleased +// CHECK-NEXT: message +// CHECK-NEXT: Object autoreleased +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line248 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line249 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line249 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line249 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line249 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line249 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line249 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line249 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object autoreleased +// CHECK-NEXT: message +// CHECK-NEXT: Object autoreleased +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line249 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line249 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line250 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line250 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line250 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line250 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line250 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object was autoreleased 2 times but the object has a +1 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Object was autoreleased 2 times but the object has a +1 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionObject autoreleased too many times +// CHECK-NEXT: categoryMemory (Core Foundation/Objective-C) +// CHECK-NEXT: typeObject autoreleased too many times +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextCFOverAutorelease +// CHECK-NEXT: issue_hash4 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line250 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line254 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line254 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line254 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line254 +// CHECK-NEXT: col35 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line254 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line254 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line254 +// CHECK-NEXT: col37 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Call to function 'CFGetSomething' returns a Core Foundation object with a +0 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Call to function 'CFGetSomething' returns a Core Foundation object with a +0 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line254 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line254 +// CHECK-NEXT: col35 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object autoreleased +// CHECK-NEXT: message +// CHECK-NEXT: Object autoreleased +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line255 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object was autoreleased but has a +0 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Object was autoreleased but has a +0 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionObject autoreleased too many times +// CHECK-NEXT: categoryMemory (Core Foundation/Objective-C) +// CHECK-NEXT: typeObject autoreleased too many times +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextCFAutoreleaseUnowned +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line256 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line260 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line260 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line260 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line260 +// CHECK-NEXT: col35 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line260 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line260 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line260 +// CHECK-NEXT: col37 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Call to function 'CFGetSomething' returns a Core Foundation object with a +0 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Call to function 'CFGetSomething' returns a Core Foundation object with a +0 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line260 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line260 +// CHECK-NEXT: col35 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col17 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object autoreleased +// CHECK-NEXT: message +// CHECK-NEXT: Object autoreleased +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line261 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line262 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line262 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line262 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line262 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line262 +// CHECK-NEXT: col26 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line262 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line262 +// CHECK-NEXT: col13 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object autoreleased +// CHECK-NEXT: message +// CHECK-NEXT: Object autoreleased +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line262 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line262 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Object was autoreleased 2 times but the object has a +0 retain count +// CHECK-NEXT: message +// CHECK-NEXT: Object was autoreleased 2 times but the object has a +0 retain count +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionObject autoreleased too many times +// CHECK-NEXT: categoryMemory (Core Foundation/Objective-C) +// CHECK-NEXT: typeObject autoreleased too many times +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextCFAutoreleaseUnownedMixed +// CHECK-NEXT: issue_hash4 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line263 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: // CHECK-NEXT: diff --git a/test/Analysis/retain-release.m b/test/Analysis/retain-release.m index bb4a1d169d24..aafd94e97bdc 100644 --- a/test/Analysis/retain-release.m +++ b/test/Analysis/retain-release.m @@ -63,9 +63,12 @@ typedef const void * CFTypeRef; typedef const struct __CFString * CFStringRef; typedef const struct __CFAllocator * CFAllocatorRef; extern const CFAllocatorRef kCFAllocatorDefault; + extern CFTypeRef CFRetain(CFTypeRef cf); extern void CFRelease(CFTypeRef cf); extern CFTypeRef CFMakeCollectable(CFTypeRef cf); +extern CFTypeRef CFAutorelease(CFTypeRef CF_CONSUMED cf); + typedef struct { } CFArrayCallBacks; @@ -2004,6 +2007,87 @@ static int Cond; } @end +//===----------------------------------------------------------------------===// +// CFAutorelease +//===----------------------------------------------------------------------===// + +CFTypeRef getAutoreleasedCFType() { + extern CFTypeRef CFCreateSomething(); + return CFAutorelease(CFCreateSomething()); // no-warning +} + +CFTypeRef getIncorrectlyAutoreleasedCFType() { + extern CFTypeRef CFGetSomething(); + return CFAutorelease(CFGetSomething()); // expected-warning{{Object autoreleased too many times}} +} + +CFTypeRef createIncorrectlyAutoreleasedCFType() { + extern CFTypeRef CFCreateSomething(); + return CFAutorelease(CFCreateSomething()); // expected-warning{{Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected}} +} + +void useAfterAutorelease() { + extern CFTypeRef CFCreateSomething(); + CFTypeRef obj = CFCreateSomething(); + CFAutorelease(obj); + + extern void useCF(CFTypeRef); + useCF(obj); // no-warning +} + +void useAfterRelease() { + // Sanity check that the previous example would have warned with CFRelease. + extern CFTypeRef CFCreateSomething(); + CFTypeRef obj = CFCreateSomething(); + CFRelease(obj); + + extern void useCF(CFTypeRef); + useCF(obj); // expected-warning{{Reference-counted object is used after it is released}} +} + +void testAutoreleaseReturnsInput() { + extern CFTypeRef CFCreateSomething(); + CFTypeRef obj = CFCreateSomething(); // expected-warning{{Potential leak of an object stored into 'obj'}} + CFTypeRef second = CFAutorelease(obj); + CFRetain(second); +} + +CFTypeRef testAutoreleaseReturnsInputSilent() { + extern CFTypeRef CFCreateSomething(); + CFTypeRef obj = CFCreateSomething(); + CFTypeRef alias = CFAutorelease(obj); + CFRetain(alias); + CFRelease(obj); + return obj; // no-warning +} + +void autoreleaseTypedObject() { + CFArrayRef arr = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + CFAutorelease((CFTypeRef)arr); // no-warning +} + +void autoreleaseReturningTypedObject() { + CFArrayRef arr = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning{{Potential leak of an object stored into 'arr'}} + CFArrayRef alias = (CFArrayRef)CFAutorelease((CFTypeRef)arr); + CFRetain(alias); +} + +CFArrayRef autoreleaseReturningTypedObjectSilent() { + CFArrayRef arr = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + CFArrayRef alias = (CFArrayRef)CFAutorelease((CFTypeRef)arr); + CFRetain(alias); + CFRelease(arr); + return alias; // no-warning +} + +void autoreleaseObjC() { + id obj = [@1 retain]; + CFAutorelease(obj); // no-warning + + id anotherObj = @1; + CFAutorelease(anotherObj); +} // expected-warning{{Object autoreleased too many times}} + //===----------------------------------------------------------------------===// // xpc_connection_set_finalizer_f //===----------------------------------------------------------------------===// @@ -2022,6 +2106,20 @@ void rdar13783514(xpc_connection_t connection) { xpc_connection_set_finalizer_f(connection, releaseAfterXPC); } // no-warning +// Do not report leaks when object is cleaned up with __attribute__((cleanup ..)). +inline static void cleanupFunction(void *tp) { + CFTypeRef x = *(CFTypeRef *)tp; + if (x) { + CFRelease(x); + } +} +#define ADDCLEANUP __attribute__((cleanup(cleanupFunction))) +void foo() { + ADDCLEANUP CFStringRef myString; + myString = CFStringCreateWithCString(0, "hello world", kCFStringEncodingUTF8); + ADDCLEANUP CFStringRef myString2 = + CFStringCreateWithCString(0, "hello world", kCFStringEncodingUTF8); +} // CHECK: diagnostics // CHECK-NEXT: diff --git a/test/Analysis/security-syntax-checks.m b/test/Analysis/security-syntax-checks.m index 1df8a408a697..4ffd9a0b4907 100644 --- a/test/Analysis/security-syntax-checks.m +++ b/test/Analysis/security-syntax-checks.m @@ -82,10 +82,11 @@ void test_setuid() } // CWE-338: Use of cryptographically weak prng +typedef unsigned short *ushort_ptr_t; // Test that sugar doesn't confuse the warning. int rand(void); double drand48(void); double erand48(unsigned short[3]); -long jrand48(unsigned short[3]); +long jrand48(ushort_ptr_t); void lcong48(unsigned short[7]); long lrand48(void); long mrand48(void); diff --git a/test/Analysis/self-init.m b/test/Analysis/self-init.m index 5a4354f49ad2..d1fb88de5410 100644 --- a/test/Analysis/self-init.m +++ b/test/Analysis/self-init.m @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=osx.cocoa.SelfInit -fobjc-default-synthesize-properties -analyzer-config ipa=dynamic -fno-builtin %s -verify -// RUN: %clang_cc1 -analyze -analyzer-checker=osx.cocoa.SelfInit -fobjc-default-synthesize-properties -fno-builtin %s -verify +// RUN: %clang_cc1 -analyze -analyzer-checker=osx.cocoa.SelfInit -analyzer-config ipa=dynamic -fno-builtin %s -verify +// RUN: %clang_cc1 -analyze -analyzer-checker=osx.cocoa.SelfInit -fno-builtin %s -verify @class NSZone, NSCoder; @protocol NSObject diff --git a/test/Analysis/simple-stream-checks.c b/test/Analysis/simple-stream-checks.c index ce57fa7ac34e..2f725745a5ba 100644 --- a/test/Analysis/simple-stream-checks.c +++ b/test/Analysis/simple-stream-checks.c @@ -87,5 +87,5 @@ void testPassConstPointer() { void testPassToSystemHeaderFunctionIndirectly() { FileStruct fs; fs.p = fopen("myfile.txt", "w"); - fakeSystemHeaderCall(&fs); -} // expected-warning {{Opened file is never closed; potential resource leak}} + fakeSystemHeaderCall(&fs); // invalidates fs, making fs.p unreachable +} // no-warning diff --git a/test/Analysis/stack-addr-ps.cpp b/test/Analysis/stack-addr-ps.cpp index 65d757154c87..a39f9c7dc726 100644 --- a/test/Analysis/stack-addr-ps.cpp +++ b/test/Analysis/stack-addr-ps.cpp @@ -20,6 +20,10 @@ const int& g3() { return s3; // expected-warning{{Address of stack memory associated with local variable 's1' returned}} expected-warning {{reference to stack memory associated with local variable 's1' returned}} } +void g4() { + static const int &x = 3; // no warning +} + int get_value(); const int &get_reference1() { return get_value(); } // expected-warning{{Address of stack memory associated with temporary object of type 'int' returned}} expected-warning {{returning reference to local temporary}} diff --git a/test/Analysis/string.c b/test/Analysis/string.c index 6cf52f7a557b..9fd3efb5c2d7 100644 --- a/test/Analysis/string.c +++ b/test/Analysis/string.c @@ -430,11 +430,12 @@ void strcat_unknown_src_length(char *src, int offset) { // length for the "before" strlen, we won't be able to set one for "after". void strcat_too_big(char *dst, char *src) { + // We assume this can never actually happen, so we don't get a warning. if (strlen(dst) != (((size_t)0) - 2)) return; if (strlen(src) != 2) return; - strcat(dst, src); // expected-warning{{This expression will create a string whose length is too big to be represented as a size_t}} + strcat(dst, src); } @@ -653,11 +654,12 @@ void strncat_unknown_limit(float limit) { } void strncat_too_big(char *dst, char *src) { + // We assume this will never actually happen, so we don't get a warning. if (strlen(dst) != (((size_t)0) - 2)) return; if (strlen(src) != 2) return; - strncat(dst, src, 2); // expected-warning{{This expression will create a string whose length is too big to be represented as a size_t}} + strncat(dst, src, 2); } void strncat_zero(char *src) { diff --git a/test/Analysis/taint-tester.cpp b/test/Analysis/taint-tester.cpp index f97eefb950e3..ca7b729f2691 100644 --- a/test/Analysis/taint-tester.cpp +++ b/test/Analysis/taint-tester.cpp @@ -6,7 +6,8 @@ typedef __typeof(sizeof(int)) size_t; extern FILE *stdin; typedef long ssize_t; ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict); -int printf(const char * __restrict, ...); +int printf(const char * __restrict, ...); +int snprintf(char *, size_t, const char *, ...); void free(void *ptr); struct GetLineTestStruct { @@ -25,3 +26,10 @@ void getlineTest(void) { } free(line); } + +class opaque; +void testOpaqueClass(opaque *obj) { + char buf[20]; + snprintf(buf, 20, "%p", obj); // don't crash trying to load *obj +} + diff --git a/test/Analysis/temp-obj-dtors-cfg-output.cpp b/test/Analysis/temp-obj-dtors-cfg-output.cpp index 1ddccb704b13..ff68a876e910 100644 --- a/test/Analysis/temp-obj-dtors-cfg-output.cpp +++ b/test/Analysis/temp-obj-dtors-cfg-output.cpp @@ -108,6 +108,24 @@ TestCtorInits::TestCtorInits() : a(int(A()) + int(B())) , b() {} +class NoReturn { +public: + ~NoReturn() __attribute__((noreturn)); + void f(); +}; + +void test_noreturn1() { + int a; + NoReturn().f(); + int b; +} + +void test_noreturn2() { + int a; + NoReturn(), 47; + int b; +} + // CHECK: [B1 (ENTRY)] // CHECK: Succs (1): B0 // CHECK: [B0 (EXIT)] @@ -846,3 +864,36 @@ TestCtorInits::TestCtorInits() // CHECK: [B0 (EXIT)] // CHECK: Preds (1): B1 +// CHECK: [B3 (ENTRY)] +// CHECK: Succs (1): B2 +// CHECK: [B1] +// CHECK: 1: int b; +// CHECK: Succs (1): B0 +// CHECK: [B2] +// CHECK: 1: int a; +// CHECK: 2: NoReturn() (CXXConstructExpr, class NoReturn) +// CHECK: 3: [B2.2] (BindTemporary) +// CHECK: 4: [B2.3].f +// CHECK: 5: [B2.4]() +// CHECK: 6: ~NoReturn() (Temporary object destructor) +// CHECK: Preds (1): B3 +// CHECK: Succs (1): B0 +// CHECK: [B0 (EXIT)] +// CHECK: Preds (2): B1 B2 + +// CHECK: [B3 (ENTRY)] +// CHECK: Succs (1): B2 +// CHECK: [B1] +// CHECK: 1: int b; +// CHECK: Succs (1): B0 +// CHECK: [B2] +// CHECK: 1: int a; +// CHECK: 2: NoReturn() (CXXConstructExpr, class NoReturn) +// CHECK: 3: [B2.2] (BindTemporary) +// CHECK: 4: 47 +// CHECK: 5: ... , [B2.4] +// CHECK: 6: ~NoReturn() (Temporary object destructor) +// CHECK: Preds (1): B3 +// CHECK: Succs (1): B0 +// CHECK: [B0 (EXIT)] +// CHECK: Preds (2): B1 B2 diff --git a/test/Analysis/templates.cpp b/test/Analysis/templates.cpp index faa5c1a76209..131794a7c931 100644 --- a/test/Analysis/templates.cpp +++ b/test/Analysis/templates.cpp @@ -48,3 +48,25 @@ void testNonTypeTemplateInstantiation() { #endif } +namespace rdar13954714 { + template + bool blockInTemplate() { + return (^() { + return VALUE; + })(); + } + + // force instantiation + template bool blockInTemplate(); + + template + void blockWithStatic() { + (void)^() { + static int x; + return ++x; + }; + } + + // force instantiation + template void blockWithStatic(); +} diff --git a/test/Analysis/temporaries.cpp b/test/Analysis/temporaries.cpp index efc0825470cd..6b49fcbddd41 100644 --- a/test/Analysis/temporaries.cpp +++ b/test/Analysis/temporaries.cpp @@ -1,5 +1,6 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -verify -w -std=c++03 %s // RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -verify -w -std=c++11 %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -DTEMPORARY_DTORS -verify -w -analyzer-config cfg-temporary-dtors=true %s extern bool clang_analyzer_eval(bool); @@ -109,3 +110,148 @@ namespace compound_literals { } } +namespace destructors { + void testPR16664andPR18159Crash() { + struct Dtor { + ~Dtor(); + }; + extern bool coin(); + extern bool check(const Dtor &); + +#ifndef TEMPORARY_DTORS + // FIXME: Don't crash here when tmp dtros are enabled. + // PR16664 and PR18159 + if (coin() && (coin() || coin() || check(Dtor()))) { + Dtor(); + } +#endif + } + +#ifdef TEMPORARY_DTORS + struct NoReturnDtor { + ~NoReturnDtor() __attribute__((noreturn)); + }; + + void noReturnTemp(int *x) { + if (! x) NoReturnDtor(); + *x = 47; // no warning + } + + void noReturnInline(int **x) { + NoReturnDtor(); + } + + void callNoReturn() { + int *x; + noReturnInline(&x); + *x = 47; // no warning + } + + extern bool check(const NoReturnDtor &); + + void testConsistencyIf(int i) { + if (i != 5) + return; + if (i == 5 && (i == 4 || check(NoReturnDtor()) || i == 5)) { + clang_analyzer_eval(true); // no warning, unreachable code + } + } + + void testConsistencyTernary(int i) { + (i == 5 && (i == 4 || check(NoReturnDtor()) || i == 5)) ? 1 : 0; + + clang_analyzer_eval(true); // expected-warning{{TRUE}} + + if (i != 5) + return; + + (i == 5 && (i == 4 || check(NoReturnDtor()) || i == 5)) ? 1 : 0; + + clang_analyzer_eval(true); // no warning, unreachable code + } + + +/* + // PR16664 and PR18159 + FIXME: Don't crash here. + void testConsistencyNested(int i) { + extern bool compute(bool); + + if (i == 5 && (i == 4 || i == 5 || check(NoReturnDtor()))) + clang_analyzer_eval(true); // expected TRUE + + if (i == 5 && (i == 4 || i == 5 || check(NoReturnDtor()))) + clang_analyzer_eval(true); // expected TRUE + + if (i != 5) + return; + + if (compute(i == 5 && + (i == 4 || compute(true) || + compute(i == 5 && (i == 4 || check(NoReturnDtor()))))) || + i != 4) { + clang_analyzer_eval(true); // expected TRUE + } + + if (compute(i == 5 && + (i == 4 || i == 4 || + compute(i == 5 && (i == 4 || check(NoReturnDtor()))))) || + i != 4) { + clang_analyzer_eval(true); // no warning, unreachable code + } + }*/ + +#endif // TEMPORARY_DTORS +} + +void testStaticMaterializeTemporaryExpr() { + static const Trivial &ref = getTrivial(); + clang_analyzer_eval(ref.value == 42); // expected-warning{{TRUE}} + + static const Trivial &directRef = Trivial(42); + clang_analyzer_eval(directRef.value == 42); // expected-warning{{TRUE}} + +#if __has_feature(cxx_thread_local) + thread_local static const Trivial &threadRef = getTrivial(); + clang_analyzer_eval(threadRef.value == 42); // expected-warning{{TRUE}} + + thread_local static const Trivial &threadDirectRef = Trivial(42); + clang_analyzer_eval(threadDirectRef.value == 42); // expected-warning{{TRUE}} +#endif +} + +namespace PR16629 { + struct A { + explicit A(int* p_) : p(p_) {} + int* p; + }; + + extern void escape(const A*[]); + extern void check(int); + + void callEscape(const A& a) { + const A* args[] = { &a }; + escape(args); + } + + void testNoWarning() { + int x; + callEscape(A(&x)); + check(x); // Analyzer used to give a "x is uninitialized warning" here + } + + void set(const A*a[]) { + *a[0]->p = 47; + } + + void callSet(const A& a) { + const A* args[] = { &a }; + set(args); + } + + void testConsistency() { + int x; + callSet(A(&x)); + clang_analyzer_eval(x == 47); // expected-warning{{TRUE}} + } +} diff --git a/test/Analysis/uninit-sometimes.cpp b/test/Analysis/uninit-sometimes.cpp index 015b675d9b86..425d3048c4e0 100644 --- a/test/Analysis/uninit-sometimes.cpp +++ b/test/Analysis/uninit-sometimes.cpp @@ -145,13 +145,13 @@ int test_for_range_false(int k) { int test_for_range_true(int k) { int arr[3] = { 1, 2, 3 }; - int x; - for (int &a : arr) { // no-warning + int x; // expected-note {{variable}} + for (int &a : arr) { // expected-warning {{variable 'x' is used uninitialized whenever 'for' loop is entered}} goto label; } x = 0; label: - return x; + return x; // expected-note {{uninitialized use}} } @@ -356,14 +356,14 @@ int test_no_false_positive_2() { } -// FIXME: In this case, the variable is used uninitialized whenever the -// function's entry block is reached. Produce a diagnostic saying that -// the variable is uninitialized the first time it is used. + + + void test_null_pred_succ() { - int x; + int x; // expected-note {{variable}} expected-warning {{used uninitialized whenever function 'test_null_pred_succ' is called}} if (0) foo: x = 0; - if (x) + if (x) // expected-note {{use}} goto foo; } @@ -385,3 +385,45 @@ int PR13360(bool b) { // CHECK: fix-it:"{{.*}}":{376:3-380:10}:"" // CHECK: fix-it:"{{.*}}":{375:8-375:8}:" = 0" + +void test_jump_init() { +goto later; + int x; // expected-note {{variable}} expected-warning {{used uninitialized whenever function 'test_jump_init'}} +later: + while (x) x = 0; // expected-note {{use}} +} + +void PR16054() { + int x; // expected-note {{variable}} expected-warning {{used uninitialized whenever function 'PR16054}} + while (x != 0) { // expected-note {{use}} + (void)&x; + } +} + +void test_loop_uninit() { + for (int n = 0; n < 10; ++n) { + int k; // expected-warning {{variable 'k' is used uninitialized whenever its declaration is reached}} expected-note {{variable}} + do { + k = k + 1; // expected-note {{use}} + } while (k != 5); + } +} + +// FIXME: We should warn here, because the variable is used uninitialized +// the first time we encounter the use. +void test_loop_with_assignment() { + double d; + for (int n = 0; n < 10; ++n) { + d = d + n; + } +} + +// FIXME: We should warn here, because the variable is used uninitialized +// the first time we encounter the use. +void test_loop_with_ref_bind() { + double d; + for (int n = 0; n < 10; ++n) { + d += n; + const double &r = d; + } +} diff --git a/test/Analysis/uninit-vals-ps-region.m b/test/Analysis/uninit-vals-ps-region.m index 614ce2fc3354..a4aa5a114aeb 100644 --- a/test/Analysis/uninit-vals-ps-region.m +++ b/test/Analysis/uninit-vals-ps-region.m @@ -76,3 +76,18 @@ void PR10163 (void) { test_PR10163(x[1]); // expected-warning{{uninitialized value}} } +struct MyStr { + int x; + int y; +}; +void swap(struct MyStr *To, struct MyStr *From) { + // This is not really a swap but close enough for our test. + To->x = From->x; + To->y = From->y; // no warning +} +int test_undefined_member_assignment_in_swap(struct MyStr *s2) { + struct MyStr s1; + s1.x = 5; + swap(s2, &s1); + return s2->y; // expected-warning{{Undefined or garbage value returned to caller}} +} diff --git a/test/Analysis/unions.cpp b/test/Analysis/unions.cpp index 2bffe78b41c2..f363ab81ae72 100644 --- a/test/Analysis/unions.cpp +++ b/test/Analysis/unions.cpp @@ -1,5 +1,7 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=core %s -verify -// expected-no-diagnostics +// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc,debug.ExprInspection %s -verify + +extern void clang_analyzer_eval(bool); +extern "C" char *strdup(const char *s); namespace PR14054_reduced { struct Definition; @@ -49,3 +51,58 @@ namespace PR14054_original { x = pn->pn_u.name.lexdef->pn_u.name.lexdef; } } + +namespace PR17596 { + union IntOrString { + int i; + char *s; + }; + + extern void process(IntOrString); + + void test() { + IntOrString uu; + uu.s = strdup(""); + process(uu); + } + + void testPositive() { + IntOrString uu; + uu.s = strdup(""); + } // expected-warning{{leak}} + + void testCopy() { + IntOrString uu; + uu.i = 4; + clang_analyzer_eval(uu.i == 4); // expected-warning{{TRUE}} + + IntOrString vv; + vv.i = 5; + uu = vv; + // FIXME: Should be true. + clang_analyzer_eval(uu.i == 5); // expected-warning{{UNKNOWN}} + } + + void testInvalidation() { + IntOrString uu; + uu.s = strdup(""); + + IntOrString vv; + char str[] = "abc"; + vv.s = str; + + // FIXME: This is a leak of uu.s. + uu = vv; + } + + void testIndirectInvalidation() { + IntOrString uu; + char str[] = "abc"; + uu.s = str; + + clang_analyzer_eval(uu.s[0] == 'a'); // expected-warning{{TRUE}} + + process(uu); + clang_analyzer_eval(uu.s[0] == 'a'); // expected-warning{{UNKNOWN}} + } +} diff --git a/test/Analysis/unix-fns.c b/test/Analysis/unix-fns.c index 46c10136ede2..dad03fac70b8 100644 --- a/test/Analysis/unix-fns.c +++ b/test/Analysis/unix-fns.c @@ -1,6 +1,8 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,unix.API,osx.API %s -analyzer-store=region -analyzer-output=plist -analyzer-eagerly-assume -analyzer-config faux-bodies=true -fblocks -verify -o %t.plist +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,unix.API,osx.API %s -analyzer-store=region -analyzer-output=plist -analyzer-eagerly-assume -analyzer-config faux-bodies=true -analyzer-config path-diagnostics-alternate=false -fblocks -verify -o %t.plist // RUN: FileCheck --input-file=%t.plist %s - +// RUN: mkdir -p %t.dir +// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.API,osx.API -analyzer-output=html -analyzer-config faux-bodies=true -fblocks -o %t.dir %s +// RUN: rm -fR %t.dir struct _opaque_pthread_once_t { long __sig; char __opaque[8]; @@ -16,7 +18,6 @@ void *realloc(void *, size_t); void *reallocf(void *, size_t); void *alloca(size_t); void *valloc(size_t); - typedef union { struct _os_object_s *_os_obj; struct dispatch_object_s *_do; @@ -32,7 +33,6 @@ typedef union { struct dispatch_operation_s *_doperation; struct dispatch_disk_s *_ddisk; } dispatch_object_t __attribute__((__transparent_union__)); - typedef void (^dispatch_block_t)(void); typedef long dispatch_once_t; typedef struct dispatch_queue_s *dispatch_queue_t; @@ -1418,6 +1418,40 @@ void test_inline_dispatch_once() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: line190 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line190 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line190 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line190 +// CHECK-NEXT: col15 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line190 // CHECK-NEXT: col24 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1492,24 +1526,25 @@ void test_inline_dispatch_once() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line40 -// CHECK-NEXT: col1 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: depth1 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Entered call from 'test_dispatch_sync' -// CHECK-NEXT: message -// CHECK-NEXT: Entered call from 'test_dispatch_sync' -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line40 -// CHECK-NEXT: col1 +// CHECK-NEXT: line190 +// CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line190 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line194 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: // CHECK-NEXT: depth1 // CHECK-NEXT: extended_message // CHECK-NEXT: Calling anonymous block @@ -1974,24 +2009,25 @@ void test_inline_dispatch_once() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line39 -// CHECK-NEXT: col1 -// CHECK-NEXT: file0 -// CHECK-NEXT: -// CHECK-NEXT: depth2 -// CHECK-NEXT: extended_message -// CHECK-NEXT: Entered call from '_dispatch_once' -// CHECK-NEXT: message -// CHECK-NEXT: Entered call from '_dispatch_once' -// CHECK-NEXT: -// CHECK-NEXT: -// CHECK-NEXT: kindevent -// CHECK-NEXT: location -// CHECK-NEXT: -// CHECK-NEXT: line39 -// CHECK-NEXT: col1 +// CHECK-NEXT: line177 +// CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line177 +// CHECK-NEXT: col33 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: // CHECK-NEXT: depth2 // CHECK-NEXT: extended_message // CHECK-NEXT: Calling anonymous block diff --git a/test/Analysis/unreachable-code-path.c b/test/Analysis/unreachable-code-path.c index 61a4fd490e94..08019d9cbe31 100644 --- a/test/Analysis/unreachable-code-path.c +++ b/test/Analysis/unreachable-code-path.c @@ -139,3 +139,22 @@ void test11(enum foobar fb) { error(); // expected-warning {{never executed}} } } + +void inlined(int condition) { + if (condition) { + foo(5); // no-warning + } else { + foo(6); + } +} + +void testInlined() { + extern int coin(); + int cond = coin(); + if (!cond) { + inlined(0); + if (cond) { + foo(5); // expected-warning {{never executed}} + } + } +} diff --git a/test/Analysis/weak-functions.c b/test/Analysis/weak-functions.c new file mode 100644 index 000000000000..96e3b44d03b8 --- /dev/null +++ b/test/Analysis/weak-functions.c @@ -0,0 +1,117 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.core,debug.ExprInspection,unix.Malloc,unix.cstring,alpha.unix.cstring,unix.API,osx.API,osx.cocoa.RetainCount -Wno-null-dereference -analyzer-store=region -fblocks -verify %s +#define NULL 0 +void clang_analyzer_eval(int); +void myFunc(); +void myWeakFunc() __attribute__((weak_import)); + +void testWeakFuncIsNull() +{ + clang_analyzer_eval(myFunc == NULL); // expected-warning{{FALSE}} + clang_analyzer_eval(myWeakFunc == NULL); // expected-warning{{UNKNOWN}} + if (myWeakFunc == NULL) { + clang_analyzer_eval(myWeakFunc == NULL); // expected-warning{{TRUE}} + } else { + clang_analyzer_eval(myWeakFunc == NULL); // expected-warning{{FALSE}} + } +} + +void testWeakFuncIsNot() +{ + clang_analyzer_eval(myWeakFunc == NULL); // expected-warning{{UNKNOWN}} + if (!myWeakFunc) { + clang_analyzer_eval(myWeakFunc == NULL); // expected-warning{{TRUE}} + } else { + clang_analyzer_eval(myWeakFunc == NULL); // expected-warning{{FALSE}} + } +} + +void testWeakFuncIsTrue() +{ + clang_analyzer_eval(myWeakFunc == NULL); // expected-warning{{UNKNOWN}} + if (myWeakFunc) { + clang_analyzer_eval(myWeakFunc == NULL); // expected-warning{{FALSE}} + } else { + clang_analyzer_eval(myWeakFunc == NULL); // expected-warning{{TRUE}} + } +} + +//===----------------------------------------------------------------------=== +// func.c +//===----------------------------------------------------------------------=== +void f(void) __attribute__((weak_import)); +void g(void (*fp)(void)) __attribute__((weak_import)); + +void f(void) { + void (*p)(void); + p = f; + p = &f; + p(); + (*p)(); +} + +void g(void (*fp)(void)); + +void f2() { + g(f); +} + +void f3(void (*f)(void), void (*g)(void)) { + clang_analyzer_eval(!f); // expected-warning{{UNKNOWN}} + f(); + clang_analyzer_eval(!f); // expected-warning{{FALSE}} + + clang_analyzer_eval(!g); // expected-warning{{UNKNOWN}} + (*g)(); + clang_analyzer_eval(!g); // expected-warning{{FALSE}} +} + +//===----------------------------------------------------------------------=== +// free.c +//===----------------------------------------------------------------------=== +void free(void *) __attribute__((weak_import)); + +void t10 () { + free((void*)&t10); // expected-warning {{Argument to free() is the address of the function 't10', which is not memory allocated by malloc()}} +} + +//===----------------------------------------------------------------------=== +// string.c : strnlen() +//===----------------------------------------------------------------------=== +typedef typeof(sizeof(int)) size_t; +size_t strlen(const char *s) __attribute__((weak_import)); + +size_t strlen_fn() { + return strlen((char*)&strlen_fn); // expected-warning{{Argument to string length function is the address of the function 'strlen_fn', which is not a null-terminated string}} +} + +//===----------------------------------------------------------------------=== +// unix-fns.c : dispatch_once +//===----------------------------------------------------------------------=== +typedef void (^dispatch_block_t)(void); +typedef long dispatch_once_t; +void dispatch_once(dispatch_once_t *predicate, dispatch_block_t block) __attribute__((weak_import)); + +void test_dispatch_once() { + dispatch_once_t pred = 0; + do { if (__builtin_expect(*(&pred), ~0l) != ~0l) dispatch_once((&pred), (^() {})); } while (0); // expected-warning{{Call to 'dispatch_once' uses the local variable 'pred' for the predicate value}} +} +void test_dispatch_once_neg() { + static dispatch_once_t pred = 0; + do { if (__builtin_expect(*(&pred), ~0l) != ~0l) dispatch_once((&pred), (^() {})); } while (0); // no-warning +} + +//===----------------------------------------------------------------------=== +// retain-release-path-notes.m +//===----------------------------------------------------------------------=== +typedef struct CFType *CFTypeRef; +CFTypeRef CFCreateSomething() __attribute__((weak_import)); +CFTypeRef CFGetSomething() __attribute__((weak_import)); + +CFTypeRef CFCopyRuleViolation () { + CFTypeRef object = CFGetSomething(); + return object; // expected-warning{{Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected}} +} + +CFTypeRef CFGetRuleViolation () { + CFTypeRef object = CFCreateSomething(); // expected-warning{{Potential leak of an object stored into 'object'}} + return object; } diff --git a/test/CXX/basic/basic.link/p6.cpp b/test/CXX/basic/basic.link/p6.cpp index 8faec76fb3f1..ac6dc2f1f1a3 100644 --- a/test/CXX/basic/basic.link/p6.cpp +++ b/test/CXX/basic/basic.link/p6.cpp @@ -1,4 +1,6 @@ -// RUN: %clang_cc1 -fsyntax-only -verify %s +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++1y %s + +// expected-no-diagnostics // C++11 [basic.link]p6: // The name of a function declared in block scope and the name @@ -9,35 +11,34 @@ // block scope declaration declares that same entity and // receives the linkage of the previous declaration. -// rdar://13535367 -namespace test0 { - extern "C" int test0_array[]; - void declare() { extern int test0_array[100]; } - extern "C" int test0_array[]; - int value = sizeof(test0_array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} -} - -namespace test1 { - extern "C" int test1_array[]; - void test() { - { extern int test1_array[100]; } - extern int test1_array[]; - int x = sizeof(test1_array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} +extern int same_entity; +constexpr int *get1() { + int same_entity = 0; // not the same entity + { + extern int same_entity; + return &same_entity; } } +static_assert(get1() == &same_entity, "failed to find previous decl"); -namespace test2 { - void declare() { extern int test2_array[100]; } - extern int test2_array[]; - int value = sizeof(test2_array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} +static int same_entity_2[3]; +constexpr int *get2() { + // This is a redeclaration of the same entity, even though it doesn't + // inherit the type of the prior declaration. + extern int same_entity_2[]; + return same_entity_2; } +static_assert(get2() == same_entity_2, "failed to find previous decl"); -namespace test3 { - void test() { - { extern int test3_array[100]; } - extern int test3_array[]; - int x = sizeof(test3_array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} +static int different_entities; +constexpr int *get3() { + int different_entities = 0; + { + // FIXME: This is not a redeclaration of the prior entity, because + // it is not visible here. Under DR426, this is ill-formed, and without + // it, the static_assert below should fail. + extern int different_entities; + return &different_entities; } } - - +static_assert(get3() == &different_entities, "failed to find previous decl"); diff --git a/test/CXX/basic/basic.link/p7.cpp b/test/CXX/basic/basic.link/p7.cpp new file mode 100644 index 000000000000..9a85eacdda4f --- /dev/null +++ b/test/CXX/basic/basic.link/p7.cpp @@ -0,0 +1,73 @@ +// RUN: %clang_cc1 -verify -std=c++1y %s + +// Example from the standard. +namespace X { + void p() { + q(); // expected-error {{undeclared}} + extern void q(); + } + void middle() { + q(); // expected-error {{undeclared}} + } + void q() { /*...*/ } + void bottom() { + q(); + } +} +int q(); + +namespace Test1 { + void f() { + extern int a; // expected-note {{previous}} + int g(void); // expected-note {{previous}} + } + double a; // expected-error {{different type: 'double' vs 'int'}} + double g(); // expected-error {{differ only in their return type}} +} + +namespace Test2 { + void f() { + extern int a; // expected-note {{previous}} + int g(void); // expected-note {{previous}} + } + void h() { + extern double a; // expected-error {{different type: 'double' vs 'int'}} + double g(void); // expected-error {{differ only in their return type}} + } +} + +namespace Test3 { + constexpr void (*f())() { + void h(); + return &h; + } + constexpr void (*g())() { + void h(); + return &h; + } + static_assert(f() == g(), ""); +} + +namespace Test4 { + template + constexpr void (*f())() { + void h(); + return &h; + } + static_assert(f() == f(), ""); + void h(); + static_assert(f() == &h, ""); +} + +namespace Test5 { + constexpr auto f() -> void (*)() { + void g(); + struct X { + friend void g(); + static constexpr auto h() -> void (*)() { return g; } + }; + return X::h(); + } + void g(); + static_assert(f() == g, ""); +} diff --git a/test/CXX/basic/basic.lookup/basic.lookup.argdep/p2.cpp b/test/CXX/basic/basic.lookup/basic.lookup.argdep/p2.cpp index df9a2cd14cd4..e352bbe83c6b 100644 --- a/test/CXX/basic/basic.lookup/basic.lookup.argdep/p2.cpp +++ b/test/CXX/basic/basic.lookup/basic.lookup.argdep/p2.cpp @@ -5,7 +5,7 @@ namespace N { X operator+(X, X); - void f(X); + void f(X); // expected-note 2 {{'N::f' declared here}} void g(X); // expected-note{{candidate function}} void test_multiadd(X x) { @@ -17,7 +17,7 @@ namespace M { struct Y : N::X { }; } -void f(); // expected-note 2 {{'f' declared here}} +void f(); void test_operator_adl(N::X x, M::Y y) { (void)(x + x); @@ -27,8 +27,8 @@ void test_operator_adl(N::X x, M::Y y) { void test_func_adl(N::X x, M::Y y) { f(x); f(y); - (f)(x); // expected-error{{too many arguments to function call}} - ::f(x); // expected-error{{too many arguments to function call}} + (f)(x); // expected-error{{too many arguments to function call, expected 0, have 1; did you mean 'N::f'?}} + ::f(x); // expected-error{{too many arguments to function call, expected 0, have 1; did you mean 'N::f'?}} } namespace N { @@ -72,7 +72,7 @@ namespace O { } extern "C" { - struct L { }; + struct L { int x; }; } void h(L); // expected-note{{candidate function}} diff --git a/test/CXX/basic/basic.scope/basic.scope.hiding/p2.cpp b/test/CXX/basic/basic.scope/basic.scope.hiding/p2.cpp index 911df989530f..1d2b525da4c2 100644 --- a/test/CXX/basic/basic.scope/basic.scope.hiding/p2.cpp +++ b/test/CXX/basic/basic.scope/basic.scope.hiding/p2.cpp @@ -22,3 +22,48 @@ void f() { Y(1); // okay } +namespace PR17731 { + void f() { + struct S { S() {} }; + int S(void); + int a = S(); + struct S b; + { + int S(void); + int a = S(); + struct S c = b; + } + { + struct S { S() {} }; // expected-note {{candidate}} + int a = S(); // expected-error {{no viable conversion from 'S'}} + struct S c = b; // expected-error {{no viable conversion from 'struct S'}} + } + } + void g() { + int S(void); + struct S { S() {} }; + int a = S(); + struct S b; + { + int S(void); + int a = S(); + struct S c = b; + } + { + struct S { S() {} }; // expected-note {{candidate}} + int a = S(); // expected-error {{no viable conversion from 'S'}} + struct S c = b; // expected-error {{no viable conversion from 'struct S'}} + } + } + + struct A { + struct B; + void f(); + int B; + }; + struct A::B {}; + void A::f() { + B = 123; + struct B b; + } +} diff --git a/test/CXX/basic/basic.start/basic.start.main/p2.cpp b/test/CXX/basic/basic.start/basic.start.main/p2.cpp index a5386f1b9257..5c7d60c1df4c 100644 --- a/test/CXX/basic/basic.start/basic.start.main/p2.cpp +++ b/test/CXX/basic/basic.start/basic.start.main/p2.cpp @@ -15,6 +15,8 @@ // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST10 // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST11 // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST12 +// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST13 +// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST14 #if TEST1 @@ -94,6 +96,20 @@ int main(int, charT* const *) {} typedef char charT; int main(int, const charT* const *) {} +#elif TEST13 + +int main(void) {} + +template +int main(void); // expected-error{{'main' cannot be a template}} + +#elif TEST14 + +template +int main(void); // expected-error{{'main' cannot be a template}} + +int main(void) {} + #else #error Unknown test mode diff --git a/test/CXX/class.access/class.friend/p1.cpp b/test/CXX/class.access/class.friend/p1.cpp index 19d94cfdd5f6..4a681629eeae 100644 --- a/test/CXX/class.access/class.friend/p1.cpp +++ b/test/CXX/class.access/class.friend/p1.cpp @@ -7,8 +7,8 @@ // special access rights to the friends, but they do not make the nominated // friends members of the befriending class. -struct S { static void f(); }; -S* g() { return 0; } +struct S { static void f(); }; // expected-note 2 {{'S' declared here}} +S* g() { return 0; } // expected-note 2 {{'g' declared here}} struct X { friend struct S; @@ -19,8 +19,8 @@ void test1() { S s; g()->f(); S::f(); - X::g(); // expected-error{{no member named 'g' in 'X'}} - X::S x_s; // expected-error{{no type named 'S' in 'X'}} + X::g(); // expected-error{{no member named 'g' in 'X'; did you mean simply 'g'?}} + X::S x_s; // expected-error{{no type named 'S' in 'X'; did you mean simply 'S'?}} X x; x.g(); // expected-error{{no member named 'g' in 'X'}} } @@ -36,24 +36,24 @@ namespace N { friend struct S2* g2(); }; - struct S2 { static void f2(); }; - S2* g2() { return 0; } + struct S2 { static void f2(); }; // expected-note 2 {{'S2' declared here}} + S2* g2() { return 0; } // expected-note 2 {{'g2' declared here}} void test() { g()->f(); S s; S::f(); - X::g(); // expected-error{{no member named 'g' in 'N::X'}} - X::S x_s; // expected-error{{no type named 'S' in 'N::X'}} + X::g(); // expected-error{{no member named 'g' in 'N::X'; did you mean simply 'g'?}} + X::S x_s; // expected-error{{no type named 'S' in 'N::X'; did you mean simply 'S'?}} X x; x.g(); // expected-error{{no member named 'g' in 'N::X'}} g2(); S2 s2; - ::g2(); // expected-error{{no member named 'g2' in the global namespace}} - ::S2 g_s2; // expected-error{{no type named 'S2' in the global namespace}} - X::g2(); // expected-error{{no member named 'g2' in 'N::X'}} - X::S2 x_s2; // expected-error{{no type named 'S2' in 'N::X'}} + ::g2(); // expected-error{{no member named 'g2' in the global namespace; did you mean simply 'g2'?}} + ::S2 g_s2; // expected-error{{no type named 'S2' in the global namespace; did you mean simply 'S2'?}} + X::g2(); // expected-error{{no member named 'g2' in 'N::X'; did you mean simply 'g2'?}} + X::S2 x_s2; // expected-error{{no type named 'S2' in 'N::X'; did you mean simply 'S2'?}} x.g2(); // expected-error{{no member named 'g2' in 'N::X'}} } } @@ -287,22 +287,22 @@ namespace test9 { // PR7230 namespace test10 { - extern "C" void f(void); - extern "C" void g(void); + extern "C" void test10_f(void); + extern "C" void test10_g(void); namespace NS { class C { void foo(void); // expected-note {{declared private here}} - friend void test10::f(void); + friend void test10::test10_f(void); }; static C* bar; } - void f(void) { + void test10_f(void) { NS::bar->foo(); } - void g(void) { + void test10_g(void) { NS::bar->foo(); // expected-error {{private member}} } } diff --git a/test/CXX/class.access/class.friend/p11.cpp b/test/CXX/class.access/class.friend/p11.cpp index a05b2d28751e..ba44a0d49245 100644 --- a/test/CXX/class.access/class.friend/p11.cpp +++ b/test/CXX/class.access/class.friend/p11.cpp @@ -17,3 +17,83 @@ namespace test1 { }; } } + +namespace test2 { + void bar(); // expected-note {{'::test2::bar' declared here}} + + void foo() { // expected-note {{'::test2::foo' declared here}} + struct S1 { + friend void foo(); // expected-error {{no matching function 'foo' found in local scope; did you mean '::test2::foo'?}} + }; + + void foo(); // expected-note {{local declaration nearly matches}} + struct S2 { + friend void foo(); + }; + + { + struct S2 { + friend void foo(); // expected-error {{no matching function found in local scope}} + }; + } + + { + int foo; + struct S3 { + friend void foo(); // expected-error {{no matching function found in local scope}} + }; + } + + struct S4 { + friend void bar(); // expected-error {{no matching function 'bar' found in local scope; did you mean '::test2::bar'?}} + }; + + { void bar(); } + struct S5 { + friend void bar(); // expected-error {{no matching function found in local scope}} + }; + + { + void bar(); + struct S6 { + friend void bar(); + }; + } + + struct S7 { + void bar() { Inner::f(); } + struct Inner { + friend void bar(); + static void f() {} + }; + }; + + void bar(); // expected-note {{'bar' declared here}} + struct S8 { + struct Inner { + friend void bar(); + }; + }; + + struct S9 { + struct Inner { + friend void baz(); // expected-error {{no matching function 'baz' found in local scope; did you mean 'bar'?}} + }; + }; + + struct S10 { + void quux() {} + void foo() { + struct Inner1 { + friend void bar(); // expected-error {{no matching function found in local scope}} + friend void quux(); // expected-error {{no matching function found in local scope}} + }; + + void bar(); + struct Inner2 { + friend void bar(); + }; + } + }; + } +} diff --git a/test/CXX/class.access/class.friend/p3-cxx0x.cpp b/test/CXX/class.access/class.friend/p3-cxx0x.cpp index ea9d2ce697c5..5a1ab49321d0 100644 --- a/test/CXX/class.access/class.friend/p3-cxx0x.cpp +++ b/test/CXX/class.access/class.friend/p3-cxx0x.cpp @@ -36,10 +36,17 @@ class A { public: class foo {}; static int y; - template friend class B::ty; + template friend class B::ty; // expected-warning {{dependent nested name specifier 'B::' for friend class declaration is not supported}} }; -template class B { typedef int ty; }; +template class B { typedef int ty; }; + +template<> class B { + class ty { + static int f(A &a) { return a.y; } // ok, befriended + }; +}; +int f(A &a) { return a.y; } // FIXME: should be an error struct { // Ill-formed @@ -56,7 +63,7 @@ struct { friend float; - template friend class A::foo; + template friend class A::foo; // expected-warning {{not supported}} } a; void testA() { (void)sizeof(A); } diff --git a/test/CXX/class.access/class.friend/p6.cpp b/test/CXX/class.access/class.friend/p6.cpp index 7f7d90990328..2fe20fe77fc8 100644 --- a/test/CXX/class.access/class.friend/p6.cpp +++ b/test/CXX/class.access/class.friend/p6.cpp @@ -11,6 +11,10 @@ struct Y { friend void X::f2() { } // expected-error{{friend function definition cannot be qualified with 'X::'}} }; +template struct Z { + friend void T::f() {} // expected-error{{friend function definition cannot be qualified with 'T::'}} +}; + void local() { void f(); diff --git a/test/CXX/class.access/p4.cpp b/test/CXX/class.access/p4.cpp index 5ad738bebf9c..0564a52b6d0d 100644 --- a/test/CXX/class.access/p4.cpp +++ b/test/CXX/class.access/p4.cpp @@ -151,7 +151,7 @@ namespace test3 { virtual Base3 {}; Derived3 d3; // expected-note {{implicit default constructor}}\ - // expected-note{{implicit default destructor}}} + // expected-note{{implicit destructor}}} } // Conversion functions. @@ -207,13 +207,13 @@ namespace test5 { class Test1 { A a; }; // expected-error {{private member}} void test1() { Test1 a; - a = Test1(); // expected-note{{implicit default copy}} + a = Test1(); // expected-note{{implicit copy}} } class Test2 : A {}; // expected-error {{private member}} void test2() { Test2 a; - a = Test2(); // expected-note{{implicit default copy}} + a = Test2(); // expected-note{{implicit copy}} } } @@ -226,12 +226,12 @@ namespace test6 { class Test1 { A a; }; // expected-error {{field of type 'test6::A' has private copy constructor}} void test1(const Test1 &t) { - Test1 a = t; // expected-note{{implicit default copy}} + Test1 a = t; // expected-note{{implicit copy}} } class Test2 : A {}; // expected-error {{base class 'test6::A' has private copy constructor}} void test2(const Test2 &t) { - Test2 a = t; // expected-note{{implicit default copy}} + Test2 a = t; // expected-note{{implicit copy}} } } diff --git a/test/CXX/class.access/p6.cpp b/test/CXX/class.access/p6.cpp index fbdc87b24e26..6a93658fc78d 100644 --- a/test/CXX/class.access/p6.cpp +++ b/test/CXX/class.access/p6.cpp @@ -92,7 +92,7 @@ namespace test3 { template class Outer::A { public: - static void foo(); + static void foo(); // expected-note {{'Outer::A::foo' declared here}} }; class B { @@ -102,7 +102,7 @@ namespace test3 { void test() { Outer::A::foo(); - Outer::A::foo(); // expected-error {{no member named 'foo'}} + Outer::A::foo(); // expected-error {{no member named 'foo' in 'test3::Outer::A'; did you mean 'Outer::A::foo'?}} } } diff --git a/test/CXX/class.derived/class.abstract/p16.cpp b/test/CXX/class.derived/class.abstract/p16.cpp index c237ed90446f..2053218ca5b5 100644 --- a/test/CXX/class.derived/class.abstract/p16.cpp +++ b/test/CXX/class.derived/class.abstract/p16.cpp @@ -22,7 +22,7 @@ struct H; struct D { virtual E &operator=(const E &); // expected-note {{here}} virtual F &operator=(const F &); - virtual G &operator=(G&&); + virtual G &operator=(G&&); // expected-note {{here}} virtual H &operator=(H&&); // expected-note {{here}} friend struct F; @@ -34,8 +34,8 @@ private: struct E : D {}; // expected-error {{deleted function '~E' cannot override a non-deleted function}} \ // expected-error {{deleted function 'operator=' cannot override a non-deleted function}} struct F : D {}; -// No move ctor here, because it would be deleted. struct G : D {}; // expected-error {{deleted function '~G' cannot override a non-deleted function}} + // expected-error@-1 {{deleted function 'operator=' cannot override a non-deleted function}} struct H : D { H &operator=(H&&) = default; // expected-error {{deleted function 'operator=' cannot override a non-deleted function}} ~H(); diff --git a/test/CXX/class.derived/class.member.lookup/p7.cpp b/test/CXX/class.derived/class.member.lookup/p7.cpp new file mode 100644 index 000000000000..a785e0f90e57 --- /dev/null +++ b/test/CXX/class.derived/class.member.lookup/p7.cpp @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -verify %s + +// expected-no-diagnostics + +struct A { int n; }; +struct B { float n; }; +struct C : A, B {}; +struct D : virtual C {}; +struct E : virtual C { char n; }; +struct F : D, E {} f; +char &k = f.n; diff --git a/test/CXX/class.derived/class.virtual/p3-0x.cpp b/test/CXX/class.derived/class.virtual/p3-0x.cpp index 6a02a8673186..41a5954bf863 100644 --- a/test/CXX/class.derived/class.virtual/p3-0x.cpp +++ b/test/CXX/class.derived/class.virtual/p3-0x.cpp @@ -130,3 +130,23 @@ namespace MemberOfUnknownSpecialization { // expected-note@+1 {{in instantiation of}} A::C c3; } + +namespace DiagnosticsQOI { + struct X { + virtual ~X(); + virtual void foo(int x); // expected-note {{hidden overloaded virtual function}} + virtual void bar(int x); // expected-note 2 {{hidden overloaded virtual function}} + virtual void bar(float x); // expected-note 2 {{hidden overloaded virtual function}} + }; + + struct Y : X { + void foo(int x, int y) override; // expected-error {{non-virtual member function marked 'override' hides virtual member function}} + void bar(double) override; // expected-error {{non-virtual member function marked 'override' hides virtual member functions}} + void bar(long double) final; // expected-error {{non-virtual member function marked 'final' hides virtual member functions}} + }; + + template + struct Z : T { + static void foo() override; // expected-error {{only virtual member functions can be marked 'override'}} + }; +} diff --git a/test/CXX/class/class.friend/p6.cpp b/test/CXX/class/class.friend/p6.cpp index 82ca50e485d6..e4c59f781e3d 100644 --- a/test/CXX/class/class.friend/p6.cpp +++ b/test/CXX/class/class.friend/p6.cpp @@ -4,7 +4,11 @@ class A { friend static class B; // expected-error {{'static' is invalid in friend declarations}} friend extern class C; // expected-error {{'extern' is invalid in friend declarations}} +#if __cplusplus < 201103L + friend register class E; // expected-error {{'register' is invalid in friend declarations}} +#else friend register class E; // expected-error {{'register' is invalid in friend declarations}} +#endif friend mutable class F; // expected-error {{'mutable' is invalid in friend declarations}} friend typedef class G; // expected-error {{'typedef' is invalid in friend declarations}} friend __thread class G; // expected-error {{'__thread' is invalid in friend declarations}} diff --git a/test/CXX/class/class.nested.type/p1.cpp b/test/CXX/class/class.nested.type/p1.cpp index 4a04a448595c..929565441230 100644 --- a/test/CXX/class/class.nested.type/p1.cpp +++ b/test/CXX/class/class.nested.type/p1.cpp @@ -2,12 +2,12 @@ class X { public: - typedef int I; - class Y { }; + typedef int I; // expected-note{{'X::I' declared here}} + class Y { }; // expected-note{{'X::Y' declared here}} I a; }; -I b; // expected-error{{unknown type name 'I'}} -Y c; // expected-error{{unknown type name 'Y'}} +I b; // expected-error{{unknown type name 'I'; did you mean 'X::I'?}} +Y c; // expected-error{{unknown type name 'Y'; did you mean 'X::Y'?}} X::Y d; X::I e; diff --git a/test/CXX/dcl.dcl/basic.namespace/namespace.def/p8.cpp b/test/CXX/dcl.dcl/basic.namespace/namespace.def/p8.cpp index 3bc485601ca5..96a0df4a03f0 100644 --- a/test/CXX/dcl.dcl/basic.namespace/namespace.def/p8.cpp +++ b/test/CXX/dcl.dcl/basic.namespace/namespace.def/p8.cpp @@ -3,7 +3,7 @@ // Fun things you can do with inline namespaces: inline namespace X { - void f1(); + void f1(); // expected-note {{'f1' declared here}} inline namespace Y { void f2(); @@ -21,7 +21,7 @@ void foo1() { f1(); ::f1(); X::f1(); - Y::f1(); // expected-error {{no member named 'f1' in namespace 'X::Y'}} + Y::f1(); // expected-error {{no member named 'f1' in namespace 'X::Y'; did you mean simply 'f1'?}} f2(); ::f2(); diff --git a/test/CXX/dcl.dcl/dcl.attr/dcl.align/p7.cpp b/test/CXX/dcl.dcl/dcl.attr/dcl.align/p7.cpp index 93b1c6461a43..81e2ca5f1e4d 100644 --- a/test/CXX/dcl.dcl/dcl.attr/dcl.align/p7.cpp +++ b/test/CXX/dcl.dcl/dcl.attr/dcl.align/p7.cpp @@ -14,3 +14,7 @@ template struct Y { static_assert(alignof(Y) == alignof(int), ""); static_assert(alignof(Y) == alignof(int), ""); // expected-note {{in instantiation of}} + +void pr16992 () { + int x = alignof int; // expected-error {{expected parentheses around type name in alignof expression}} +} diff --git a/test/CXX/dcl.dcl/dcl.attr/dcl.attr.deprecated/p1.cpp b/test/CXX/dcl.dcl/dcl.attr/dcl.attr.deprecated/p1.cpp new file mode 100644 index 000000000000..21119398b2f4 --- /dev/null +++ b/test/CXX/dcl.dcl/dcl.attr/dcl.attr.deprecated/p1.cpp @@ -0,0 +1,30 @@ +// RUN: %clang_cc1 -std=c++1y -verify %s + +class [[deprecated]] C {}; // expected-note {{declared here}} +C c; // expected-warning {{'C' is deprecated}} + +typedef int t [[deprecated]]; // expected-note {{declared here}} +t x = 42; // expected-warning {{'t' is deprecated}} + +[[deprecated]] int old = 42; // expected-note {{declared here}} +int use = old; // expected-warning {{'old' is deprecated}} + +struct S { [[deprecated]] int member = 42; } s; // expected-note {{declared here}} +int use2 = s.member; // expected-warning {{'member' is deprecated}} + +[[deprecated]] int f() { return 42; } // expected-note {{declared here}} +int use3 = f(); // expected-warning {{'f' is deprecated}} + +enum [[deprecated]] e { E }; // expected-note {{declared here}} +e my_enum; // expected-warning {{'e' is deprecated}} + +template class X {}; +template <> class [[deprecated]] X {}; // expected-note {{declared here}} +X x1; +// FIXME: The diagnostic here could be much better by mentioning X. +X x2; // expected-warning {{'X' is deprecated}} + +template class [[deprecated]] X2 {}; +template <> class X2 {}; +X2 x3; // FIXME: no warning! +X2 x4; diff --git a/test/CXX/dcl.dcl/dcl.link/p7-2.cpp b/test/CXX/dcl.dcl/dcl.link/p7-2.cpp index 40f61c6445ac..1e8f39338c24 100644 --- a/test/CXX/dcl.dcl/dcl.link/p7-2.cpp +++ b/test/CXX/dcl.dcl/dcl.link/p7-2.cpp @@ -1,7 +1,7 @@ // RUN: %clang_cc1 -ast-print -o - %s | FileCheck %s -extern "C" void f(void); -// CHECK: extern "C" void f() +extern "C" int f(void); +// CHECK: extern "C" int f() -extern "C" void v; -// CHECK: extern "C" void v +extern "C" int v; +// CHECK: extern "C" int v diff --git a/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p1.cpp b/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p1.cpp index 122a400d9b4e..cf422972a280 100644 --- a/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p1.cpp +++ b/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p1.cpp @@ -72,7 +72,8 @@ template constexpr T ft(T t) { return t; } template T gt(T t) { return t; } struct S { template constexpr T f(); // expected-warning {{C++1y}} - template T g() const; + template + T g() const; // expected-note {{candidate template ignored: could not match 'T () const' against 'char ()'}} }; // explicit specialization can differ in constepxr diff --git a/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp b/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp index 4393727c193b..780a420959d6 100644 --- a/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp +++ b/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp @@ -63,8 +63,20 @@ struct T : SS, NonLiteral { // expected-note {{base class 'NonLiteral' of non-li #ifndef CXX1Y // expected-error@-2 {{an explicitly-defaulted copy assignment operator may not have 'const', 'constexpr' or 'volatile' qualifiers}} // expected-warning@-3 {{C++1y}} +#else + // expected-error@-5 {{defaulted definition of copy assignment operator is not constexpr}} #endif }; +#ifdef CXX1Y +struct T2 { + int n = 0; + constexpr T2 &operator=(const T2&) = default; // ok +}; +struct T3 { + constexpr T3 &operator=(const T3&) const = default; + // expected-error@-1 {{an explicitly-defaulted copy assignment operator may not have 'const' or 'volatile' qualifiers}} +}; +#endif struct U { constexpr U SelfReturn() const; constexpr int SelfParam(U) const; diff --git a/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp b/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp index 8a4fa42f0023..708c259d5b61 100644 --- a/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp +++ b/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp @@ -314,3 +314,23 @@ namespace CtorLookup { constexpr C::C(const C&) = default; constexpr C::C(C&) = default; // expected-error {{not constexpr}} } + +namespace PR14503 { + template struct V { + union { + int n; + struct { + int x, + y; + }; + }; + constexpr V() : x(0) {} + }; + + // The constructor is still 'constexpr' here, but the result is not intended + // to be a constant expression. The standard is not clear on how this should + // work. + constexpr V v; // expected-error {{constant expression}} expected-note {{subobject of type 'int' is not initialized}} + + constexpr int k = V().x; // FIXME: ok? +} diff --git a/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p12-1y.cpp b/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p12-1y.cpp new file mode 100644 index 000000000000..ff2abf9dfafc --- /dev/null +++ b/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p12-1y.cpp @@ -0,0 +1,17 @@ +// RUN: %clang_cc1 -std=c++11 -verify %s +// RUN: %clang_cc1 -std=c++1y -verify %s + +template struct S { typedef int type; }; + +template void f() { + auto x = [] { return 0; } (); + // FIXME: We should be able to produce a 'missing typename' diagnostic here. + S::type n; // expected-error 2{{}} +} + +#if __cplusplus > 201103L +template void g() { + auto x = [] () -> auto { return 0; } (); + S::type n; // expected-error 2{{}} +} +#endif diff --git a/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p3-generic-lambda-1y.cpp b/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p3-generic-lambda-1y.cpp new file mode 100644 index 000000000000..65b085bcec13 --- /dev/null +++ b/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p3-generic-lambda-1y.cpp @@ -0,0 +1,74 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++1y -DCXX1Y + +//FIXME: These tests were written when return type deduction had not been implemented +// for generic lambdas, hence +template T id(T t); +template int vfoo(Ts&& ... ts); +auto GL1 = [](auto a, int i) -> int { return id(a); }; + +auto GL2 = [](auto ... As) -> int { return vfoo(As...); }; +auto GL3 = [](int i, char c, auto* ... As) -> int { return vfoo(As...); }; + +auto GL4 = [](int i, char c, auto* ... As) -> int { return vfoo(As...); }; + + +void foo() { + auto GL1 = [](auto a, int i) -> int { return id(a); }; + + auto GL2 = [](auto ... As) -> int { return vfoo(As...); }; +} + +int main() +{ + auto l1 = [](auto a) -> int { return a + 5; }; + auto l2 = [](auto *p) -> int { return p + 5; }; + + struct A { int i; char f(int) { return 'c'; } }; + auto l3 = [](auto &&ur, + auto &lr, + auto v, + int i, + auto* p, + auto A::*memvar, + auto (A::*memfun)(int), + char c, + decltype (v)* pv + , auto (&array)[5] + ) -> int { return v + i + c + + array[0]; + }; + int arr[5] = {0, 1, 2, 3, 4 }; + int lval = 0; + double d = 3.14; + l3(3, lval, d, lval, &lval, &A::i, &A::f, 'c', &d, arr); + auto l4 = [](decltype(auto) a) -> int { return 0; }; //expected-error{{decltype(auto)}} + { + struct Local { + static int ifi(int i) { return i; } + static char cfi(int) { return 'a'; } + static double dfi(int i) { return i + 3.14; } + static Local localfi(int) { return Local{}; } + }; + auto l4 = [](auto (*fp)(int)) -> int { return fp(3); }; //expected-error{{no viable conversion from 'Local' to 'int'}} + l4(&Local::ifi); + l4(&Local::cfi); + l4(&Local::dfi); + l4(&Local::localfi); //expected-note{{in instantiation of function template specialization}} + } + { + auto unnamed_parameter = [](auto, auto) -> void { }; + unnamed_parameter(3, '4'); + } + { + auto l = [](auto + (*)(auto)) { }; //expected-error{{'auto' not allowed}} + //FIXME: These diagnostics might need some work. + auto l2 = [](char auto::*pm) { }; //expected-error{{cannot combine with previous}}\ + expected-error{{'pm' does not point into a class}} + auto l3 = [](char (auto::*pmf)()) { }; //expected-error{{'auto' not allowed}}\ + expected-error{{'pmf' does not point into a class}}\ + expected-error{{function cannot return function type 'char ()'}} + } +} + + diff --git a/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p4.cpp b/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p4.cpp index e566d2a8f1d2..84f9f9b82983 100644 --- a/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p4.cpp +++ b/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p4.cpp @@ -35,7 +35,7 @@ class X { }; struct S { - static const auto a; // expected-error {{declaration of variable 'a' with type 'auto const' requires an initializer}} + static const auto a; // expected-error {{declaration of variable 'a' with type 'const auto' requires an initializer}} static const auto b = 0; static const int c; }; diff --git a/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p6-1y.cpp b/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p6-1y.cpp deleted file mode 100644 index 66085eda3d73..000000000000 --- a/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p6-1y.cpp +++ /dev/null @@ -1,97 +0,0 @@ -// RUN: %clang_cc1 -verify -std=c++1y %s - -namespace std { - template struct initializer_list { - const T *p; - unsigned long n; - initializer_list(const T *p, unsigned long n); - }; -} - -// FIXME: This may not be p6 in C++1y; N3638 isn't very clear whether paragraphs -// were added. It might be p8? - -int i; -int &&f(); - -using Int = int; -using IntLRef = int&; -using IntRRef = int&&; -using InitListInt = std::initializer_list; -using IntPtr = int*; - -auto x3a = i; -decltype(auto) x3d = i; -using Int = decltype(x3a); -using Int = decltype(x3d); - -auto x4a = (i); -decltype(auto) x4d = (i); -using Int = decltype(x4a); -using IntLRef = decltype(x4d); - -auto x5a = f(); -decltype(auto) x5d = f(); -using Int = decltype(x5a); -using IntRRef = decltype(x5d); - -auto x6a = { 1, 2 }; -decltype(auto) x6d = { 1, 2 }; // expected-error {{cannot deduce 'decltype(auto)' from initializer list}} -using InitListInt = decltype(x6a); - -auto *x7a = &i; -decltype(auto) *x7d = &i; // expected-error {{cannot form pointer to 'decltype(auto)'}} -using IntPtr = decltype(x7a); - -struct S {}; - -decltype(auto) f1(); -decltype(auto) (*f2)(); // expected-error {{'decltype(auto)' can only be used as a return type in a function declaration}} expected-error {{requires an initializer}} -decltype(auto) *f3(); // expected-error {{cannot form pointer to 'decltype(auto)'}} -const decltype(auto) f4(); // expected-error {{'decltype(auto)' cannot be combined with other type specifiers}} -typedef decltype(auto) f5(); // expected-error {{'decltype(auto)' can only be used as a return type in a function declaration}} -decltype(auto) ((((((f6))))())); // ok -decltype(auto) f7()(); // expected-error {{'decltype(auto)' can only be used as a return type in a function declaration}} expected-error {{function cannot return function type}} -decltype(auto) (S::*f8)(); // expected-error {{'decltype(auto)' can only be used as a return type in a function declaration}} expected-error {{requires an initializer}} -decltype(auto) &f9(); // expected-error {{cannot form reference to 'decltype(auto)'}} -decltype(auto) (&f10())[10]; // expected-error {{cannot form array of 'decltype(auto)'}} - -decltype(auto) ((((((v1)))))) = 0; // ok -decltype(auto) v2[1] = { 0 }; // expected-error {{cannot form array of 'decltype(auto)'}} -decltype(auto) &v3 = { 0 }; // expected-error {{cannot form reference to 'decltype(auto)'}} -decltype(auto) *v4 = { 0 }; // expected-error {{cannot form pointer to 'decltype(auto)'}} - -auto multi1a = 0, &multi1b = multi1a; -auto multi1c = multi1a, multi1d = multi1b; -decltype(auto) multi1e = multi1a, multi1f = multi1b; // expected-error {{'decltype(auto)' deduced as 'int' in declaration of 'multi1e' and deduced as 'int &' in declaration of 'multi1f'}} - -auto f1a() { return 0; } -decltype(auto) f1d() { return 0; } -using Int = decltype(f1a()); -using Int = decltype(f1d()); - -auto f2a(int n) { return n; } -decltype(auto) f2d(int n) { return n; } -using Int = decltype(f2a(0)); -using Int = decltype(f2d(0)); - -auto f3a(int n) { return (n); } -decltype(auto) f3d(int n) { return (n); } // expected-warning {{reference to stack memory}} -using Int = decltype(f3a(0)); -using IntLRef = decltype(f3d(0)); - -auto f4a(int n) { return f(); } -decltype(auto) f4d(int n) { return f(); } -using Int = decltype(f4a(0)); -using IntRRef = decltype(f4d(0)); - -auto f5aa(int n) { auto x = f(); return x; } -auto f5ad(int n) { decltype(auto) x = f(); return x; } -decltype(auto) f5da(int n) { auto x = f(); return x; } -decltype(auto) f5dd(int n) { decltype(auto) x = f(); return x; } // expected-error {{rvalue reference to type 'int' cannot bind to lvalue}} -using Int = decltype(f5aa(0)); -using Int = decltype(f5ad(0)); -using Int = decltype(f5da(0)); - -auto init_list_1() { return { 1, 2, 3 }; } // expected-error {{cannot deduce return type from initializer list}} -decltype(auto) init_list_2() { return { 1, 2, 3 }; } // expected-error {{cannot deduce return type from initializer list}} diff --git a/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp b/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp index d327efcc20df..1711aaa8aef9 100644 --- a/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp +++ b/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp @@ -55,7 +55,7 @@ void f() { auto *fail1 = 0; // expected-error {{variable 'fail1' with type 'auto *' has incompatible initializer of type 'int'}} int **p; - const auto **fail2(p); // expected-error {{variable 'fail2' with type 'auto const **' has incompatible initializer of type 'int **'}} + const auto **fail2(p); // expected-error {{variable 'fail2' with type 'const auto **' has incompatible initializer of type 'int **'}} } struct S { @@ -85,8 +85,8 @@ struct S { namespace PR10939 { struct X { - int method(int); - int method(float); + int method(int); // expected-note{{possible target for call}} + int method(float); // expected-note{{possible target for call}} }; template T g(T); diff --git a/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-1y.cpp b/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-1y.cpp new file mode 100644 index 000000000000..f7b3e8e7be63 --- /dev/null +++ b/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-1y.cpp @@ -0,0 +1,94 @@ +// RUN: %clang_cc1 -verify -std=c++1y %s + +namespace std { + template struct initializer_list { + const T *p; + unsigned long n; + initializer_list(const T *p, unsigned long n); + }; +} + +int i; +int &&f(); + +using Int = int; +using IntLRef = int&; +using IntRRef = int&&; +using InitListInt = std::initializer_list; +using IntPtr = int*; + +auto x3a = i; +decltype(auto) x3d = i; +using Int = decltype(x3a); +using Int = decltype(x3d); + +auto x4a = (i); +decltype(auto) x4d = (i); +using Int = decltype(x4a); +using IntLRef = decltype(x4d); + +auto x5a = f(); +decltype(auto) x5d = f(); +using Int = decltype(x5a); +using IntRRef = decltype(x5d); + +auto x6a = { 1, 2 }; +decltype(auto) x6d = { 1, 2 }; // expected-error {{cannot deduce 'decltype(auto)' from initializer list}} +using InitListInt = decltype(x6a); + +auto *x7a = &i; +decltype(auto) *x7d = &i; // expected-error {{cannot form pointer to 'decltype(auto)'}} +using IntPtr = decltype(x7a); + +struct S {}; + +decltype(auto) f1(); +decltype(auto) (*f2)(); // expected-error {{'decltype(auto)' can only be used as a return type in a function declaration}} expected-error {{requires an initializer}} +decltype(auto) *f3(); // expected-error {{cannot form pointer to 'decltype(auto)'}} +const decltype(auto) f4(); // expected-error {{'decltype(auto)' cannot be combined with other type specifiers}} +typedef decltype(auto) f5(); // expected-error {{'decltype(auto)' can only be used as a return type in a function declaration}} +decltype(auto) ((((((f6))))())); // ok +decltype(auto) f7()(); // expected-error {{'decltype(auto)' can only be used as a return type in a function declaration}} expected-error {{function cannot return function type}} +decltype(auto) (S::*f8)(); // expected-error {{'decltype(auto)' can only be used as a return type in a function declaration}} expected-error {{requires an initializer}} +decltype(auto) &f9(); // expected-error {{cannot form reference to 'decltype(auto)'}} +decltype(auto) (&f10())[10]; // expected-error {{cannot form array of 'decltype(auto)'}} + +decltype(auto) ((((((v1)))))) = 0; // ok +decltype(auto) v2[1] = { 0 }; // expected-error {{cannot form array of 'decltype(auto)'}} +decltype(auto) &v3 = { 0 }; // expected-error {{cannot form reference to 'decltype(auto)'}} +decltype(auto) *v4 = { 0 }; // expected-error {{cannot form pointer to 'decltype(auto)'}} + +auto multi1a = 0, &multi1b = multi1a; +auto multi1c = multi1a, multi1d = multi1b; +decltype(auto) multi1e = multi1a, multi1f = multi1b; // expected-error {{'decltype(auto)' deduced as 'int' in declaration of 'multi1e' and deduced as 'int &' in declaration of 'multi1f'}} + +auto f1a() { return 0; } +decltype(auto) f1d() { return 0; } +using Int = decltype(f1a()); +using Int = decltype(f1d()); + +auto f2a(int n) { return n; } +decltype(auto) f2d(int n) { return n; } +using Int = decltype(f2a(0)); +using Int = decltype(f2d(0)); + +auto f3a(int n) { return (n); } +decltype(auto) f3d(int n) { return (n); } // expected-warning {{reference to stack memory}} +using Int = decltype(f3a(0)); +using IntLRef = decltype(f3d(0)); + +auto f4a(int n) { return f(); } +decltype(auto) f4d(int n) { return f(); } +using Int = decltype(f4a(0)); +using IntRRef = decltype(f4d(0)); + +auto f5aa(int n) { auto x = f(); return x; } +auto f5ad(int n) { decltype(auto) x = f(); return x; } +decltype(auto) f5da(int n) { auto x = f(); return x; } +decltype(auto) f5dd(int n) { decltype(auto) x = f(); return x; } // expected-error {{rvalue reference to type 'int' cannot bind to lvalue}} +using Int = decltype(f5aa(0)); +using Int = decltype(f5ad(0)); +using Int = decltype(f5da(0)); + +auto init_list_1() { return { 1, 2, 3 }; } // expected-error {{cannot deduce return type from initializer list}} +decltype(auto) init_list_2() { return { 1, 2, 3 }; } // expected-error {{cannot deduce return type from initializer list}} diff --git a/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp b/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp index 9c1d397a1fbc..8d789bdd5ad3 100644 --- a/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp +++ b/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp @@ -29,4 +29,17 @@ void g() { (*e)() -> void, #endif f = 0.0; + +#if __has_feature(cxx_decltype) + auto g = 0ull, h = decltype(g)(0); +#endif +} + +template void h() { + auto a = T(), *b = &a; +#if __has_feature(cxx_decltype) + auto c = T(), d = decltype(c)(0); +#endif } +template void h(); +template void h(); diff --git a/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p3.cpp b/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p3.cpp index 8d5849880232..40e754082b48 100644 --- a/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p3.cpp +++ b/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p3.cpp @@ -14,7 +14,7 @@ class A1 { friend union A; // expected-error {{use of 'A' with tag type that does not match previous declaration}} friend enum A; // expected-error {{use of 'A' with tag type that does not match previous declaration}} - friend enum E; // expected-warning {{cannot be a friend}} + friend enum E; // expected-warning {{befriending enumeration type 'enum E' is a C++11 extension}} }; template struct B { // expected-note {{previous use is here}} diff --git a/test/CXX/dcl.decl/dcl.init/dcl.init.aggr/p7.cpp b/test/CXX/dcl.decl/dcl.init/dcl.init.aggr/p7.cpp index d1fbe766d527..22667ac14bb5 100644 --- a/test/CXX/dcl.decl/dcl.init/dcl.init.aggr/p7.cpp +++ b/test/CXX/dcl.decl/dcl.init/dcl.init.aggr/p7.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -std=c++1y %s -verify +// RUN: %clang_cc1 -Wno-uninitialized -std=c++1y %s -verify // expected-no-diagnostics diff --git a/test/CXX/dcl.decl/dcl.init/dcl.init.list/p3-0x.cpp b/test/CXX/dcl.decl/dcl.init/dcl.init.list/p3-0x.cpp index d61f6e3d1982..58d038366c81 100644 --- a/test/CXX/dcl.decl/dcl.init/dcl.init.list/p3-0x.cpp +++ b/test/CXX/dcl.decl/dcl.init/dcl.init.list/p3-0x.cpp @@ -4,7 +4,7 @@ namespace std { typedef decltype(sizeof(int)) size_t; template - struct initializer_list + struct initializer_list // expected-note 2{{candidate}} { const E *p; size_t n; @@ -113,10 +113,14 @@ namespace bullet8 { namespace rdar13395022 { struct MoveOnly { - MoveOnly(MoveOnly&&); // expected-note{{copy constructor is implicitly deleted because 'MoveOnly' has a user-declared move constructor}} + MoveOnly(MoveOnly&&); }; void test(MoveOnly mo) { - auto &&list = {mo}; // expected-error{{call to implicitly-deleted copy constructor of 'rdar13395022::MoveOnly'}} + // FIXME: These diagnostics are poor. + auto &&list1 = {mo}; // expected-error{{no viable conversion}} + MoveOnly (&&list2)[1] = {mo}; // expected-error{{no viable conversion}} + std::initializer_list &&list3 = {}; + MoveOnly (&&list4)[1] = {}; // expected-error{{uninitialized}} } } diff --git a/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp b/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp new file mode 100644 index 000000000000..e040d5b2642b --- /dev/null +++ b/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp @@ -0,0 +1,209 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++1y -triple x86_64-linux-gnu %s + +// If there is a preceding declaration of the entity *in the same scope* in +// which the bound was specified, an omitted array bound is taken to be the +// same as in that earlier declaration + +// rdar://13535367 +namespace test0 { + extern "C" int array[]; + void declare() { extern int array[100]; } + int value1 = sizeof(array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} + extern "C" int array[]; + int value2 = sizeof(array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} +} + +namespace test1 { + extern "C" int array[]; + void test() { + { extern int array[100]; } + extern int array[]; + int x = sizeof(array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} + } +} + +namespace test2 { + void declare() { extern int array[100]; } + extern int array[]; + int value = sizeof(array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} +} + +namespace test3 { + void test() { + { extern int array[100]; } + extern int array[]; + int x = sizeof(array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} + } +} + +namespace test4 { + extern int array[]; + void test() { + extern int array[100]; + int x = sizeof(array); + } + int y = sizeof(array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} +} + +namespace test5 { + void test() { + extern int array[100]; + extern int array[]; + int x = sizeof(array); + } +} + +namespace test6 { + void test() { + extern int array[100]; + { + extern int array[]; + int x = sizeof(array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} + } + int y = sizeof(array); + extern int array[]; + int z = sizeof(array); + } +} + +namespace test7 { + extern int array[100]; + void test() { + extern int array[]; + int x = sizeof(array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} + } + int y = sizeof(array); + extern int array[]; + int z = sizeof(array); +} + +namespace test8 { + extern int array[]; + void test() { + extern int array[100]; + int x = sizeof(array); + } + int y = sizeof(array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} + extern int array[]; + int z = sizeof(array); // expected-error {{invalid application of 'sizeof' to an incomplete type 'int []'}} +} + +namespace dependent { + template void f() { + extern int arr1[]; + extern T arr1; + extern T arr2; + extern int arr2[]; + static_assert(sizeof(arr1) == 12, ""); + static_assert(sizeof(arr2) == 12, ""); + + // Use a failing test to ensure the type isn't considered dependent. + static_assert(sizeof(arr2) == 13, ""); // expected-error {{failed}} + } + + void g() { f(); } // expected-note {{in instantiation of}} + + template void h1() { + extern T arr3; + { + int arr3; + { + extern int arr3[]; + // Detected in template definition. + (void)sizeof(arr3); // expected-error {{incomplete}} + } + } + } + + template void h2() { + extern int arr4[3]; + { + int arr4; + { + extern T arr4; + // Detected in template instantiation. + (void)sizeof(arr4); // expected-error {{incomplete}} + } + } + } + + void i() { + h1(); + h2(); // expected-note {{in instantiation of}} + } + + int arr5[3]; + template void j() { + extern T arr5; + extern T arr6; + (void)sizeof(arr5); // expected-error {{incomplete}} + (void)sizeof(arr6); // expected-error {{incomplete}} + } + int arr6[3]; + + void k() { j(); } // expected-note {{in instantiation of}} + + template void l() { + extern T arrX; // expected-note {{previous}} + extern U arrX; // expected-error {{different type: 'int [4]' vs 'int [3]'}} + (void)sizeof(arrX); // expected-error {{incomplete}} + } + + void m() { + l(); // ok + l(); // ok + l(); // ok + l(); // expected-note {{in instantiation of}} + l(); // expected-note {{in instantiation of}} + } + + template void n() { + extern T n_var; // expected-error {{redefinition of 'n_var' with a different type: 'double' vs 'int'}} expected-note {{previous}} + extern T n_fn(); // expected-error {{functions that differ only in their return type cannot be overloaded}} expected-note {{previous}} + } + template void n(); + template void n(); // expected-note {{in instantiation of}} + + template void o() { + extern T o_var; // expected-note {{previous}} + extern T o_fn(); // expected-note {{previous}} + } + template void o(); + float o_var; // expected-error {{redefinition of 'o_var' with a different type: 'float' vs 'int'}} + float o_fn(); // expected-error {{functions that differ only in their return type cannot be overloaded}} + + int p_var; + int p_fn(); + template void p() { + extern T p_var; + extern T p_fn(); + } +} + +namespace use_outside_ns { + namespace A { + extern int a[3]; + extern int b[]; + extern int c[3]; + void f() { + extern int a[]; + extern int b[3]; + } + template void x() { + extern T c; + extern T d; + } + extern int d[3]; + template void x(); + } + int w = sizeof(A::a); + int x = sizeof(A::b); // expected-error {{incomplete}} + int y = sizeof(A::c); + int z = sizeof(A::d); + namespace A { + int g() { return sizeof(a); } + int h() { return sizeof(b); } // expected-error {{incomplete}} + int i() { return sizeof(c); } + int j() { return sizeof(d); } + } +} diff --git a/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp b/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp index 385e45dadfae..27ebb8e036f0 100644 --- a/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp +++ b/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp @@ -1,16 +1,16 @@ // RUN: %clang_cc1 -fsyntax-only -verify %s struct A { - virtual void f(int a = 7); + virtual void f(int a = 7); // expected-note{{'A::f' declared here}} }; struct B : public A { - void f(int a); // expected-note{{'f' declared here}} + void f(int a); }; void m() { B* pb = new B; A* pa = pb; pa->f(); // OK, calls pa->B::f(7) - pb->f(); // expected-error{{too few arguments}} + pb->f(); // expected-error{{too few arguments to function call, expected 1, have 0; did you mean 'A::f'?}} } diff --git a/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp b/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp index 6b1f3e438d8f..ce9072886160 100644 --- a/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp +++ b/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp @@ -1,7 +1,7 @@ // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s auto a() -> int; // ok -const auto b() -> int; // expected-error {{function with trailing return type must specify return type 'auto', not 'auto const'}} +const auto b() -> int; // expected-error {{function with trailing return type must specify return type 'auto', not 'const auto'}} auto *c() -> int; // expected-error {{function with trailing return type must specify return type 'auto', not 'auto *'}} auto (d() -> int); // expected-error {{trailing return type may not be nested within parentheses}} auto e() -> auto (*)() -> auto (*)() -> void; // ok: same as void (*(*e())())(); diff --git a/test/CXX/drs/dr0xx.cpp b/test/CXX/drs/dr0xx.cpp new file mode 100644 index 000000000000..265a52d9261a --- /dev/null +++ b/test/CXX/drs/dr0xx.cpp @@ -0,0 +1,1040 @@ +// RUN: %clang_cc1 -std=c++98 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -Wno-bind-to-temporary-copy +// RUN: %clang_cc1 -std=c++11 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors +// RUN: %clang_cc1 -std=c++1y %s -verify -fexceptions -fcxx-exceptions -pedantic-errors + +namespace dr1 { // dr1: no + namespace X { extern "C" void dr1_f(int a = 1); } + namespace Y { extern "C" void dr1_f(int a = 2); } + using X::dr1_f; using Y::dr1_f; + void g() { + dr1_f(0); + // FIXME: This should be rejected, due to the ambiguous default argument. + dr1_f(); + } + namespace X { + using Y::dr1_f; + void h() { + dr1_f(0); + // FIXME: This should be rejected, due to the ambiguous default argument. + dr1_f(); + } + } + + namespace X { + void z(int); + } + void X::z(int = 1) {} // expected-note {{previous}} + namespace X { + void z(int = 2); // expected-error {{redefinition of default argument}} + } +} + +namespace dr3 { // dr3: yes + template struct A {}; + template void f(T) { A a; } // expected-note {{implicit instantiation}} + template void f(int); + template<> struct A {}; // expected-error {{explicit specialization of 'dr3::A' after instantiation}} +} + +namespace dr4 { // dr4: yes + extern "C" { + static void dr4_f(int) {} + static void dr4_f(float) {} + void dr4_g(int) {} // expected-note {{previous}} + void dr4_g(float) {} // expected-error {{conflicting types}} + } +} + +namespace dr5 { // dr5: yes + struct A {} a; + struct B { + B(const A&); + B(const B&); + }; + const volatile B b = a; + + struct C { C(C&); }; + struct D : C {}; + struct E { operator D&(); } e; + const C c = e; +} + +namespace dr7 { // dr7: yes + class A { public: ~A(); }; + class B : virtual private A {}; // expected-note 2 {{declared private here}} + class C : public B {} c; // expected-error 2 {{inherited virtual base class 'dr7::A' has private destructor}} \ + // expected-note {{implicit default constructor for 'dr7::C' first required here}} \ + // expected-note {{implicit destructor for 'dr7::C' first required here}} + class VeryDerivedC : public B, virtual public A {} vdc; + + class X { ~X(); }; // expected-note {{here}} + class Y : X { ~Y() {} }; // expected-error {{private destructor}} + + namespace PR16370 { // This regressed the first time DR7 was fixed. + struct S1 { virtual ~S1(); }; + struct S2 : S1 {}; + struct S3 : S2 {}; + struct S4 : virtual S2 {}; + struct S5 : S3, S4 { + S5(); + ~S5(); + }; + S5::S5() {} + } +} + +namespace dr8 { // dr8: dup 45 + class A { + struct U; + static const int k = 5; + void f(); + template struct T; + + T *g(); + }; + A::T *A::g() { return 0; } +} + +namespace dr9 { // dr9: yes + struct B { + protected: + int m; // expected-note {{here}} + friend int R1(); + }; + struct N : protected B { // expected-note 2{{protected}} + friend int R2(); + } n; + int R1() { return n.m; } // expected-error {{protected base class}} expected-error {{protected member}} + int R2() { return n.m; } +} + +namespace dr10 { // dr10: dup 45 + class A { + struct B { + A::B *p; + }; + }; +} + +namespace dr11 { // dr11: yes + template struct A : T { + using typename T::U; + U u; + }; + template struct B : T { + using T::V; + V v; // expected-error {{unknown type name}} + }; + struct X { typedef int U; }; + A ax; +} + +namespace dr12 { // dr12: sup 239 + enum E { e }; + E &f(E, E = e); + void g() { + int &f(int, E = e); + // Under DR12, these call two different functions. + // Under DR239, they call the same function. + int &b = f(e); + int &c = f(1); + } +} + +namespace dr14 { // dr14: yes + namespace X { extern "C" int dr14_f(); } + namespace Y { extern "C" int dr14_f(); } + using namespace X; + using namespace Y; + int k = dr14_f(); + + class C { + int k; + friend int Y::dr14_f(); + } c; + namespace Z { + extern "C" int dr14_f() { return c.k; } + } + + namespace X { typedef int T; typedef int U; } // expected-note {{candidate}} + namespace Y { typedef int T; typedef long U; } // expected-note {{candidate}} + T t; // ok, same type both times + U u; // expected-error {{ambiguous}} +} + +namespace dr15 { // dr15: yes + template void f(int); // expected-note {{previous}} + template void f(int = 0); // expected-error {{default arguments cannot be added}} +} + +namespace dr16 { // dr16: yes + class A { // expected-note {{here}} + void f(); // expected-note {{here}} + friend class C; + }; + class B : A {}; // expected-note 4{{here}} + class C : B { + void g() { + f(); // expected-error {{private member}} expected-error {{private base}} + A::f(); // expected-error {{private member}} expected-error {{private base}} + } + }; +} + +namespace dr17 { // dr17: yes + class A { + int n; + int f(); + struct C; + }; + struct B : A {} b; + int A::f() { return b.n; } + struct A::C : A { + int g() { return n; } + }; +} + +namespace dr18 { // dr18: yes + typedef void Void; + void f(Void); // expected-error {{empty parameter list defined with a typedef of 'void'}} +} + +namespace dr19 { // dr19: yes + struct A { + int n; // expected-note {{here}} + }; + struct B : protected A { // expected-note {{here}} + }; + struct C : B {} c; + struct D : B { + int get1() { return c.n; } // expected-error {{protected member}} + int get2() { return ((A&)c).n; } // ok, A is an accessible base of B from here + }; +} + +namespace dr20 { // dr20: yes + class X { + public: + X(); + private: + X(const X&); // expected-note {{here}} + }; + X f(); + X x = f(); // expected-error {{private}} +} + +namespace dr21 { // dr21: yes + template struct A; + struct X { + template friend struct A; // expected-error {{default template argument not permitted on a friend template}} + template friend struct B; // expected-error {{default template argument not permitted on a friend template}} + }; +} + +namespace dr22 { // dr22: sup 481 + template struct X; // expected-error {{unknown type name 'dr22_T'}} + typedef int T; + template struct Y; +} + +namespace dr23 { // dr23: yes + template void f(T, T); // expected-note {{candidate}} + template void f(T, int); // expected-note {{candidate}} + void g() { f(0, 0); } // expected-error {{ambiguous}} +} + +// dr24: na + +namespace dr25 { // dr25: yes + struct A { + void f() throw(int); + }; + void (A::*f)() throw (int); + void (A::*g)() throw () = f; // expected-error {{is not superset of source}} + void (A::*g2)() throw () = 0; + void (A::*h)() throw (int, char) = f; + void (A::*i)() throw () = &A::f; // expected-error {{is not superset of source}} + void (A::*i2)() throw () = 0; + void (A::*j)() throw (int, char) = &A::f; + void x() { + // FIXME: Don't produce the second error here. + g2 = f; // expected-error {{is not superset}} expected-error {{incompatible}} + h = f; + i2 = &A::f; // expected-error {{is not superset}} expected-error {{incompatible}} + j = &A::f; + } +} + +namespace dr26 { // dr26: yes + struct A { A(A, const A & = A()); }; // expected-error {{must pass its first argument by reference}} + struct B { + B(); // expected-note {{candidate}} + B(const B &, B = B()); // expected-error {{no matching constructor}} expected-note {{candidate}} expected-note {{here}} + }; +} + +namespace dr27 { // dr27: yes + enum E { e } n; + E &m = true ? n : n; +} + +// dr28: na + +namespace dr29 { // dr29: 3.4 + void dr29_f0(); // expected-note {{here}} + void g0() { void dr29_f0(); } + extern "C++" void g0_cxx() { void dr29_f0(); } + extern "C" void g0_c() { void dr29_f0(); } // expected-error {{different language linkage}} + + extern "C" void dr29_f1(); // expected-note {{here}} + void g1() { void dr29_f1(); } + extern "C" void g1_c() { void dr29_f1(); } + extern "C++" void g1_cxx() { void dr29_f1(); } // expected-error {{different language linkage}} + + void g2() { void dr29_f2(); } // expected-note {{here}} + extern "C" void dr29_f2(); // expected-error {{different language linkage}} + + extern "C" void g3() { void dr29_f3(); } // expected-note {{here}} + extern "C++" void dr29_f3(); // expected-error {{different language linkage}} + + extern "C++" void g4() { void dr29_f4(); } // expected-note {{here}} + extern "C" void dr29_f4(); // expected-error {{different language linkage}} + + extern "C" void g5(); + extern "C++" void dr29_f5(); + void g5() { + void dr29_f5(); // ok, g5 is extern "C" but we're not inside the linkage-specification here. + } + + extern "C++" void g6(); + extern "C" void dr29_f6(); + void g6() { + void dr29_f6(); // ok, g6 is extern "C" but we're not inside the linkage-specification here. + } + + extern "C" void g7(); + extern "C++" void dr29_f7(); // expected-note {{here}} + extern "C" void g7() { + void dr29_f7(); // expected-error {{different language linkage}} + } + + extern "C++" void g8(); + extern "C" void dr29_f8(); // expected-note {{here}} + extern "C++" void g8() { + void dr29_f8(); // expected-error {{different language linkage}} + } +} + +namespace dr30 { // dr30: sup 468 c++11 + struct A { + template static int f(); + } a, *p = &a; + int x = A::template f<0>(); + int y = a.template f<0>(); + int z = p->template f<0>(); +#if __cplusplus < 201103L + // FIXME: It's not clear whether DR468 applies to C++98 too. + // expected-error@-5 {{'template' keyword outside of a template}} + // expected-error@-5 {{'template' keyword outside of a template}} + // expected-error@-5 {{'template' keyword outside of a template}} +#endif +} + +namespace dr31 { // dr31: yes + class X { + private: + void operator delete(void*); // expected-note {{here}} + }; + // We would call X::operator delete if X() threw (even though it can't, + // and even though we allocated the X using ::operator delete). + X *p = new X; // expected-error {{private}} +} + +// dr32: na + +namespace dr33 { // dr33: yes + namespace X { struct S; void f(void (*)(S)); } // expected-note {{candidate}} + namespace Y { struct T; void f(void (*)(T)); } // expected-note {{candidate}} + void g(X::S); + template Z g(Y::T); + void h() { f(&g); } // expected-error {{ambiguous}} +} + +// dr34: na +// dr35: dup 178 +// dr37: sup 475 + +namespace dr38 { // dr38: yes + template struct X {}; + template X operator+(X a, X b) { return a; } + template X operator+(X, X); +} + +namespace dr39 { // dr39: no + namespace example1 { + struct A { int &f(int); }; + struct B : A { + using A::f; + float &f(float); + } b; + int &r = b.f(0); + } + + namespace example2 { + struct A { + int &x(int); // expected-note {{found}} + static int &y(int); // expected-note {{found}} + }; + struct V { + int &z(int); + }; + struct B : A, virtual V { + using A::x; // expected-note {{found}} + float &x(float); + using A::y; // expected-note {{found}} + static float &y(float); + using V::z; + float &z(float); + }; + struct C : A, B, virtual V {} c; + int &x = c.x(0); // expected-error {{found in multiple base classes}} + // FIXME: This is valid, because we find the same static data member either way. + int &y = c.y(0); // expected-error {{found in multiple base classes}} + int &z = c.z(0); + } + + namespace example3 { + struct A { static int f(); }; + struct B : virtual A { using A::f; }; + struct C : virtual A { using A::f; }; + struct D : B, C {} d; + int k = d.f(); + } + + namespace example4 { + struct A { int n; }; // expected-note {{found}} + struct B : A {}; + struct C : A {}; + struct D : B, C { int f() { return n; } }; // expected-error {{found in multiple base-class}} + } + + namespace PR5916 { + // FIXME: This is valid. + struct A { int n; }; // expected-note +{{found}} + struct B : A {}; + struct C : A {}; + struct D : B, C {}; + int k = sizeof(D::n); // expected-error {{found in multiple base}} expected-error {{unknown type name}} +#if __cplusplus >= 201103L + decltype(D::n) n; // expected-error {{found in multiple base}} +#endif + } +} + +// dr40: na + +namespace dr41 { // dr41: yes + struct S f(S); +} + +namespace dr42 { // dr42: yes + struct A { static const int k = 0; }; + struct B : A { static const int k = A::k; }; +} + +// dr43: na + +namespace dr44 { // dr44: yes + struct A { + template void f(); + template<> void f<0>(); // expected-error {{explicit specialization of 'f' in class scope}} + }; +} + +namespace dr45 { // dr45: yes + class A { + class B {}; + class C : B {}; + C c; + }; +} + +namespace dr46 { // dr46: yes + template struct A { template struct B {}; }; + template template struct A::B; // expected-error {{expected unqualified-id}} +} + +namespace dr47 { // dr47: no + template struct A { + friend void f() { T t; } + }; + A a; + A b; +#if __cplusplus < 201103L + // expected-error@-5 {{redefinition}} expected-note@-5 {{previous}} + // expected-note@-3 {{instantiation of}} +#else + void f(); + // FIXME: We should produce some kind of error here. C++11 [temp.friend]p4 + // says we instantiate 'f' when it's odr-used, but that doesn't imply that + // this is valid; we still have multiple definitions of 'f' even if we never + // instantiate any of them. + void g() { f(); } +#endif +} + +namespace dr48 { // dr48: yes + namespace { + struct S { + static const int m = 0; + static const int n = 0; + static const int o = 0; + }; + } + int a = S::m; + // FIXME: We should produce a 'has internal linkage but is not defined' + // diagnostic for 'S::n'. + const int &b = S::n; + const int S::o; + const int &c = S::o; +} + +namespace dr49 { // dr49: yes + template struct A {}; // expected-note {{here}} + int k; +#if __has_feature(cxx_constexpr) + constexpr +#endif + int *const p = &k; + A<&k> a; + A

b; // expected-error {{must have its address taken}} +#if __cplusplus < 201103L + // expected-error@-2 {{internal linkage}} + // expected-note@-5 {{here}} +#endif +} + +namespace dr50 { // dr50: yes + struct X; // expected-note {{forward}} + extern X *p; + X *q = (X*)p; + X *r = static_cast(p); + X *s = const_cast(p); + X *t = reinterpret_cast(p); + X *u = dynamic_cast(p); // expected-error {{incomplete}} +} + +namespace dr51 { // dr51: yes + struct A {}; + struct B : A {}; + struct S { + operator A&(); + operator B&(); + } s; + A &a = s; +} + +namespace dr52 { // dr52: yes + struct A { int n; }; // expected-note {{here}} + struct B : private A {} b; // expected-note 2{{private}} + // FIXME: This first diagnostic is very strangely worded, and seems to be bogus. + int k = b.A::n; // expected-error {{'A' is a private member of 'dr52::A'}} + // expected-error@-1 {{cannot cast 'struct B' to its private base}} +} + +namespace dr53 { // dr53: yes + int n = 0; + enum E { e } x = static_cast(n); +} + +namespace dr54 { // dr54: yes + struct A { int a; } a; + struct V { int v; } v; + struct B : private A, virtual V { int b; } b; // expected-note 6{{private here}} + + A &sab = static_cast(b); // expected-error {{private base}} + A *spab = static_cast(&b); // expected-error {{private base}} + int A::*smab = static_cast(&B::b); // expected-error {{private base}} + B &sba = static_cast(a); // expected-error {{private base}} + B *spba = static_cast(&a); // expected-error {{private base}} + int B::*smba = static_cast(&A::a); // expected-error {{private base}} + + V &svb = static_cast(b); + V *spvb = static_cast(&b); + int V::*smvb = static_cast(&B::b); // expected-error {{virtual base}} + B &sbv = static_cast(v); // expected-error {{virtual base}} + B *spbv = static_cast(&v); // expected-error {{virtual base}} + int B::*smbv = static_cast(&V::v); // expected-error {{virtual base}} + + A &cab = (A&)(b); + A *cpab = (A*)(&b); + int A::*cmab = (int A::*)(&B::b); + B &cba = (B&)(a); + B *cpba = (B*)(&a); + int B::*cmba = (int B::*)(&A::a); + + V &cvb = (V&)(b); + V *cpvb = (V*)(&b); + int V::*cmvb = (int V::*)(&B::b); // expected-error {{virtual base}} + B &cbv = (B&)(v); // expected-error {{virtual base}} + B *cpbv = (B*)(&v); // expected-error {{virtual base}} + int B::*cmbv = (int B::*)(&V::v); // expected-error {{virtual base}} +} + +namespace dr55 { // dr55: yes + enum E { e = 5 }; + int test[(e + 1 == 6) ? 1 : -1]; +} + +namespace dr56 { // dr56: yes + struct A { + typedef int T; // expected-note {{previous}} + typedef int T; // expected-error {{redefinition}} + }; + struct B { + struct X; + typedef X X; // expected-note {{previous}} + typedef X X; // expected-error {{redefinition}} + }; +} + +namespace dr58 { // dr58: yes + // FIXME: Ideally, we should have a CodeGen test for this. +#if __cplusplus >= 201103L + enum E1 { E1_0 = 0, E1_1 = 1 }; + enum E2 { E2_0 = 0, E2_m1 = -1 }; + struct X { E1 e1 : 1; E2 e2 : 1; }; + static_assert(X{E1_1, E2_m1}.e1 == 1, ""); + static_assert(X{E1_1, E2_m1}.e2 == -1, ""); +#endif +} + +namespace dr59 { // dr59: yes + template struct convert_to { operator T() const; }; + struct A {}; // expected-note 2{{volatile qualifier}} + struct B : A {}; // expected-note 2{{volatile qualifier}} +#if __cplusplus >= 201103L // move constructors + // expected-note@-3 2{{volatile qualifier}} + // expected-note@-3 2{{volatile qualifier}} +#endif + + A a1 = convert_to(); + A a2 = convert_to(); + A a3 = convert_to(); + A a4 = convert_to(); // expected-error {{no viable}} + A a5 = convert_to(); // expected-error {{no viable}} + + B b1 = convert_to(); + B b2 = convert_to(); + B b3 = convert_to(); + B b4 = convert_to(); // expected-error {{no viable}} + B b5 = convert_to(); // expected-error {{no viable}} + + int n1 = convert_to(); + int n2 = convert_to(); + int n3 = convert_to(); + int n4 = convert_to(); + int n5 = convert_to(); +} + +namespace dr60 { // dr60: yes + void f(int &); + int &f(...); + const int k = 0; + int &n = f(k); +} + +namespace dr61 { // dr61: yes + struct X { + static void f(); + } x; + struct Y { + static void f(); + static void f(int); + } y; + // This is (presumably) valid, because x.f does not refer to an overloaded + // function name. + void (*p)() = &x.f; + void (*q)() = &y.f; // expected-error {{cannot create a non-constant pointer to member function}} + void (*r)() = y.f; // expected-error {{cannot create a non-constant pointer to member function}} +} + +namespace dr62 { // dr62: yes + struct A { + struct { int n; } b; + }; + template struct X {}; + template T get() { return get(); } + template int take(T) { return 0; } + + X x1; + A a = get(); + + typedef struct { } *NoNameForLinkagePtr; +#if __cplusplus < 201103L + // expected-note@-2 5{{here}} +#endif + NoNameForLinkagePtr noNameForLinkagePtr; + + struct Danger { + NoNameForLinkagePtr p; + }; + + X x2; + X x3; + NoNameForLinkagePtr p1 = get(); + NoNameForLinkagePtr p2 = get(); + int n1 = take(noNameForLinkagePtr); +#if __cplusplus < 201103L + // expected-error@-6 {{uses unnamed type}} + // expected-error@-6 {{uses unnamed type}} + // expected-error@-6 {{uses unnamed type}} + // expected-error@-6 {{uses unnamed type}} + // expected-error@-6 {{uses unnamed type}} +#endif + + X x4; + + void f() { + struct NoLinkage {}; + X a; + X b; + get(); + get(); + X c; + X d; +#if __cplusplus < 201103L + // expected-error@-7 {{uses local type}} + // expected-error@-7 {{uses local type}} + // expected-error@-7 {{uses local type}} + // expected-error@-7 {{uses local type}} + // expected-error@-7 {{uses local type}} + // expected-error@-7 {{uses local type}} +#endif + } +} + +namespace dr63 { // dr63: yes + template struct S { typename T::error e; }; + extern S *p; + void *q = p; +} + +namespace dr64 { // dr64: yes + template void f(T); + template void f(T*); + template<> void f(int*); + template<> void f(int*); + template<> void f(int); +} + +// dr65: na + +namespace dr66 { // dr66: no + namespace X { + int f(int n); // expected-note 2{{candidate}} + } + using X::f; + namespace X { + int f(int n = 0); + int f(int, int); + } + // FIXME: The first two calls here should be accepted. + int a = f(); // expected-error {{no matching function}} + int b = f(1); + int c = f(1, 2); // expected-error {{no matching function}} +} + +// dr67: na + +namespace dr68 { // dr68: yes + template struct X {}; + struct ::dr68::X x1; + struct ::dr68::template X x2; +#if __cplusplus < 201103L + // expected-error@-2 {{'template' keyword outside of a template}} +#endif + struct Y { + friend struct X; + friend struct ::dr68::X; + friend struct ::dr68::template X; +#if __cplusplus < 201103L + // expected-error@-2 {{'template' keyword outside of a template}} +#endif + }; + template + struct Z { + friend struct ::dr68::template X; + friend typename ::dr68::X; +#if __cplusplus < 201103L + // expected-error@-2 {{C++11 extension}} +#endif + }; +} + +namespace dr69 { // dr69: yes + template static void f() {} + // FIXME: Should we warn here? + inline void g() { f(); } + // FIXME: This should be rejected, per [temp.explicit]p11. + extern template void f(); +#if __cplusplus < 201103L + // expected-error@-2 {{C++11 extension}} +#endif + template struct Q {}; + Q<&f > q; +#if __cplusplus < 201103L + // expected-error@-2 {{internal linkage}} expected-note@-11 {{here}} +#endif +} + +namespace dr70 { // dr70: yes + template struct A {}; + template int f(int (&)[I + J], A, A); + int arr[7]; + int k = f(arr, A<3>(), A<4>()); +} + +// dr71: na +// dr72: dup 69 + +#if __cplusplus >= 201103L +namespace dr73 { // dr73: no + // The resolution to dr73 is unworkable. Consider: + int a, b; + static_assert(&a + 1 != &b, ""); +} +#endif + +namespace dr74 { // dr74: yes + enum E { k = 5 }; + int (*p)[k] = new int[k][k]; +} + +namespace dr75 { // dr75: yes + struct S { + static int n = 0; // expected-error {{non-const}} + }; +} + +namespace dr76 { // dr76: yes + const volatile int n = 1; + int arr[n]; // expected-error +{{variable length array}} +} + +namespace dr77 { // dr77: yes + struct A { + struct B {}; + friend struct B; + }; +} + +namespace dr78 { // dr78: sup ???? + // Under DR78, this is valid, because 'k' has static storage duration, so is + // zero-initialized. + const int k; // expected-error {{default initialization of an object of const}} +} + +// dr79: na + +namespace dr80 { // dr80: yes + struct A { + int A; + }; + struct B { + static int B; // expected-error {{same name as its class}} + }; + struct C { + int C; // expected-note {{hidden by}} + // FIXME: These diagnostics aren't very good. + C(); // expected-error {{must use 'struct' tag to refer to}} expected-error {{expected member name}} + }; + struct D { + D(); + int D; // expected-error {{same name as its class}} + }; +} + +// dr81: na +// dr82: dup 48 + +namespace dr83 { // dr83: yes + int &f(const char*); + char &f(char *); + int &k = f("foo"); +} + +namespace dr84 { // dr84: yes + struct B; + struct A { operator B() const; }; + struct C {}; + struct B { + B(B&); // expected-note {{candidate}} + B(C); + operator C() const; + }; + A a; + // Cannot use B(C) / operator C() pair to construct the B from the B temporary + // here. + B b = a; // expected-error {{no viable}} +} + +namespace dr85 { // dr85: yes + struct A { + struct B; + struct B {}; // expected-note{{previous declaration is here}} + struct B; // expected-error{{class member cannot be redeclared}} + + union U; + union U {}; // expected-note{{previous declaration is here}} + union U; // expected-error{{class member cannot be redeclared}} + +#if __cplusplus >= 201103L + enum E1 : int; + enum E1 : int { e1 }; // expected-note{{previous declaration is here}} + enum E1 : int; // expected-error{{class member cannot be redeclared}} + + enum class E2; + enum class E2 { e2 }; // expected-note{{previous declaration is here}} + enum class E2; // expected-error{{class member cannot be redeclared}} +#endif + }; + + template + struct C { + struct B {}; // expected-note{{previous declaration is here}} + struct B; // expected-error{{class member cannot be redeclared}} + }; +} + +// dr86: dup 446 + +namespace dr87 { // dr87: no + template struct X {}; + // FIXME: This is invalid. + X x; + // ... but this is valid. + X y; +} + +namespace dr88 { // dr88: yes + template struct S { + static const int a = 1; + static const int b; + }; + // FIXME: This diagnostic is pretty bad. + template<> const int S::a = 4; // expected-error {{redefinition}} expected-note {{previous}} + template<> const int S::b = 4; +} + +// dr89: na + +namespace dr90 { // dr90: yes + struct A { + template friend void dr90_f(T); + }; + struct B : A { + template friend void dr90_g(T); + struct C {}; + union D {}; + }; + struct E : B {}; + struct F : B::C {}; + + void test() { + dr90_f(A()); + dr90_f(B()); + dr90_f(B::C()); // expected-error {{undeclared identifier}} + dr90_f(B::D()); // expected-error {{undeclared identifier}} + dr90_f(E()); + dr90_f(F()); // expected-error {{undeclared identifier}} + + dr90_g(A()); // expected-error {{undeclared identifier}} + dr90_g(B()); + dr90_g(B::C()); + dr90_g(B::D()); + dr90_g(E()); + dr90_g(F()); // expected-error {{undeclared identifier}} + } +} + +namespace dr91 { // dr91: yes + union U { friend int f(U); }; + int k = f(U()); +} + +// dr93: na + +namespace dr94 { // dr94: yes + struct A { static const int n = 5; }; + int arr[A::n]; +} + +namespace dr95 { // dr95: yes + struct A; + struct B; + namespace N { + class C { + friend struct A; + friend struct B; + static void f(); // expected-note {{here}} + }; + struct A *p; // dr95::A, not dr95::N::A. + } + A *q = N::p; // ok, same type + struct B { void f() { N::C::f(); } }; // expected-error {{private}} +} + +namespace dr96 { // dr96: no + struct A { + void f(int); + template int f(T); + template struct S {}; + } a; + template class X> struct B {}; + + template + void test() { + int k1 = a.template f(0); + // FIXME: This is ill-formed, because 'f' is not a template-id and does not + // name a class template. + // FIXME: What about alias templates? + int k2 = a.template f(1); + A::template S s; + B b; + } +} + +namespace dr97 { // dr97: yes + struct A { + static const int a = false; + static const int b = !a; + }; +} + +namespace dr98 { // dr98: yes + void test(int n) { + switch (n) { + try { // expected-note 2{{bypasses}} + case 0: // expected-error {{protected}} + x: + throw n; + } catch (...) { // expected-note 2{{bypasses}} + case 1: // expected-error {{protected}} + y: + throw n; + } + case 2: + goto x; // expected-error {{protected}} + case 3: + goto y; // expected-error {{protected}} + } + } +} + +namespace dr99 { // dr99: sup 214 + template void f(T&); + template int &f(const T&); + const int n = 0; + int &r = f(n); +} diff --git a/test/CXX/drs/dr1xx.cpp b/test/CXX/drs/dr1xx.cpp new file mode 100644 index 000000000000..7045148034fb --- /dev/null +++ b/test/CXX/drs/dr1xx.cpp @@ -0,0 +1,1011 @@ +// RUN: %clang_cc1 -std=c++98 -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors +// RUN: %clang_cc1 -std=c++11 -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors +// RUN: %clang_cc1 -std=c++1y -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors + +namespace dr100 { // dr100: yes + template struct A {}; // expected-note {{declared here}} + template struct B {}; // expected-note {{declared here}} + A<"foo"> a; // expected-error {{does not refer to any declaration}} + B<"bar"> b; // expected-error {{does not refer to any declaration}} +} + +namespace dr101 { // dr101: yes + extern "C" void dr101_f(); + typedef unsigned size_t; + namespace X { + extern "C" void dr101_f(); + typedef unsigned size_t; + } + using X::dr101_f; + using X::size_t; +} + +namespace dr102 { // dr102: yes + namespace A { + template T f(T a, T b) { return a + b; } // expected-error {{neither visible in the template definition nor found by argument-dependent lookup}} + } + namespace B { + struct S {}; + } + B::S operator+(B::S, B::S); // expected-note {{should be declared prior to the call site or in namespace 'dr102::B'}} + template B::S A::f(B::S, B::S); // expected-note {{in instantiation of}} +} + +// dr103: na +// dr104 FIXME: add codegen test +// dr105: na + +namespace dr106 { // dr106: sup 540 + typedef int &r1; + typedef r1 &r1; + typedef const r1 r1; + typedef const r1 &r1; + + typedef const int &r2; + typedef r2 &r2; + typedef const r2 r2; + typedef const r2 &r2; +} + +namespace dr107 { // dr107: yes + struct S {}; + extern "C" S operator+(S, S) { return S(); } +} + +namespace dr108 { // dr108: yes + template struct A { + struct B { typedef int X; }; + B::X x; // expected-error {{missing 'typename'}} + struct C : B { X x; }; // expected-error {{unknown type name}} + }; + template<> struct A::B { int X; }; +} + +namespace dr109 { // dr109: yes + struct A { template void f(T); }; + template struct B : T { + using T::template f; // expected-error {{using declaration can not refer to a template}} + void g() { this->f(123); } // expected-error {{use 'template'}} + }; +} + +namespace dr111 { // dr111: dup 535 + struct A { A(); A(volatile A&, int = 0); A(A&, const char * = "foo"); }; + struct B : A { B(); }; // expected-note +{{would lose const qualifier}} expected-note {{requires 0 arguments}} + const B b1; + B b2(b1); // expected-error {{no matching constructor}} +} + +namespace dr112 { // dr112: yes + struct T { int n; }; + typedef T Arr[1]; + + const T a1[1] = {}; + volatile T a2[1] = {}; + const Arr a3 = {}; + volatile Arr a4 = {}; + template struct X {}; + X x1; + X x2; + X x3; + X x4; +#if __cplusplus < 201103L + // expected-error@-5 {{internal linkage}} expected-note@-10 {{here}} + // expected-error@-4 {{internal linkage}} expected-note@-9 {{here}} +#else + // FIXME: Test this somehow. +#endif +} + +namespace dr113 { // dr113: yes + extern void (*p)(); + void f() { + no_such_function(); // expected-error {{undeclared}} + p(); + } + void g(); + void (*p)() = &g; +} + +namespace dr114 { // dr114: yes + struct A { + virtual void f(int) = 0; // expected-note {{unimplemented}} + }; + struct B : A { + template void f(T); + void g() { f(0); } + } b; // expected-error {{abstract}} +} + +namespace dr115 { // dr115: yes + template int f(T); // expected-note +{{}} + template int g(T); // expected-note +{{}} + template int g(T, int); // expected-note +{{}} + + int k1 = f(&f); // expected-error {{no match}} + int k2 = f(&f); + int k3 = f(&g); // expected-error {{no match}} + + void h() { + (void)&f; // expected-error {{address of overloaded function 'f' cannot be cast to type 'void'}} + (void)&f; + (void)&g; // expected-error {{address of overloaded function 'g' cannot be cast to type 'void'}} + + &f; // expected-error {{reference to overloaded function could not be resolved}} + &f; // expected-warning {{unused}} + &g; // expected-error {{reference to overloaded function could not be resolved}} + } + + struct S { + template static int f(T); + template static int g(T); + template static int g(T, int); + } s; + + int k4 = f(&s.f); // expected-error {{non-constant pointer to member}} + int k5 = f(&s.f); + int k6 = f(&s.g); // expected-error {{non-constant pointer to member}} + + void i() { + (void)&s.f; // expected-error {{non-constant pointer to member}} + (void)&s.f; + (void)&s.g; // expected-error {{non-constant pointer to member}} + + &s.f; // expected-error {{non-constant pointer to member}} + &s.f; // expected-warning {{unused}} + &s.g; // expected-error {{non-constant pointer to member}} + } + + struct T { + template int f(T); + template int g(T); + template int g(T, int); + } t; + + int k7 = f(&s.f); // expected-error {{non-constant pointer to member}} + int k8 = f(&s.f); + int k9 = f(&s.g); // expected-error {{non-constant pointer to member}} + + void j() { + (void)&s.f; // expected-error {{non-constant pointer to member}} + (void)&s.f; + (void)&s.g; // expected-error {{non-constant pointer to member}} + + &s.f; // expected-error {{non-constant pointer to member}} + &s.f; // expected-warning {{unused}} + &s.g; // expected-error {{non-constant pointer to member}} + } + +#if __cplusplus >= 201103L + // Special case kicks in only if a template argument list is specified. + template void with_default(); // expected-note +{{}} + int k10 = f(&with_default); // expected-error {{no matching function}} + int k11 = f(&with_default<>); + void k() { + (void)&with_default; // expected-error {{overloaded function}} + (void)&with_default<>; + &with_default; // expected-error {{overloaded function}} + &with_default<>; // expected-warning {{unused}} + } +#endif +} + +namespace dr116 { // dr116: yes + template struct A {}; + template void f(A) {} // expected-note {{previous}} + template void f(A) {} // expected-error {{redefinition}} + template void f(A) {} // expected-note {{previous}} + template void f(A) {} // expected-error {{redefinition}} +} + +// dr117: na +// dr118 FIXME: add codegen test +// dr119: na +// dr120: na + +namespace dr121 { // dr121: yes + struct X { + template struct Y {}; + }; + template struct Z { + X::Y x; + T::Y y; // expected-error +{{}} + }; + Z z; +} + +namespace dr122 { // dr122: yes + template void f(); + void g() { f(); } +} + +// dr123: na +// dr124: dup 201 + +// dr125: yes +struct dr125_A { struct dr125_B {}; }; // expected-note {{here}} +dr125_A::dr125_B dr125_C(); +namespace dr125_B { dr125_A dr125_C(); } +namespace dr125 { + struct X { + friend dr125_A::dr125_B (::dr125_C)(); // ok + friend dr125_A (::dr125_B::dr125_C)(); // ok + friend dr125_A::dr125_B::dr125_C(); // expected-error {{did you mean the constructor name 'dr125_B'?}} + // expected-warning@-1 {{missing exception specification}} +#if __cplusplus >= 201103L + // expected-error@-3 {{follows constexpr declaration}} expected-note@-10 {{here}} +#endif + }; +} + +namespace dr126 { // dr126: no + struct C {}; + struct D : C {}; + struct E : private C { friend class A; friend class B; }; + struct F : protected C {}; + struct G : C {}; + struct H : D, G {}; + + struct A { + virtual void cp() throw(C*); + virtual void dp() throw(C*); + virtual void ep() throw(C*); // expected-note {{overridden}} + virtual void fp() throw(C*); // expected-note {{overridden}} + virtual void gp() throw(C*); + virtual void hp() throw(C*); // expected-note {{overridden}} + + virtual void cr() throw(C&); + virtual void dr() throw(C&); + virtual void er() throw(C&); // expected-note {{overridden}} + virtual void fr() throw(C&); // expected-note {{overridden}} + virtual void gr() throw(C&); + virtual void hr() throw(C&); // expected-note {{overridden}} + + virtual void pv() throw(void*); // expected-note {{overridden}} + +#if __cplusplus >= 201103L + virtual void np() throw(C*); // expected-note {{overridden}} + virtual void npm() throw(int C::*); // expected-note {{overridden}} + virtual void nr() throw(C&); // expected-note {{overridden}} +#endif + + virtual void ref1() throw(C *const&); + virtual void ref2() throw(C *); + + virtual void v() throw(int); + virtual void w() throw(const int); + virtual void x() throw(int*); + virtual void y() throw(const int*); + virtual void z() throw(int); // expected-note {{overridden}} + }; + struct B : A { + virtual void cp() throw(C*); + virtual void dp() throw(D*); + virtual void ep() throw(E*); // expected-error {{more lax}} + virtual void fp() throw(F*); // expected-error {{more lax}} + virtual void gp() throw(G*); + virtual void hp() throw(H*); // expected-error {{more lax}} + + virtual void cr() throw(C&); + virtual void dr() throw(D&); + virtual void er() throw(E&); // expected-error {{more lax}} + virtual void fr() throw(F&); // expected-error {{more lax}} + virtual void gr() throw(G&); + virtual void hr() throw(H&); // expected-error {{more lax}} + + virtual void pv() throw(C*); // expected-error {{more lax}} FIXME: This is valid. + +#if __cplusplus >= 201103L + using nullptr_t = decltype(nullptr); + virtual void np() throw(nullptr_t*); // expected-error {{more lax}} FIXME: This is valid. + virtual void npm() throw(nullptr_t*); // expected-error {{more lax}} FIXME: This is valid. + virtual void nr() throw(nullptr_t&); // expected-error {{more lax}} This is not. +#endif + + virtual void ref1() throw(D *const &); + virtual void ref2() throw(D *); + + virtual void v() throw(const int); + virtual void w() throw(int); + virtual void x() throw(const int*); // FIXME: 'const int*' is not allowed by A::h. + virtual void y() throw(int*); // ok + virtual void z() throw(long); // expected-error {{more lax}} + }; +} + +namespace dr127 { // dr127: yes + __extension__ typedef __decltype(sizeof(0)) size_t; + template struct A { + A() throw(int); + void *operator new(size_t, const char * = 0); + void operator delete(void *, const char *) { T::error; } // expected-error 2{{no members}} + void operator delete(void *) { T::error; } + }; + A *p = new A; // expected-note {{instantiat}} + A *q = new ("") A; // expected-note {{instantiat}} +} + +namespace dr128 { // dr128: yes + enum E1 { e1 } x = e1; + enum E2 { e2 } y = static_cast(x), z = static_cast(e1); +} + +// dr129: dup 616 +// dr130: na + +namespace dr131 { // dr131: yes + const char *a_with_\u0e8c = "\u0e8c"; + const char *b_with_\u0e8d = "\u0e8d"; + const char *c_with_\u0e8e = "\u0e8e"; +#if __cplusplus < 201103L + // expected-error@-4 {{expected ';'}} expected-error@-2 {{expected ';'}} +#endif +} + +namespace dr132 { // dr132: no + void f() { + extern struct {} x; // ok + extern struct S {} y; // FIXME: This is invalid. + } + static enum { E } e; +} + +// dr133: dup 87 +// dr134: na + +namespace dr135 { // dr135: yes + struct A { + A f(A a) { return a; } + friend A g(A a) { return a; } + static A h(A a) { return a; } + }; +} + +namespace dr136 { // dr136: 3.4 + void f(int, int, int = 0); // expected-note {{previous declaration is here}} + void g(int, int, int); // expected-note {{previous declaration is here}} + struct A { + friend void f(int, int = 0, int); // expected-error {{friend declaration specifying a default argument must be the only declaration}} + friend void g(int, int, int = 0); // expected-error {{friend declaration specifying a default argument must be the only declaration}} + friend void h(int, int, int = 0); // expected-error {{friend declaration specifying a default argument must be a definition}} + friend void i(int, int, int = 0) {} // expected-note {{previous declaration is here}} + friend void j(int, int, int = 0) {} + operator int(); + }; + void i(int, int, int); // expected-error {{friend declaration specifying a default argument must be the only declaration}} + void q() { + j(A(), A()); // ok, has default argument + } + extern "C" void k(int, int, int, int); // expected-note {{previous declaration is here}} + namespace NSA { + struct A { + friend void dr136::k(int, int, int, int = 0); // expected-error {{friend declaration specifying a default argument must be the only declaration}} \ + // expected-note {{previous declaration is here}} + }; + } + namespace NSB { + struct A { + friend void dr136::k(int, int, int = 0, int); // expected-error {{friend declaration specifying a default argument must be the only declaration}} + }; + } + struct B { + void f(int); // expected-note {{previous declaration is here}} + }; + struct C { + friend void B::f(int = 0); // expected-error {{friend declaration specifying a default argument must be the only declaration}} + }; +} + +namespace dr137 { // dr137: yes + extern void *p; + extern const void *cp; + extern volatile void *vp; + extern const volatile void *cvp; + int *q = static_cast(p); + int *qc = static_cast(cp); // expected-error {{casts away qualifiers}} + int *qv = static_cast(vp); // expected-error {{casts away qualifiers}} + int *qcv = static_cast(cvp); // expected-error {{casts away qualifiers}} + const int *cq = static_cast(p); + const int *cqc = static_cast(cp); + const int *cqv = static_cast(vp); // expected-error {{casts away qualifiers}} + const int *cqcv = static_cast(cvp); // expected-error {{casts away qualifiers}} + const volatile int *cvq = static_cast(p); + const volatile int *cvqc = static_cast(cp); + const volatile int *cvqv = static_cast(vp); + const volatile int *cvqcv = static_cast(cvp); +} + +namespace dr139 { // dr139: yes + namespace example1 { + typedef int f; // expected-note {{previous}} + struct A { + friend void f(A &); // expected-error {{different kind of symbol}} + }; + } + + namespace example2 { + typedef int f; + namespace N { + struct A { + friend void f(A &); + operator int(); + void g(A a) { int i = f(a); } // ok, f is typedef not friend function + }; + } + } +} + +namespace dr140 { // dr140: yes + void f(int *const) {} // expected-note {{previous}} + void f(int[3]) {} // expected-error {{redefinition}} + void g(const int); + void g(int n) { n = 2; } +} + +namespace dr141 { // dr141: yes + template void f(); + template struct S { int n; }; + struct A : S { + template void f(); + template struct S {}; + } a; + struct B : S {} b; + void g() { + a.f(); + (void)a.S::n; // expected-error {{no member named 'n'}} +#if __cplusplus < 201103L + // expected-error@-2 {{ambiguous}} + // expected-note@-11 {{lookup from the current scope}} + // expected-note@-9 {{lookup in the object type}} +#endif + b.f(); // expected-error {{no member}} expected-error +{{}} + (void)b.S::n; + } + template struct C { + T t; + void g() { + t.f(); // expected-error {{use 'template'}} + } + void h() { + (void)t.S::n; // ok + } + void i() { + (void)t.S(); // ok! + } + }; + void h() { C().h(); } // ok + struct X { + template void S(); + }; + void i() { C().i(); } // ok!! +} + +namespace dr142 { // dr142: yes + class B { // expected-note +{{here}} + public: + int mi; // expected-note +{{here}} + static int si; // expected-note +{{here}} + }; + class D : private B { // expected-note +{{here}} + }; + class DD : public D { + void f(); + }; + void DD::f() { + mi = 3; // expected-error {{private base class}} expected-error {{private member}} + si = 3; // expected-error {{private member}} + B b_old; // expected-error {{private member}} + dr142::B b; + b.mi = 3; + b.si = 3; + B::si = 3; // expected-error {{private member}} + dr142::B::si = 3; + B *bp1_old = this; // expected-error {{private member}} expected-error {{private base class}} + dr142::B *bp1 = this; // expected-error {{private base class}} + B *bp2_old = (B*)this; // expected-error 2{{private member}} + dr142::B *bp2 = (dr142::B*)this; + bp2->mi = 3; + } +} + +namespace dr143 { // dr143: yes + namespace A { struct X; } + namespace B { void f(A::X); } + namespace A { + struct X { friend void B::f(X); }; + } + void g(A::X x) { + f(x); // expected-error {{undeclared identifier 'f'}} + } +} + +namespace dr145 { // dr145: yes + void f(bool b) { + ++b; // expected-warning {{deprecated}} + b++; // expected-warning {{deprecated}} + } +} + +namespace dr147 { // dr147: no + namespace example1 { + template struct A { + template A(T); + }; + // FIXME: This appears to be valid, and EDG and G++ accept. + template<> template<> A::A(int) {} // expected-error {{out-of-line constructor for 'A' cannot have template arguments}} + } + namespace example2 { + struct A { A(); }; + struct B : A { B(); }; + A::A a1; // expected-error {{is a constructor}} + B::A a2; + } + namespace example3 { + template struct A { + template A(T); + static A a; + }; + template<> A::A(A::a); // expected-error {{is a constructor}} + } +} + +namespace dr148 { // dr148: yes + struct A { int A::*p; }; + int check1[__is_pod(int(A::*)) ? 1 : -1]; + int check2[__is_pod(A) ? 1 : -1]; +} + +// dr149: na + +namespace dr151 { // dr151: yes + struct X {}; + typedef int X::*p; +#if __cplusplus < 201103L +#define fold(x) (__builtin_constant_p(0) ? (x) : (x)) +#else +#define fold +#endif + int check[fold(p() == 0) ? 1 : -1]; +#undef fold +} + +namespace dr152 { // dr152: yes + struct A { + A(); // expected-note {{not viable}} + explicit A(const A&); + }; + A a1 = A(); // expected-error {{no matching constructor}} + A a2((A())); +} + +// dr153: na + +namespace dr154 { // dr154: yes + union { int a; }; // expected-error {{must be declared 'static'}} + namespace { + union { int b; }; + } + static union { int c; }; +} + +namespace dr155 { // dr155: dup 632 + struct S { int n; } s = { { 1 } }; // expected-warning {{braces around scalar initializer}} +} + +namespace dr159 { // dr159: no + namespace X { void f(); } + void f(); + // FIXME: This should be accepted. + void dr159::f() {} // expected-error {{extra qualification}} + void dr159::X::f() {} +} + +// dr160: na + +namespace dr161 { // dr161: yes + class A { + protected: + struct B { int n; } b; // expected-note 2{{here}} + static B bs; + void f(); // expected-note {{here}} + static void sf(); + }; + struct C : A {}; + struct D : A { + void g(C c) { + (void)b.n; + B b1; + C::B b2; // ok, accessible as a member of A + (void)&C::b; // expected-error {{protected}} + (void)&C::bs; + (void)c.b; // expected-error {{protected}} + (void)c.bs; + f(); + sf(); + c.f(); // expected-error {{protected}} + c.sf(); + A::f(); + D::f(); + A::sf(); + C::sf(); + D::sf(); + } + }; +} + +namespace dr162 { // dr162: no + struct A { + char &f(char); + static int &f(int); + + void g() { + int &a = (&A::f)(0); // FIXME: expected-error {{could not be resolved}} + char &b = (&A::f)('0'); // expected-error {{could not be resolved}} + } + }; + + int &c = (&A::f)(0); // FIXME: expected-error {{could not be resolved}} + char &d = (&A::f)('0'); // expected-error {{could not be resolved}} +} + +// dr163: na + +namespace dr164 { // dr164: yes + void f(int); + template int g(T t) { return f(t); } + + enum E { e }; + int f(E); + + int k = g(e); +} + +namespace dr165 { // dr165: no + namespace N { + struct A { friend struct B; }; + void f() { void g(); } + } + // FIXME: dr1477 says this is ok, dr165 says it's ill-formed + struct N::B {}; + // FIXME: dr165 says this is ill-formed, but the argument in dr1477 says it's ok + void N::g() {} +} + +namespace dr166 { // dr166: yes + namespace A { class X; } + + template int f(T t) { return t.n; } + int g(A::X); + template int h(T t) { return t.n; } // expected-error {{private}} + int i(A::X); + + namespace A { + class X { + friend int f(X); + friend int dr166::g(X); + friend int h(X); + friend int i(X); + int n; // expected-note 2{{here}} + }; + + int h(X x) { return x.n; } + int i(X x) { return x.n; } + } + + template int f(A::X); + int g(A::X x) { return x.n; } + template int h(A::X); // expected-note {{instantiation}} + int i(A::X x) { return x.n; } // expected-error {{private}} +} + +// dr167: sup 1012 + +namespace dr168 { // dr168: no + extern "C" typedef int (*p)(); + extern "C++" typedef int (*q)(); + struct S { + static int f(); + }; + p a = &S::f; // FIXME: this should fail. + q b = &S::f; +} + +namespace dr169 { // dr169: yes + template struct A { int n; }; + struct B { + template struct C; + template void f(); + template static int n; // expected-error 0-1{{extension}} + }; + struct D : A, B { + using A::n; + using B::C; // expected-error {{using declaration can not refer to a template specialization}} + using B::f; // expected-error {{using declaration can not refer to a template specialization}} + using B::n; // expected-error {{using declaration can not refer to a template specialization}} + }; +} + +namespace { // dr171: yes + int dr171a; +} +int dr171b; // expected-note {{here}} +namespace dr171 { + extern "C" void dr171a(); + extern "C" void dr171b(); // expected-error {{conflicts}} +} + +namespace dr172 { // dr172: yes + enum { zero }; + int check1[-1 < zero ? 1 : -1]; + + enum { x = -1, y = (unsigned int)-1 }; + int check2[sizeof(x) > sizeof(int) ? 1 : -1]; + + enum { a = (unsigned int)-1 / 2 }; + int check3a[sizeof(a) == sizeof(int) ? 1 : -1]; + int check3b[-a < 0 ? 1 : -1]; + + enum { b = (unsigned int)-1 / 2 + 1 }; + int check4a[sizeof(b) == sizeof(unsigned int) ? 1 : -1]; + int check4b[-b > 0 ? 1 : -1]; + + enum { c = (unsigned long)-1 / 2 }; + int check5a[sizeof(c) == sizeof(long) ? 1 : -1]; + int check5b[-c < 0 ? 1 : -1]; + + enum { d = (unsigned long)-1 / 2 + 1 }; + int check6a[sizeof(d) == sizeof(unsigned long) ? 1 : -1]; + int check6b[-d > 0 ? 1 : -1]; + + enum { e = (unsigned long long)-1 / 2 }; // expected-error 0-1{{extension}} + int check7a[sizeof(e) == sizeof(long) ? 1 : -1]; // expected-error 0-1{{extension}} + int check7b[-e < 0 ? 1 : -1]; + + enum { f = (unsigned long long)-1 / 2 + 1 }; // expected-error 0-1{{extension}} + int check8a[sizeof(f) == sizeof(unsigned long) ? 1 : -1]; // expected-error 0-1{{extension}} + int check8b[-f > 0 ? 1 : -1]; +} + +namespace dr173 { // dr173: yes + int check[('0' + 1 == '1' && '0' + 2 == '2' && '0' + 3 == '3' && + '0' + 4 == '4' && '0' + 5 == '5' && '0' + 6 == '6' && + '0' + 7 == '7' && '0' + 8 == '8' && '0' + 9 == '9') ? 1 : -1]; +} + +// dr174: sup 1012 + +namespace dr175 { // dr175: yes + struct A {}; // expected-note {{here}} + struct B : private A {}; // expected-note {{constrained by private inheritance}} + struct C : B { + A a; // expected-error {{private}} + dr175::A b; + }; +} + +namespace dr176 { // dr176: yes + template class Y; + template<> class Y { + void f() { + typedef Y A; // expected-note {{here}} + typedef Y A; // expected-error {{different types ('Y' vs 'Y')}} + } + }; + + template struct Base {}; // expected-note 2{{found}} + template struct Derived : public Base { + void f() { + typedef typename Derived::template Base A; + typedef typename Derived::Base A; + } + }; + template struct Derived; + + template struct Derived2 : Base, Base { + typename Derived2::Base b; // expected-error {{found in multiple base classes}} + typename Derived2::Base d; + }; + + template class X { // expected-note {{here}} + X *p1; + X *p2; + X *p3; + dr176::X *p4; // expected-error {{requires template arguments}} + }; +} + +namespace dr177 { // dr177: yes + struct B {}; + struct A { + A(A &); // expected-note {{not viable: expects an l-value}} + A(const B &); + }; + B b; + A a = b; // expected-error {{no viable constructor copying variable}} +} + +namespace dr178 { // dr178: yes + int check[int() == 0 ? 1 : -1]; +#if __cplusplus >= 201103L + static_assert(int{} == 0, ""); + struct S { int a, b; }; + static_assert(S{1}.b == 0, ""); + struct T { constexpr T() : n() {} int n; }; + static_assert(T().n == 0, ""); + struct U : S { constexpr U() : S() {} }; + static_assert(U().b == 0, ""); +#endif +} + +namespace dr179 { // dr179: yes + void f(); + int n = &f - &f; // expected-error {{arithmetic on pointers to the function type 'void ()'}} +} + +namespace dr180 { // dr180: yes + template struct X : T, T::some_base { + X() : T::some_type_that_might_be_T(), T::some_base() {} + friend class T::some_class; + void f() { + enum T::some_enum e; + } + }; +} + +namespace dr181 { // dr181: yes + namespace X { + template