Define _Bool, bool, true, and false macros in <stdbool.h> when we're

in a GNU-compatible C++ dialect. Fixes <rdar://problem/8477819>.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@115028 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Douglas Gregor 2010-09-29 04:57:11 +00:00
Родитель e80622fd48
Коммит 593770b4ba
2 изменённых файлов: 21 добавлений и 1 удалений

Просмотреть файл

@ -26,11 +26,17 @@
#ifndef __STDBOOL_H
#define __STDBOOL_H
/* Don't define bool, true, and false in C++ */
/* Don't define bool, true, and false in C++, except as a GNU extension. */
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
#elif defined(__GNUC__) && !defined(__STRICT_ANSI__)
/* Define _Bool, bool, false, true as a GNU extension. */
#define _Bool bool
#define bool bool
#define false false
#define true true
#endif
#define __bool_true_false_are_defined 1

14
test/Headers/stdbool.cpp Normal file
Просмотреть файл

@ -0,0 +1,14 @@
// RUN: %clang_cc1 -E -dM %s | FileCheck --check-prefix=CHECK-GNU-COMPAT %s
// RUN: %clang_cc1 -std=c++98 -E -dM %s | FileCheck --check-prefix=CHECK-CONFORMING %s
#include <stdbool.h>
#define zzz
// CHECK-GNU-COMPAT: #define _Bool bool
// CHECK-GNU-COMPAT: #define bool bool
// CHECK-GNU-COMPAT: #define false false
// CHECK-GNU-COMPAT: #define true true
// CHECK-CONFORMING-NOT: #define _Bool
// CHECK-CONFORMING: #define __CHAR_BIT__
// CHECK-CONFORMING-NOT: #define false false
// CHECK-CONFORMING: #define zzz