15154dce6388e3aaa445467030df7a45ed1211abeRichard Smith// RUN: %clang_cc1 %s -fsyntax-only -verify -std=c++11 279cbc7dd2aacd85a28f469b5dc73c4ea296e7072Anders Carlssontypedef const struct __CFString * CFStringRef; 379cbc7dd2aacd85a28f469b5dc73c4ea296e7072Anders Carlsson#define CFSTR __builtin___CFStringMakeConstantString 479cbc7dd2aacd85a28f469b5dc73c4ea296e7072Anders Carlsson 579cbc7dd2aacd85a28f469b5dc73c4ea296e7072Anders Carlssonvoid f() { 679cbc7dd2aacd85a28f469b5dc73c4ea296e7072Anders Carlsson (void)CFStringRef(CFSTR("Hello")); 7a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar} 885910986c4ab01927c192aea86b2234fec568259Douglas Gregor 985910986c4ab01927c192aea86b2234fec568259Douglas Gregorvoid a() { __builtin_va_list x, y; ::__builtin_va_copy(x, y); } 10a6c66cedc022c9e5d45a937d6b8cff491a6bf81bEli Friedman 11a6c66cedc022c9e5d45a937d6b8cff491a6bf81bEli Friedman// <rdar://problem/10063539> 12a6c66cedc022c9e5d45a937d6b8cff491a6bf81bEli Friedmantemplate<int (*Compare)(const char *s1, const char *s2)> 13a6c66cedc022c9e5d45a937d6b8cff491a6bf81bEli Friedmanint equal(const char *s1, const char *s2) { 14a6c66cedc022c9e5d45a937d6b8cff491a6bf81bEli Friedman return Compare(s1, s2) == 0; 15a6c66cedc022c9e5d45a937d6b8cff491a6bf81bEli Friedman} 16a6c66cedc022c9e5d45a937d6b8cff491a6bf81bEli Friedman// FIXME: Our error recovery here sucks 17a6c66cedc022c9e5d45a937d6b8cff491a6bf81bEli Friedmantemplate int equal<&__builtin_strcmp>(const char*, const char*); // expected-error {{builtin functions must be directly called}} expected-error {{expected unqualified-id}} expected-error {{expected ')'}} expected-note {{to match this '('}} 18a6c66cedc022c9e5d45a937d6b8cff491a6bf81bEli Friedman 19a6c66cedc022c9e5d45a937d6b8cff491a6bf81bEli Friedman// PR13195 20a6c66cedc022c9e5d45a937d6b8cff491a6bf81bEli Friedmanvoid f2() { 21a6c66cedc022c9e5d45a937d6b8cff491a6bf81bEli Friedman __builtin_isnan; // expected-error {{builtin functions must be directly called}} 22a6c66cedc022c9e5d45a937d6b8cff491a6bf81bEli Friedman} 23508276c8895d0a52198a0fa5dd01471236a94d50Rafael Espindola 24508276c8895d0a52198a0fa5dd01471236a94d50Rafael Espindola// pr14895 25508276c8895d0a52198a0fa5dd01471236a94d50Rafael Espindolatypedef __typeof(sizeof(int)) size_t; 26508276c8895d0a52198a0fa5dd01471236a94d50Rafael Espindolaextern "C" void *__builtin_alloca (size_t); 275154dce6388e3aaa445467030df7a45ed1211abeRichard Smith 285154dce6388e3aaa445467030df7a45ed1211abeRichard Smithnamespace addressof { 295154dce6388e3aaa445467030df7a45ed1211abeRichard Smith struct S {} s; 305154dce6388e3aaa445467030df7a45ed1211abeRichard Smith static_assert(__builtin_addressof(s) == &s, ""); 315154dce6388e3aaa445467030df7a45ed1211abeRichard Smith 325154dce6388e3aaa445467030df7a45ed1211abeRichard Smith struct T { constexpr T *operator&() const { return nullptr; } int n; } t; 335154dce6388e3aaa445467030df7a45ed1211abeRichard Smith constexpr T *pt = __builtin_addressof(t); 345154dce6388e3aaa445467030df7a45ed1211abeRichard Smith static_assert(&pt->n == &t.n, ""); 355154dce6388e3aaa445467030df7a45ed1211abeRichard Smith 365154dce6388e3aaa445467030df7a45ed1211abeRichard Smith struct U { int n : 5; } u; 375154dce6388e3aaa445467030df7a45ed1211abeRichard Smith int *pbf = __builtin_addressof(u.n); // expected-error {{address of bit-field requested}} 385154dce6388e3aaa445467030df7a45ed1211abeRichard Smith 395154dce6388e3aaa445467030df7a45ed1211abeRichard Smith S *ptmp = __builtin_addressof(S{}); // expected-error {{taking the address of a temporary}} 405154dce6388e3aaa445467030df7a45ed1211abeRichard Smith} 41f2941ec5bfcce36feffac514582d168b4e0ef811Reid Kleckner 42f2941ec5bfcce36feffac514582d168b4e0ef811Reid Klecknervoid no_ms_builtins() { 43f2941ec5bfcce36feffac514582d168b4e0ef811Reid Kleckner __assume(1); // expected-error {{use of undeclared}} 44f2941ec5bfcce36feffac514582d168b4e0ef811Reid Kleckner __noop(1); // expected-error {{use of undeclared}} 45f2941ec5bfcce36feffac514582d168b4e0ef811Reid Kleckner __debugbreak(); // expected-error {{use of undeclared}} 46f2941ec5bfcce36feffac514582d168b4e0ef811Reid Kleckner} 47