Fix warnings: cursor_shape.c: parse_shape_opt(): Garbage value: FP.

Problem: Assigned value is garbage or undefined @ 187.
         http://neovim.org/doc/reports/clang/report-7b7d61.html#EndPath.

Diagnostic: False positive.
Rationale : `colonp`, must be `>= modep, or null` by `vim_strchr`
            postcondition. At this point we also it's not null and it's
            not equal to `modep`, by previous code. So, it must be
            `> modep`.
Resolution: Assert `colonp > modep`.
Fix warnings: screen.c: redraw_asap(): Various (6): MI.

Problems: Argument with 'nonnull' attribute passed null @ 277.
          http://neovim.org/doc/reports/clang/report-9c3614.html#EndPath

          Result of operation is garbage or undefined @ 281.
          http://neovim.org/doc/reports/clang/report-45efbf.html#EndPath

          Argument with 'nonnull' attribute passed null @ 306.
          http://neovim.org/doc/reports/clang/report-ffb84f.html#EndPath

          Result of operation is garbage or undefined @ 311.
          http://neovim.org/doc/reports/clang/report-d04333.html#EndPath

          Argument with 'nonnull' attribute passed null @ 315.
          http://neovim.org/doc/reports/clang/report-786819.html#EndPath

          Uninitialized argument value @ 328.
          http://neovim.org/doc/reports/clang/report-2a5506.html#EndPath

Diagnostic: Multithreading issues.
Rationale : All reported problems can only occur if accesed globals
            change state while executing function, which could only
            happen in a multithreaded environment.
Resolution: Use local variables.
            Note that this change alters function semantics, as now
            function only depends on global values at entry time.
            This shouldn't be a problem, though, as new semantics should
            be in fact better.
Fix warnings: screen.c: win_line(): Dead initialization: HI.

Problem: Dead initialization @ 3477.
         http://neovim.org/doc/reports/clang/report-94b736.html#EndPath

Diagnostic: Harmless issue.
Rationale : `len` is assigned a new value just some lines below. So,
            this just seems something due to old-style variable
            declarations.
Resolution: We could just remove initialization, but prefer moving
            declaration down to point of initialization.
Fix warnings: screen.c: win_line(): Dead assigment: HI.

Problem: Dead assigment.
         http://neovim.org/doc/reports/clang/report-7362ba.html#EndPath

Diagnostic: Harmless issue.
Rationale : `boguscols` is in fact unread by downstream code.
Resolution: Comment out. This is preferred here over just removing the
            line because involved logic is complex, and future readers
            of this code could find this extra knowledge useful to
            understand what the code is doing.
Fix warnings: screen.c: showmode(): Dead assignment: HI.

Problem: Dead assignment @ 7535.
         http://neovim.org/doc/reports/clang/report-19a5cd.html#EndPath

Diagnostic: Harmless issue.
Rationale : `length = msg_col;` is unconditionally executed after this.
Resolution: Remove assignment.
Fix warnings: screen.c: draw_tabline(): Dead assignment: HI.

Problem: Dead assignment @ 7711.
         http://neovim.org/doc/reports/clang/report-835eb6.html#EndPath

Diagnostic: Harmless issue.
Rationale : `scol` is only used within `FOR_ALL_TABS` body, which
            assigns another value to `scol` at the beginning of each
            iteration. If `FOR_ALL_TABS` body would not execute (no
            tabs) nothing harmful would happen, as code following
            `FOR_ALL_TABS` doesn't use `scol`.
Resolution: Remove.
Fix warnings: ops.c: do_join(): Nonnull violation: FP.

Problem: Argument with 'nonnull' attribute passed null @ 3540.
         http://neovim.org/doc/reports/clang/report-fc14e0.html#EndPath.

Diagnostic: False potitive.
Rationale : `count` should be >= 2 by function precondition.
Resolution: Assert precondition.
Fix warnings: ops.c: cursor_pos_info(): Various (2): MI.

Problems: Result of operation is garbage or undefined @ 5087.
          http://neovim.org/doc/reports/clang/report-2e3118.html#EndPath

          Result of operation is garbage or undefined @ 5149.

Diagnostic: Multithreading issues.
Rationale : All reported problems can only occur if accesed globals
            change state while executing function, which could only
            happen in a multithreaded environment.
Resolution: Use local variables (copy globals on entry).
            Note that this change alters function semantics, as now
            function only depends on global values at entry time.
            This shouldn't be a problem, though, as new semantics should
            be in fact better.
Fix warnings: regexp.c: skip_regexp: Np dereference: FP.

