[cfe-dev] How to create a new builtin in clang?

Jonathan Sauer jonathan.sauer at gmx.de
Fri May 18 10:11:07 PDT 2012


Hello,

> I'd like to learn a little about how clang works on the inside, and would 
> like to have a go at implementing a new "builtin" function which forces an 
> expression to be folded to a constant.  The idea would be that it would 
> either compile-time-evaluate the expression or halt compilation with an 
> error.  I believe there isn't anything currently that does this for 
> arbitrary types, only integers.

Maybe I'm missing something, but constexpr does exactly that:

struct Foo {
  constexpr Foo(int i) : i(i) {}
  Foo(int i, int dummy) : i(i) {}

  int i;
};


constexpr Foo myFoo = Foo(42);

constexpr Foo myFoo2 = Foo(42, 0);


As only <myFoo>, but not <myFoo2> can be initialized at compile-time, this results in
(TOT):

error: constexpr variable 'myFoo2' must be initialized by a constant expression
 constexpr Foo myFoo2 = Foo(42, 0);
               ^        ~~~~~~~~~~


Jonathan





More information about the cfe-dev mailing list