diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 2ba9e874c96e095b39c4ed842faf010828fe48be..e3e1351f41f37d24d1c88d9ef27cac3278c85c2c 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2006-11-14  Tobias Burnus  <burnus@net-b.de>
+
+	PR fortran/29657
+	* symbol.c (check_conflict): Add further conflicts.
+
 2006-11-13  Jakub Jelinek  <jakub@redhat.com>
 
 	PR fortran/29759
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index fce6db46a87d4936d2e68ae271556a16b5d3ee10..6a5598de5c26d39bde0c7298b179f809c6fdb614 100644
--- a/gcc/fortran/symbol.c
+++ b/gcc/fortran/symbol.c
@@ -318,6 +318,8 @@ check_conflict (symbol_attribute * attr, const char * name, locus * where)
 	}
     }
 
+  conf (dummy, entry);
+  conf (dummy, intrinsic);
   conf (dummy, save);
   conf (dummy, threadprivate);
   conf (pointer, target);
@@ -427,6 +429,7 @@ check_conflict (symbol_attribute * attr, const char * name, locus * where)
     case FL_BLOCK_DATA:
     case FL_MODULE:
     case FL_LABEL:
+      conf2 (dimension);
       conf2 (dummy);
       conf2 (save);
       conf2 (pointer);
@@ -448,15 +451,16 @@ check_conflict (symbol_attribute * attr, const char * name, locus * where)
 
     case FL_PROCEDURE:
       conf2 (intent);
+      conf2(save);
 
       if (attr->subroutine)
 	{
-	  conf2(save);
 	  conf2(pointer);
 	  conf2(target);
 	  conf2(allocatable);
 	  conf2(result);
 	  conf2(in_namelist);
+	  conf2(dimension);
 	  conf2(function);
 	  conf2(threadprivate);
 	}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9693e4da1aafa1a7ba333508c751bf6ce83349f0..3a207cbc8ddb6093cdc1ab470cb02ec9af65edf6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-11-14  Tobias Burnus  <burnus@net-b.de>
+
+	PR fortran/29657
+	* gfortran.dg/conflicts.f90: Add.
+
 2006-11-14  Paolo Bonzini  <bonzini@gnu.org>
 
 	PR rtl-optimization/29798
diff --git a/gcc/testsuite/gfortran.dg/conflicts.f90 b/gcc/testsuite/gfortran.dg/conflicts.f90
new file mode 100644
index 0000000000000000000000000000000000000000..b1b59f4ac4c000f582c094fcbe3675e946fad2dd
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/conflicts.f90
@@ -0,0 +1,51 @@
+! { dg-do compile }
+! Check for conflicts
+! PR fortran/29657
+
+function f1() ! { dg-error "has no IMPLICIT type" }
+  implicit none
+  real, save :: f1 ! { dg-error "PROCEDURE attribute conflicts with SAVE attribute" }
+  f1 = 1.0
+end function f1
+
+function f2()
+  implicit none
+  real :: f2
+  save f2 ! { dg-error "PROCEDURE attribute conflicts with SAVE attribute" }
+  f2 = 1.0
+end function f2
+
+subroutine f3()
+  implicit none
+  dimension f3(3) ! { dg-error "PROCEDURE attribute conflicts with DIMENSION attribute" }
+end subroutine f3
+
+subroutine f4(b)
+  implicit none
+  real :: b
+  entry b ! { dg-error "DUMMY attribute conflicts with ENTRY attribute" }
+end subroutine f4
+
+function f5(a)
+  implicit none
+  real :: a,f5
+  entry a ! { dg-error "DUMMY attribute conflicts with ENTRY attribute" }
+  f5 = 3.4
+end function f5
+
+subroutine f6(cos)
+  implicit none
+  real :: cos
+  intrinsic cos ! { dg-error "DUMMY attribute conflicts with INTRINSIC attribute" }
+end subroutine f6
+
+subroutine f7(sin)
+  implicit none
+  real :: sin
+  external sin
+end subroutine f7
+
+program test
+  implicit none
+  dimension test(3) ! { dg-error "PROGRAM attribute conflicts with DIMENSION attribute" }
+end program test