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