Skip to content

Commit

Permalink
Merge pull request #17138 from jketema/generic
Browse files Browse the repository at this point in the history
C++: Support C11 `_Generic` expressions
  • Loading branch information
jketema authored Sep 3, 2024
2 parents 5e390a3 + 5281943 commit 62766f6
Show file tree
Hide file tree
Showing 22 changed files with 11,314 additions and 1,127 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*
* Approach: replace conversion expressions of kind 389 (= @c11_generic) by
* conversion expressions of kind 12 (= @parexpr), i.e., a `ParenthesisExpr`,
* and drop the relation which its child expressions, which are just syntactic
* sugar. Parenthesis expressions are equally benign as C11 _Generic expressions,
* and behave similarly in the context of the IR.
*/

class Expr extends @expr {
string toString() { none() }
}

class Location extends @location {
string toString() { none() }
}

class ExprParent extends @exprparent {
string toString() { none() }
}

query predicate new_exprs(Expr expr, int new_kind, Location loc) {
exists(int kind | exprs(expr, kind, loc) | if kind = 389 then new_kind = 12 else new_kind = kind)
}

query predicate new_exprparents(Expr expr, int index, ExprParent expr_parent) {
exprparents(expr, index, expr_parent) and
(
not expr_parent instanceof @expr
or
exists(int kind | exprs(expr_parent.(Expr), kind, _) | kind != 389)
)
}
Loading

0 comments on commit 62766f6

Please sign in to comment.