HomePhabricator

[Expression Parser] Inhibit global lookups for symbols in the IR dynamic checks

Description

[Expression Parser] Inhibit global lookups for symbols in the IR dynamic checks

The IR dynamic checks are self-contained functions whose job is to

  • verify that pointers referenced in an expression are valid at runtime; and
  • verify that selectors sent to Objective-C objects by an expression are actually supported by that object.

These dynamic checks forward-declare all the functions they use and should not
require any external debug information. The way they ensure this is by marking
all the names they use with a dollar sign ($). The expression parser recognizes
such symbols and perform no lookups for them.

This patch fixes three issues surrounding the use of the dollar sign:

  • to fix a MIPS issue, the name of the pointer checker was changed from starting with $ to starting with _$, but this was not properly ignored; and
  • the Objective-C object checker used a temporary variable that did not start with $.
  • the Objective-C object checker used an externally-defined struct (struct objc_selector) but didn't need to.

The patch also implements some cleanup in the area:

  • it reformats the string containing the Objective-C object checker, which was mangled horribly when the code was transformed to a uniform width of 80 columns, and
  • it factors out the logic for ignoring global $-symbols into common code shared between ClangASTSource and ClangExpressionDeclMap.

Differential Revision: https://reviews.llvm.org/D38153

Details

Committed
spyffeSep 26 2017, 10:25 AM
Differential Revision
D38153: Inhibit global lookups for symbols in the IR dynamic checks
Parents
rL314224: [scudo] Scudo thread specific data refactor, part 3
Branches
Unknown
Tags
Unknown