>+    # Check if PSEUDO_IGNORE_PATHS and ${S} overlap
>+    pseudoignorepaths = d.getVar('PSEUDO_IGNORE_PATHS', expand=True).split(",")
>+    sourcefile = d.getVar('S')
>+    for i in pseudoignorepaths:
>+        if i and sourcefile:
>+            if sourcefile.startswith(i) or i.startswith(sourcefile):
>+                status.addresult("a path included in PSEUDO_IGNORE_PATHS " + str(i) + " and ${S} (source files) path " + str(sourcefile) + " are overlapping each other, please set ${S} in your recipe to point to a different directory. \n")

Isn't ${S} added to PSEUDO_IGNORE_PATHS almost every time in meta/classes/base.bbclass?
    if os.path.normpath(d.getVar("WORKDIR")) != os.path.normpath(d.getVar("S")):
        d.appendVar("PSEUDO_IGNORE_PATHS", ",${S}")

Best regards,
Tomasz Dziendzielski