Skip to content

Commit

Permalink
Disable _ExtInt by default
Browse files Browse the repository at this point in the history
Since the _ExtInt type got into the repo, we've discovered that the ABI
implications weren't completely understood. The other architectures are
going to be audited (see D79118), however downstream targets aren't
going to benefit from this audit.

This patch disables the _ExtInt type by default and makes the
target-info an opt-in.  As it is audited, I'll re-enable these for all
of our default targets.
  • Loading branch information
Erich Keane committed Apr 29, 2020
1 parent 82ed13c commit 911add1
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 0 deletions.
6 changes: 6 additions & 0 deletions clang/include/clang/Basic/TargetInfo.h
Expand Up @@ -547,6 +547,12 @@ class TargetInfo : public virtual TransferrableTargetInfo,
return (getPointerWidth(0) >= 64) || getTargetOpts().ForceEnableInt128;
} // FIXME

/// Determine whether the _ExtInt type is supported on this target. This
/// limitation is put into place for ABI reasons.
virtual bool hasExtIntType() const {
return false;
}

/// Determine whether _Float16 is supported on this target.
virtual bool hasLegalHalfType() const { return HasLegalHalfType; }

Expand Down
4 changes: 4 additions & 0 deletions clang/lib/Basic/Targets/X86.h
Expand Up @@ -435,6 +435,8 @@ class LLVM_LIBRARY_VISIBILITY X86_32TargetInfo : public X86TargetInfo {
}

ArrayRef<Builtin::Info> getTargetBuiltins() const override;

bool hasExtIntType() const override { return true; }
};

class LLVM_LIBRARY_VISIBILITY NetBSDI386TargetInfo
Expand Down Expand Up @@ -737,6 +739,8 @@ class LLVM_LIBRARY_VISIBILITY X86_64TargetInfo : public X86TargetInfo {
}

ArrayRef<Builtin::Info> getTargetBuiltins() const override;

bool hasExtIntType() const override { return true; }
};

// x86-64 Windows target
Expand Down
3 changes: 3 additions & 0 deletions clang/lib/Sema/SemaType.cpp
Expand Up @@ -1443,6 +1443,9 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) {
break;
}
case DeclSpec::TST_extint: {
if (!S.Context.getTargetInfo().hasExtIntType())
S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported)
<< "_ExtInt";
Result = S.BuildExtIntType(DS.getTypeSpecSign() == TSS_unsigned,
DS.getRepAsExpr(), DS.getBeginLoc());
if (Result.isNull()) {
Expand Down
5 changes: 5 additions & 0 deletions clang/test/Sema/ext-int-not-supported.c
@@ -0,0 +1,5 @@
// RUN: %clang_cc1 -triple armv7 -fsyntax-only -verify %s

void foo() {
_ExtInt(33) a; // expected-error{{_ExtInt is not supported on this target}}
}

0 comments on commit 911add1

Please sign in to comment.