]> granicus.if.org Git - clang/commitdiff
Sema: Reject '#pragma options align=mac68k' everywhere except i386-apple-darwin.
authorDaniel Dunbar <daniel@zuster.org>
Thu, 27 May 2010 00:35:16 +0000 (00:35 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 27 May 2010 00:35:16 +0000 (00:35 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104789 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
include/clang/Basic/TargetInfo.h
lib/Basic/TargetInfo.cpp
lib/Basic/Targets.cpp
lib/Sema/SemaAttr.cpp
test/Parser/pragma-options.c
test/Sema/pragma-align-mac68k-unsupported.c [new file with mode: 0644]

index 51fea8ac9063a80c46caaa85e442ce04f0e0daf1..0ba31aee2ff5a671a1f708d3111afb6f6d90a075 100644 (file)
@@ -240,6 +240,8 @@ def warn_pragma_options_align_unsupported_option : Warning<
   "unsupported alignment option in '#pragma options align'">;
 def warn_pragma_options_align_reset_failed : Warning<
   "#pragma options align=reset failed: %0">;
+def err_pragma_options_align_mac68k_target_unsupported : Error<
+  "mac68k alignment pragma is not supported on this target">;
 def warn_pragma_pack_invalid_alignment : Warning<
   "expected #pragma pack parameter to be '1', '2', '4', '8', or '16'">;
 // Follow the MSVC implementation.
index 19987508baf37061beb13910d738a9a1304f66bd..00fd9b92e13ec60d3fab94a36d975d1a80df798e 100644 (file)
@@ -58,6 +58,8 @@ protected:
   const llvm::fltSemantics *FloatFormat, *DoubleFormat, *LongDoubleFormat;
   unsigned char RegParmMax, SSERegParmMax;
 
+  unsigned HasAlignMac68kSupport : 1;
+
   // TargetInfo Constructor.  Default initializes all fields.
   TargetInfo(const std::string &T);
 
@@ -210,6 +212,12 @@ public:
     return UseBitFieldTypeAlignment;
   }
 
+  /// hasAlignMac68kSupport - Check whether this target support '#pragma options
+  /// align=mac68k'.
+  bool hasAlignMac68kSupport() const {
+    return HasAlignMac68kSupport;
+  }
+
   /// getTypeName - Return the user string for the specified integer type enum.
   /// For example, SignedShort -> "short".
   static const char *getTypeName(IntType T);
index 4c0c59a109e74e505e6f0acae90685375fb1ce2f..6692e641f2a420d4073bb88a461180aea93d0ce3 100644 (file)
@@ -52,6 +52,7 @@ TargetInfo::TargetInfo(const std::string &T) : Triple(T) {
   DescriptionString = "E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-"
                       "i64:64:64-f32:32:32-f64:64:64-n32";
   UserLabelPrefix = "_";
+  HasAlignMac68kSupport = false;
 }
 
 // Out of line virtual dtor for TargetInfo.
index 3d5048ccb9bf7ac697512a23acbb7c12ba4989b9..99e5f669d7171b23c856abcbdd0734f76ed40bef 100644 (file)
@@ -1138,6 +1138,7 @@ public:
     DescriptionString = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-"
                         "i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-"
                         "a0:0:64-f80:128:128-n8:16:32";
+    HasAlignMac68kSupport = true;
   }
 
 };
index 770bd218d1929ff76e713fd781df446c99f5e8e8..430bd4d6be7cc676c0ef0b9ee7de782c0b1bb962 100644 (file)
@@ -15,6 +15,8 @@
 #include "Sema.h"
 #include "Lookup.h"
 #include "clang/AST/Expr.h"
+#include "clang/Basic/TargetInfo.h"
+#include "clang/Lex/Preprocessor.h"
 using namespace clang;
 
 //===----------------------------------------------------------------------===//
@@ -122,6 +124,18 @@ void Sema::ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind,
     Context->setAlignment(0);
     break;
 
+  case POAK_Mac68k:
+    // Check if the target supports this.
+    if (!PP.getTargetInfo().hasAlignMac68kSupport()) {
+      Diag(PragmaLoc, diag::err_pragma_options_align_mac68k_target_unsupported);
+      return;
+    } else {
+      // Otherwise, just warn about it for now.
+      Diag(PragmaLoc, diag::warn_pragma_options_align_unsupported_option)
+        << KindLoc;
+    }
+    break;
+
   default:
     Diag(PragmaLoc, diag::warn_pragma_options_align_unsupported_option)
       << KindLoc;
index 07b22fe5d305a75462c03c6909b031dde48164c9..815b2b4ead3bcac56863ddb251cbe194ca9ab6bd 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -verify %s
+// RUN: %clang_cc1 -triple i386-apple-darwin9 -fsyntax-only -verify %s
 
 /* expected-warning {{expected 'align' following '#pragma options'}} */ #pragma options
 /* expected-warning {{expected '=' following '#pragma options align'}} */ #pragma options align
diff --git a/test/Sema/pragma-align-mac68k-unsupported.c b/test/Sema/pragma-align-mac68k-unsupported.c
new file mode 100644 (file)
index 0000000..6588aa1
--- /dev/null
@@ -0,0 +1,4 @@
+// RUN: %clang-cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify %s
+// RUN: %clang-cc1 -triple i386-pc-linux-gnu -fsyntax-only -verify %s
+
+/* expected-error {{mac68k alignment pragma is not supported}} */ #pragma options align=mac68k