Problem: Derefence of null pointer @ 1208.
         http://neovim.org/doc/reports/clang/report-24b5ca.html#Path10

Diagnostic: False positive.
Rationale : Error is reported to happen  if after `if (*newp == NULL) {`
            body, `*newp` continues being NULL, and false branch of
            following `if (*newp != NULL)` is taken. Now, `vim_strsave`
            cannot return NULL, so error cannot happen.
Resolution: Remove dead code (leftover since OOM refactors).
Fix warnings: regexp.c: br_regcomp(): Np dereference: MI.

Problem: Dereference of null pointer @ 1312.
         http://neovim.org/doc/reports/clang/report-b1d09a.html#EndPath

Diagnostic: Multithreading issue.
Rationale : Suggested error path contains two succesive calls to
            `regnext(scan)`, first of which returning nonnull, the
            second one returning null. This can only occur if global
            `reg_toolong` accesed in `regnext()` changes between the
            calls.
Resolution: Use local variable to cache first `regnext(scan)` result.
            Note that this change alters function semantics, as now
            function only issues one call instead of two, reusing the
            result for the second time.
            This shouldn't be a problem, though, as new semantics should
            be in fact be better.
Fix warnings: regexp.c: match_with_backref(): Nonnull violation: FP.

Problem: Argument with 'nonnull' attribute passed null @ 5632.
         http://neovim.org/doc/reports/clang/report-041a0e.html#EndPath.

Diagnostic: False positive.
Rationale : `p = reg_getline(clnum)` above should not be null, because
            `clnum` starts at `start_lnum` and only increments after
            that.
Resolution: Assert p not null.
Fix warnings: edit.c: ins_compl_next_buf(): Np dereference: FP.

Problem    : Dereference of null pointer @ 3234.
Diagnostic : False positive.
Rationale  : `wp` is local static, so maintains value between calls.
             First time function is called for a given flag will have
             `buf == curbuf`, implying `wp` initialization.
Resolution : Assert variable always having been initialized.
Fix warnings: edit.c: ins_compl_get_exp(): Np dereference (2): FP.

Problems   : Dereference of null pointer @ 3615.
             Dereference of null pointer @ 3764.
Diagnostic : False positives.
Rationale  : `ins_buf` is local static, so maintains value between calls.
             This function will be called first when `compl_started` is
             false, and in that case it initializes `ins_buf`. After
             that, it can be called multiple times with `compl_started`
             true, where `ins_buf` will be updated but not to null.
             So, when arriving to both points, `ins_buf` should never be
             null.
Resolution : Assert `ins_buf` at both points.
Fix warnings: edit.c: mb_replace_pop_ins(): Unitilialized arg: FP.

Problem    : Uninitialized argument value @ 6296.
Diagnostic : False positive.
Rationale  : Error occurs if n <= 1. That's not possible because
             n >= 1 due to `MB_BYTE2LEN` postcondition and n != 1
             because we are in the else branch.
Resolution : Assert n > 1.
Fix warnings: edit.c: replace_do_bs(): Garbage value: MI.

Problem    : Assigned value is garbage or undefined @ 6359.
Diagnostic : Multithreading issue.
Rationale  : Problem only occurs if global `State` changes while
             function is executing.
Resolution : Use local copy of global in function.
Fix warnings: edit.c: ins_bs(): Garbage result: MI.

Problem    : Result of operation is garbage or undefined @ 7460.
Diagnostic : Multithreading issue.
Rationale  : Problem occurs if any of globals `enc_utf8`, `p_deco is
             modified while function is executing.
Resolution : Use local copy of globals.
CMake: Set custom RelWithDebInfo compile flags.
build: use the proper libintl include variable

What was there worked, but it wasn't meant to be the variable that you
use for inclusion.
build: give priority to /sw and /opt/local on Mac OS X

Unfortunately, we can't force the specific inclusion of a header file.
So if anything add /opt/local/include to the include path--such as
libintl--then other dependencies might be drawn from /opt/local at
compile time, even though we detected them elsewhere at configure time.
This, in turn, causes issues with mixed versions, such as the iconv.h
header being pulled from /opt/local/include, but linked against the
library in /usr/lib--which can be mismatched versions.

So, despite CMake's best effort to treat /sw and /opt/local as just
another system area, we really need to give them preferential treatment.
To do this, we add them to CMAKE_PREFIX_PATH.

This fixes an issue discovered while re-enabling iconv in #1370.
build: pull iconv detection into its own FindIconv.cmake file

This will provide better control for those who may want to alter which
one gets used.