[PATCH] D102547: [clang][AVR] Redefine [u]int16_t to be compatible with avr-gcc
Ben Shi via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri May 14 23:28:20 PDT 2021
benshi001 created this revision.
benshi001 added a reviewer: efriedma.
Herald added subscribers: Jim, jfb, dylanmckay.
benshi001 requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D102547
Files:
clang/include/clang/Basic/TargetInfo.h
clang/lib/Basic/TargetInfo.cpp
clang/lib/Basic/Targets/AVR.cpp
clang/lib/Basic/Targets/AVR.h
clang/lib/Frontend/InitPreprocessor.cpp
Index: clang/lib/Frontend/InitPreprocessor.cpp
===================================================================
--- clang/lib/Frontend/InitPreprocessor.cpp
+++ clang/lib/Frontend/InitPreprocessor.cpp
@@ -216,6 +216,11 @@
if (TypeWidth == 64)
Ty = IsSigned ? TI.getInt64Type() : TI.getUInt64Type();
+ // Use the target specified int16 type when appropriate. Some MCU targets
+ // (such as AVR) have definition of [u]int16_t to [un]signed int.
+ if (TypeWidth == 16)
+ Ty = IsSigned ? TI.getInt16Type() : TI.getUInt16Type();
+
const char *Prefix = IsSigned ? "__INT" : "__UINT";
DefineType(Prefix + Twine(TypeWidth) + "_TYPE__", Ty, Builder);
Index: clang/lib/Basic/Targets/AVR.h
===================================================================
--- clang/lib/Basic/Targets/AVR.h
+++ clang/lib/Basic/Targets/AVR.h
@@ -52,6 +52,7 @@
IntPtrType = SignedInt;
Char16Type = UnsignedInt;
WIntType = SignedInt;
+ Int16Type = SignedInt;
Char32Type = UnsignedLong;
SigAtomicType = SignedChar;
resetDataLayout("e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8");
Index: clang/lib/Basic/Targets/AVR.cpp
===================================================================
--- clang/lib/Basic/Targets/AVR.cpp
+++ clang/lib/Basic/Targets/AVR.cpp
@@ -309,8 +309,6 @@
Builder.defineMacro("__AVR__");
Builder.defineMacro("__ELF__");
Builder.defineMacro("__flash", "__attribute__((address_space(1)))");
- Builder.defineMacro("__UINT16_TYPE__", "unsigned int");
- Builder.defineMacro("__INT16_TYPE__", "int");
if (!this->CPU.empty()) {
auto It = llvm::find_if(
Index: clang/lib/Basic/TargetInfo.cpp
===================================================================
--- clang/lib/Basic/TargetInfo.cpp
+++ clang/lib/Basic/TargetInfo.cpp
@@ -98,6 +98,7 @@
Char16Type = UnsignedShort;
Char32Type = UnsignedInt;
Int64Type = SignedLongLong;
+ Int16Type = SignedShort;
SigAtomicType = SignedInt;
ProcessIDType = SignedInt;
UseSignedCharForObjCBool = true;
Index: clang/include/clang/Basic/TargetInfo.h
===================================================================
--- clang/include/clang/Basic/TargetInfo.h
+++ clang/include/clang/Basic/TargetInfo.h
@@ -130,7 +130,7 @@
};
protected:
IntType SizeType, IntMaxType, PtrDiffType, IntPtrType, WCharType,
- WIntType, Char16Type, Char32Type, Int64Type, SigAtomicType,
+ WIntType, Char16Type, Char32Type, Int64Type, Int16Type, SigAtomicType,
ProcessIDType;
/// Whether Objective-C's built-in boolean type should be signed char.
@@ -351,6 +351,10 @@
IntType getUInt64Type() const {
return getCorrespondingUnsignedType(Int64Type);
}
+ IntType getInt16Type() const { return Int16Type; }
+ IntType getUInt16Type() const {
+ return getCorrespondingUnsignedType(Int16Type);
+ }
IntType getSigAtomicType() const { return SigAtomicType; }
IntType getProcessIDType() const { return ProcessIDType; }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D102547.345610.patch
Type: text/x-patch
Size: 2986 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210515/51737983/attachment.bin>
More information about the cfe-commits
mailing list