diff options
author | Pawel Wodnicki <pawel@32bitmicro.com> | 2012-11-28 22:01:30 +0000 |
---|---|---|
committer | Pawel Wodnicki <pawel@32bitmicro.com> | 2012-11-28 22:01:30 +0000 |
commit | bcc81cc1b7632c74183315c2c7ba49bca8694820 (patch) | |
tree | 5a9af4321772a9970d20903e24e70ecbd59e8444 | |
parent | 7fade2fe3e8cb63141fac7255f7d5b99ff713dc8 (diff) | |
download | clang-bcc81cc1b7632c74183315c2c7ba49bca8694820.tar.gz clang-bcc81cc1b7632c74183315c2c7ba49bca8694820.tar.bz2 clang-bcc81cc1b7632c74183315c2c7ba49bca8694820.tar.xz |
Merging r168674: into the 3.2 release branch.
Fix the definition of the vfork() builtin on Haiku. PR14378.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_32@168819 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/AST/ASTContext.h | 4 | ||||
-rw-r--r-- | include/clang/Basic/Builtins.def | 3 | ||||
-rw-r--r-- | include/clang/Basic/TargetInfo.h | 5 | ||||
-rw-r--r-- | lib/AST/ASTContext.cpp | 9 | ||||
-rw-r--r-- | lib/Basic/TargetInfo.cpp | 1 | ||||
-rw-r--r-- | lib/Basic/Targets.cpp | 1 |
6 files changed, 20 insertions, 3 deletions
diff --git a/include/clang/AST/ASTContext.h b/include/clang/AST/ASTContext.h index d559feed17..f0934b7796 100644 --- a/include/clang/AST/ASTContext.h +++ b/include/clang/AST/ASTContext.h @@ -1098,6 +1098,10 @@ public: /// <stddef.h>. Pointer - pointer requires this (C99 6.5.6p9). QualType getPointerDiffType() const; + /// \brief Return the unique type for "pid_t" defined in + /// <sys/types.h>. We need this to compute the correct type for vfork(). + QualType getProcessIDType() const; + /// \brief Return the C structure type used to represent constant CFStrings. QualType getCFConstantStringType() const; diff --git a/include/clang/Basic/Builtins.def b/include/clang/Basic/Builtins.def index e278137fa4..d48eadcd6b 100644 --- a/include/clang/Basic/Builtins.def +++ b/include/clang/Basic/Builtins.def @@ -41,6 +41,7 @@ // J -> jmp_buf // SJ -> sigjmp_buf // K -> ucontext_t +// p -> pid_t // . -> "...". This may only occur at the end of the function list. // // Types may be prefixed with the following modifiers: @@ -737,7 +738,7 @@ LIBBUILTIN(strcasecmp, "icC*cC*", "f", "strings.h", ALL_LANGUAGES) LIBBUILTIN(strncasecmp, "icC*cC*z", "f", "strings.h", ALL_LANGUAGES) // POSIX unistd.h LIBBUILTIN(_exit, "vi", "fr", "unistd.h", ALL_LANGUAGES) -LIBBUILTIN(vfork, "i", "fj", "unistd.h", ALL_LANGUAGES) +LIBBUILTIN(vfork, "p", "fj", "unistd.h", ALL_LANGUAGES) // POSIX setjmp.h // In some systems setjmp is a macro that expands to _setjmp. We undefine diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h index b0e58050d5..2d26783e38 100644 --- a/include/clang/Basic/TargetInfo.h +++ b/include/clang/Basic/TargetInfo.h @@ -172,7 +172,8 @@ public: protected: IntType SizeType, IntMaxType, UIntMaxType, PtrDiffType, IntPtrType, WCharType, - WIntType, Char16Type, Char32Type, Int64Type, SigAtomicType; + WIntType, Char16Type, Char32Type, Int64Type, SigAtomicType, + ProcessIDType; /// \brief Whether Objective-C's built-in boolean type should be signed char. /// @@ -213,7 +214,7 @@ public: IntType getChar32Type() const { return Char32Type; } IntType getInt64Type() const { return Int64Type; } IntType getSigAtomicType() const { return SigAtomicType; } - + IntType getProcessIDType() const { return ProcessIDType; } /// \brief Return the width (in bits) of the specified integer type enum. /// diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 1506197a47..74c68ae627 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -3534,6 +3534,12 @@ QualType ASTContext::getPointerDiffType() const { return getFromTargetType(Target->getPtrDiffType(0)); } +/// \brief Return the unique type for "pid_t" defined in +/// <sys/types.h>. We need this to compute the correct type for vfork(). +QualType ASTContext::getProcessIDType() const { + return getFromTargetType(Target->getProcessIDType()); +} + //===----------------------------------------------------------------------===// // Type Operators //===----------------------------------------------------------------------===// @@ -7217,6 +7223,9 @@ static QualType DecodeTypeFromStr(const char *&Str, const ASTContext &Context, return QualType(); } break; + case 'p': + Type = Context.getProcessIDType(); + break; } // If there are modifiers and if we're allowed to parse them, go for it. diff --git a/lib/Basic/TargetInfo.cpp b/lib/Basic/TargetInfo.cpp index 3257526289..83d4e2bf63 100644 --- a/lib/Basic/TargetInfo.cpp +++ b/lib/Basic/TargetInfo.cpp @@ -60,6 +60,7 @@ TargetInfo::TargetInfo(const std::string &T) : TargetOpts(), Triple(T) Char32Type = UnsignedInt; Int64Type = SignedLongLong; SigAtomicType = SignedInt; + ProcessIDType = SignedInt; UseSignedCharForObjCBool = true; UseBitFieldTypeAlignment = true; UseZeroLengthBitfieldAlignment = false; diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index ab02e6f3b5..f36ef826d0 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -2765,6 +2765,7 @@ public: SizeType = UnsignedLong; IntPtrType = SignedLong; PtrDiffType = SignedLong; + ProcessIDType = SignedLong; this->UserLabelPrefix = ""; this->TLSSupported = false; } |