]> granicus.if.org Git - clang/commitdiff
add support for a top-level __extension__ marker, implementing a todo.
authorChris Lattner <sabre@nondot.org>
Fri, 10 Aug 2007 20:57:02 +0000 (20:57 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 10 Aug 2007 20:57:02 +0000 (20:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41004 91177308-0d34-0410-b5e6-96231b3b80d8

Parse/Parser.cpp
test/Parser/extension.c [new file with mode: 0644]

index 3a5885af33ea43b6fd6c0eb9d0530fc8258bfb4e..7ff060978469b634e4fe7b58500d68df5f9500d6 100644 (file)
@@ -282,11 +282,11 @@ void Parser::ParseTranslationUnit() {
 
 /// ParseExternalDeclaration:
 ///       external-declaration: [C99 6.9]
-///         function-definition        [TODO]
-///         declaration                [TODO]
+///         function-definition
+///         declaration
 /// [EXT]   ';'
 /// [GNU]   asm-definition
-/// [GNU]   __extension__ external-declaration     [TODO]
+/// [GNU]   __extension__ external-declaration
 /// [OBJC]  objc-class-definition
 /// [OBJC]  objc-class-declaration
 /// [OBJC]  objc-alias-declaration
@@ -304,6 +304,13 @@ Parser::DeclTy *Parser::ParseExternalDeclaration() {
     ConsumeToken();
     // TODO: Invoke action for top-level semicolon.
     return 0;
+  case tok::kw___extension__: {
+    ConsumeToken();
+    // FIXME: Disable extension warnings.
+    DeclTy *RV = ParseExternalDeclaration();
+    // FIXME: Restore extension warnings.
+    return RV;
+  }
   case tok::kw_asm:
     ParseSimpleAsm();
     ExpectAndConsume(tok::semi, diag::err_expected_semi_after,
diff --git a/test/Parser/extension.c b/test/Parser/extension.c
new file mode 100644 (file)
index 0000000..77a2f17
--- /dev/null
@@ -0,0 +1,9 @@
+// RUN: clang %s -fsyntax-only
+
+// Top level extension marker.
+
+__extension__ typedef struct
+{
+    long long int quot; 
+    long long int rem; 
+}lldiv_t;